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认证详解

 

posted @ 2022-08-12 11:16  如幻行云  阅读(1318)  评论(0编辑  收藏  举报