欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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文件)。
Nginx https(SSL)双向认证配置
选择.pfx,p12类型的文件
Nginx https(SSL)双向认证配置
输入证书密码
Nginx https(SSL)双向认证配置
按提示导入完成后,重启浏览器(如果打开多个Chrome,关闭所有Chrome实例)。

重新打开Chrome输入地址,看到如下提示框,说明客户端证书导入成功。
Nginx https(SSL)双向认证配置

以上是对一个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。

注:使用其他未导入证书的浏览器,验证双向认证是否生效。

缺失客户端证书效果

Nginx https(SSL)双向认证配置

拥有客户端证书的访问效果

Nginx https(SSL)双向认证配置

相关标签: linux https