Nginx 配置https的单向或双向认证
一、自制https认证证书
1. 制作CA证书
A. 生成CA私钥:openssl genrsa -des3 -out ca.key 2048,注意要输入两次密码,若去除密码使用openssl rsa -in ca.key -out ca.key;
B. 生成请求文件:openssl req -new -key ca.key -out ca.csr -subj "/C=CN/ST=HuBei/L=WuHan/O=dev/OU=dev/CN=rhxy",注意有可能报错,原因是默认 -config /usr/ssl/openssl.cnf,通过openssl version -a查看配置;
C. 生成CA证书:openssl x509 -req -days 730 -in ca.csr -signkey ca.key -out ca.crt;
2. 制作Server端证书
A. 生成服务端私钥:openssl genrsa -des3 -out server.key 2048;
B. 生成服务端公钥:openssl rsa -in server.key -pubout -out server.pem;
C. 生成请求文件:openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=HuBei/L=WuHan/O=dev/OU=dev/CN=rhxy"
D. 生成服务端带有CA签名的证书:openssl x509 -req -days 730 -CA ca.crt -CAKey ca.key -CAcreateserial -in server.csr -out server.crt;
3. 制作Client端证书
A. 生成客户端私钥:openssl genrsa -des3 -out client.key 2048;
B. 生成客户端公钥:openssl rsa -in client.key -pubout -out client.pem;
C. 生成请求文件:openssl req -new -key client.key -out client.csr -subj "/C=CN/ST=HuBei/L=WuHan/O=dev/OU=dev/CN=rhxy"
D. 生成客户端带有CA签名的证书:openssl x509 -req -days 730 -CA ca.crt -CAKey ca.key -CAcreateserial -in client.csr -out client.crt;
注意:windows上安装的证书需要pfx/p12格式:openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfx
4. 自签名证书和私有CA签名的证书区别
A. 自签名证书无法吊销,而私有CA签名的证书可以吊销;
二、配置单向认证
1. 放置服务端证书文件:涉及server.key、server.crt文件放入conf.d/cert目录下;
2. 更改nginx配置并重启:./nginx -s reload;
server { listen 443 ssl;
listen [::]:443 ssl; server_name rhxy.com; ssl_certificate conf.d/cert/server.crt; ssl_certificate_key conf.d/cert/server.key; ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on;
location / { root html; index index.html index.htm; } }
3. 测试:在谷歌浏览器地址栏中输入url访问,会弹出不安全连接的警告,点击忽略,继续访问,即可访问相应资源;
三、配置双向认证
1. 放置服务端证书文件:涉及server.key、server.crt、ca.crt文件放入conf.d/cert目录下;
2. 更改nginx配置并重启:./nginx -s reload;
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name rhxy.com;
ssl_certificate conf.d/cert/server.crt;
ssl_certificate_key conf.d/cert/server.key;
ssl_client_certificate conf.d/cert/ca.crt;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_verify_client on;
location / {
root html;
index index.html index.htm;
}
}
3. 导入客户端证书
A. 打开浏览器,找到设置->隐私设置和安全性->安全->管理证书,将client.pfx导入浏览器中;
B. 重启浏览器:导入成功后需要关闭浏览器再重启,然后访问会弹出提示,单击对应证书就可以正常访问了;
可参考:SSL/TLS认证详解