Nginx https(SSL)双向认证配置
程序员文章站
2022-05-01 09:53:34
...
基于Let’s Encrypt证书和自签名证书实现双向认证。使用Let’s Encrypt实现客户端对服务端的验证,利用自签名证书完成服务端对客户端的认证。
在此只介绍自签名证书生成与配置部分(服务端对客户端的认证),Let’s Encrypt认证参考Let’sEncrypt SSL证书一键安装。
生成服务端证书
openssl genrsa -des3 -out ca.key 4096
openssl genrsa -out ca.key 4096
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
生成客户端证书
openssl genrsa -out client.key 4096
openssl req -new -key client.key -out client.csr
openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
openssl pkcs12 -in client.p12 -out all.pem -nodes
按提示填写信息,也可直接回车默认,遇到填写密码的地方,可以选择设置密码,防止证书被盗后的风险。
在Nginx开启对客户端的验证。
erver {
#....
ssl_client_certificate /root/ssl/all.pem;
ssl_verify_client on;
#.....
}
重启Nginx
nginx -t
nginx -s reload
在浏览器上导入证书
以Chrome为例,在地址栏输入chrome://settings/,在设置页下方找到[高级]选项,展开并找到[管理证书],导入证书(.p12文件)。
选择.pfx,p12类型的文件
输入证书密码
按提示导入完成后,重启浏览器(如果打开多个Chrome,关闭所有Chrome实例)。
重新打开Chrome输入地址,看到如下提示框,说明客户端证书导入成功。
以上是对一个Server范围的认证配置,也可针对具体的url实行认证。
修改Nginx配置
ssl_client_certificate ssl_client_certificate /root/ssl/all.pem;
ssl_verify_client optional;
location / {
if ($ssl_client_verify != SUCCESS) {
return 401;
}
}
完成后重启Nginx。
注:使用其他未导入证书的浏览器,验证双向认证是否生效。
缺失客户端证书效果
拥有客户端证书的访问效果
上一篇: ARP中间人攻击
下一篇: HTTPS连接过程以及中间人攻击劫持