配置客户端证书身份认证(mTLS).note

noteId: WEB8919a3857de05d3dcba4492b14440e90 · 原始路径:/ALL/Linux - A模块/服务配置/Nginx、Nginx反向代理 - 80端口TCP/配置客户端证书身份认证(mTLS).note · 图片:13 · 附件待处理:0

 
一、Nginx配置客户端证书身份认证:
 
 
(1)配置 Nginx:
vim /etc/nginx/sites-enabled/default
 
参数:
ssl_client_certificate [file]    //指定进行客户端验证的根证书(如果客户端证书是由子CA签发,则该文件需要包含根CA的证书和子CA的证书)
ssl_verify_client on    //强制要求客户端提供有效证书
 
 
(2)将Web证书导出为 pkcs12格式文件:
# openssl pkcs12 -export -out [转换后的pkcs12文件名] -in [要被转换的证书文件] -inkey [要被转换证书的私钥] -certfile [ca根证书]
openssl pkcs12 -export -out client.p12 -in skill39.crt -inkey skill39.key -certfile ca.crt
将它拷贝给客户端
 
(3)客户端导入pkcs12格式证书:
cp client.p12 /home/user
chmod 755 /home/user/client.p12
打开火狐浏览器导入证书:
 
输入前面生成时输入的密码:
 
 
·客户端测试访问:
可以看到弹出了证书选择页面,点击OK
 
 
访问成功:
 
如果没有证书,或者取消选择证书就会报错:
 
 
 
二、将 mTLS 放在 nginx 子目录下:
nginx 和 apache不同,nginx不能够将 ssl_client_verify 命令参数放到 location 子目录下,但是放在全局并配置参数 ssl_client_verify optional;
然后在子目录中使用if语句检测,并reture 403,而主目录因为是 optional,所以即使不提供证书也能访问
vim /etc/nginx/sites-enabled/default
 
这里没有写好,return 应该是 400,客户端证书没有成功验证报错返回值应该是 400 而不是 403
 
·测试:
curl --cert client.crt --key client.key https://web.china.cn/secure
可以看到,不提供证书无法访问,提供证书后访问成功
 
·这个题目也可以使用这个方式解决:
# 环境:nginx作为反向代理,后端 apache2 的一个 location需要配置 客户端证书身份认证