文章目录
- 需求
- 1、安装OpenSSL
- 1.1、安装包下载
- 1.2、安装(以window 64位为例)
- 1.3、配置环境变量(非必须)
- 2、生成证书
- 2.1、新建文件夹
- 2.2、生成根证书
- 2.2.1、生成私钥
- 2.2.2、生成根证书,并且自签名
- 2.3、服务端证书生成
- 2.3.1、生成私钥
- 2.3.2、去除key的密码
- 2.3.3、生成服务端证书
- 2.3.4、使用根证书进行签名
- 2.4、客户端证书生成
- 2.5、证书转换
- 3、配置Nginx
- 说明
需求
在调用部分接口或者使用部分组件的场景下,必须在https的环境下才能使用(如:h5调用手机摄像头扫码);但由于只是用于测试,不想花钱买正式的证书;就可以使用该方法,生成一个证书,模拟https环境。
1、安装OpenSSL
1.1、安装包下载
window:
链接:https://pan.baidu.com/s/1HlySuOy4FkzKK_vTOz9ZBg
提取码:07ay
Linux:
链接:https://pan.baidu.com/s/1JDhUCERcqsZw1BoluapJJw
提取码:swwb
1.2、安装(以window 64位为例)
选择 Win64OpenSSL-3_0_0.exe 安装包,正常安装就行,可以存放在指定文件夹
1.3、配置环境变量(非必须)
安装完成后,可以设置环境变量,也可以不设置环境变量,设置环境变量的好处是:在任意位置通过cmd命令行窗口都可以执行openssl命令,而没有设置环境变量则需要进入OpenSSL安装目录进行命令行的操作
配置方法:右键“此电脑” -> 属性 -> 高级系统设置 -> 高级 -> 环境变量 -> 新建 OPENSSL_HOME -> 添加到Path中
添加到PATH
2、生成证书
首先进入cmd 进入openssl的安装目录下的 bin 目录(以配置过环境变量的可以省略这一步)
2.1、新建文件夹
1、openssl安装目录下的bin目录内新建 demoCA文件夹
2、在 demoCA目录内新建 newcerts文件夹、index.text
3、建立一个 serial文件 里面写 01
2.2、生成根证书
2.2.1、生成私钥
输入以下命令,回车;提示输入密码,我设定的密码是123456,为方便记忆,后面密码都默认是123456,根据自己需求设置就好。
openssl genrsa -des3 -out root.key 1024
执行完命令后,可以看到openssl安装目录下多了一个root.key文件
2.2.2、生成根证书,并且自签名
openssl req -new -x509 -key root.key -out root.crt -config openssl.cfg
回车后,提示需要部分信息,该部分信息照着抄就行,没有二次校验的过程,自己随便填,但是填写域名的位置尽量真实点;因为我后面是用的ip,所以域名我也是随便填写的。填写完成后,需要记住,后面生成其他证书文件的时候,需要保持一致性,不然还是会失败。
填写完成后,会生成一个root.crt文件
2.3、服务端证书生成
生成的证书需要配置到Nginx或者Apache HttpServer
2.3.1、生成私钥
openssl genrsa -des3 -out server.key 1024
2.3.2、去除key的密码
为什么要去除server.key的密码呢?这边不是去除而是代表这个证书在被应用程序启动时不需要显示的提示用户输入口令,否则启动Nginx是需要我们输入密码(如图)。
openssl rsa -in server.key -out server.key
2.3.3、生成服务端证书
接下来生成证书,同样也会提示输入密码,和上面一样,默认123456就行;需要输入信息,切记和2.2.2保持一致,不然会生成失败。正常情况会生成两个文件,一个server.key 一个server.csr 。
openssl req -new -key server.key -out server.csr
2.3.4、使用根证书进行签名
使用root.crt和root.key给server.csr进行签名
openssl ca -in server.csr -out server.crt -cert root.crt -keyfile root.key -config openssl.cfg
再次查看已经生成了server.crt文件了
2.4、客户端证书生成
openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr
openssl ca -in client.csr -out client.crt -cert root.crt -keyfile root.key -config openssl.cfg
2.5、证书转换
openssl pkcs12 -export -in server.crt -inkey server.key
3、配置Nginx
打开nginx.cnf 找到 HTTPS server
# HTTPS server
#
server {
listen 443 ssl;
server_name www.kanyun.cpa.cn;
ssl_certificate ../cert/server.crt;
ssl_certificate_key ../cert/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root F:\cpaweb\dist;
index index.html index.htm;
}
}
刚才生成的证书文件和key的位置,要写相对路径,建议将这两个文件放到nginx配置文件的同级目录,写绝对路径可能会报错
说明
证书类别 :
- 根证书 生成服务器证书,客户端证书的基础。自签名。
- 服务器证书 由根证书签发。配置在服务器上。
- 客户端证书 由根证书签发。配置在服务器上,并发送给客户,让客户安装在浏览器里。
注意点:
- 服务器证书的cn要和server_name一致,否则启动httpd时有警告。
- 浏览器安装客户端证书时,需要用pkcs12转换成pfx格式,否则可以安装但无效。
- 把根证书安装到浏览器的受信CA中,访问服务器时就不会出警告了。