基本流程:
- 自建CA机构(根证书)生成一个证书,签发各个环境的服务证书
- 在Server中配置:声明开启HTTPS;声明监听443端口
- 复制已签名的SSL证书和私钥到指定位置
- 配置已签名的SSL证书(.crt)和私钥(.key)的位置
- 浏览器中访问
一、mac安装openssl
1.git下载地址:GitHub - openssl/openssl: TLS/SSL and crypto library
2.在解压目录下执行
cd /Users/youzi/Downloads/openssl
sudo ./config -–prefix=/Users/youzi/Downloads/openssl
//这里需要输入本机密码
3.执行 make install
make install
4.查看版本 openssl version
openssl version
二、申请自签名的ssl证书
1.桌面创建ca文件夹,在该文件夹内打开终端
2.管理员权限(申请过程中有需要用到管理员权限)
sudo du
3.生成CA证书私钥(创建ca_private.key)
openssl genrsa -aes128 -passout pass:123456 -out ca_private.key 2048
//创建时输入的密码:123456
4.生成CA证书请求文件(使用ca_private.key创建ca_req.csr)
有效期20年
1openssl req -new -key ca_private.key -passin pass:123456 -out ca_req.csr -days 7300
#国家代码,2位,中国CN
#机构所在省份
#机构所在城市
#机构名称
#机构部门
#机构域名或服务域名
#邮箱
5.生成CA根证书(ca_root.crt)
1openssl x509 -req -in ca_req.csr -signkey ca_private.key -out ca_root.crt -days 7300 -passin pass:123456
6.生成服务端的证书私钥(server_private.key)
1openssl genrsa -aes128 -passout pass:123456 -out server_private.key 2048
7.生成服务端的待签名证书(server_req.csr)
1openssl req -new -key server_private.key -passin pass:123456 -out server_req.csr -days 365
//有效期1年
//#注意服务器证书的common Name不能与上面颁发者CA的一样
8.使用CA根证书对服务端证书签名(server.crt)
1openssl x509 -req -in server_req.csr -days 365 \
-CAkey ca_private.key -CA ca_root.crt -CAcreateserial \
-out server.crt
三、声明监听443端口
server {
listen 443; #监听端口
server_name test-h5-ekyc.ascent-ft.com; #域名
error_log /var/log/nginx/ekyc_h5_error.log error; #错误日志
access_log /var/log/nginx/ekyc_h5_access.log main; #定义本虚拟主机的访问日志
location /{
alias /data/ekyc/res/mobile/;
try_files $uri $uri/ /index.html last;
}
#对'/ex'启动反向代理
location /ex/ {
proxy_pass http://127.0.0.1:12000; #注意此处端口号不能与虚拟主机监听的端口号一样(也就是server监听的端口)
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-B3-Traceid $http_X_B3_Traceid;
proxy_connect_timeout 300; #后端服务器连接的超时时间_发起握手等候响应超时时间,nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 300; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 300; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置
}
location /app/ {
proxy_pass http://127.0.0.1:12000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-B3-Traceid $http_X_B3_Traceid;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
}
}
四、nginx配置https
1.ssh到服务器
ssh root@192.168.3.101 2//输入密码
2.复制已签名的SSL证书和私钥到指定位置
cd /etc
cd ssl
mkdir cert
本地终端打开
//上传文件夹到远程服务器
scp -r /Users/youzi/Desktop/ca root@192.168.3.101:/etc/ssl/cert
3.配置已签名的SSL证书(.crt)和私钥(.key)的位置
打开ekyc项目的nginx配置文件
路径:/etc/nginx/sites-enabled/ekyc_h5.conf
ssl on; 2ssl_certificate /etc/ssl/cert/ca/server.crt 3ssl_certificate_key /etc/ssl/cert/ca/server_private.key
4.重启nginx
nginx -s reload
//ssl生成证书后,放到配置文件中,重启每次卡在Enter PEM pass phrase:需要输入密码
原因是在设置私钥key时将密码设置写入了key文件,导致Nginx服务器在启动时要求Enter PEM pass phrase。我们需要做的是剥离这个密码,利用如下OpenSSL命令生成server.key.unsecure文件:
openssl rsa -in server_private.key -out server.key.unsecure
修改Nginx配置:
ssl_certificate_key /etc/ssl/cert/ca/server.key.unsecure;
再次重启nginx就不会有输入密码提示了