在Nginx服务器上配置基于PCA证书的双向认证,主要是为了增强客户端与服务器间通信的安全性,要求不仅服务器向客户端证明自己的身份(服务器证书验证),同时客户端也需要向服务器证明其身份(客户端证书验证)。本文介绍如何在客户端浏览器与Nginx服务器间配置阿里云自签名X.509格式证书,实现Nginx的双向TLS/SSL认证。
本文以CentOS 8.0操作系统、Nginx 1.20.1和谷歌浏览器为例介绍。不同版本的操作系统或Web服务器,部署操作可能有所差异,如有问题,请联系产品技术专家进行咨询,详情请参见专家一对一服务。
方案概览
在Nginx服务器配置PCA证书双向认证大致分为4步,如下:
准备PCA证书:配置前,需在数字证书管理服务控制台导出CA根证书、服务端证书和客户端证书。
配置Nginx服务器:在Nginx服务器配置CA根证书和服务端证书。CA根证书用于验证来自客户端证书的真实性及有效性,服务端证书则是发送给客户端验证其真实性及有效性。
配置客户端浏览器:在谷歌浏览器配置CA根证书和客户端证书。CA根证书是为了验证来自服务端证书的真实性及有效性,客户端证书则是发送给服务端验证其真实性及有效性。
HTTPS加密访问验证:通过浏览器以HTTPS协议访问网站,验证客户端和浏览器之间的通信是否已经通过SSL/TLS协议加密。
前提条件
1.准备PCA证书
1.1 导出CA根证书
在数字证书管理服务控制台的证书管理 > PCA证书管理页面,找到根CA,单击详情。
在详情面板最下方,复制根CA证书内容,然后在本地新建一个TXT文件,将该内容粘贴进去,并将文件命名为
caroot.crt
。
1.2 导出服务端证书和客户端证书
在数字证书管理服务控制台的证书管理 > PCA证书管理页面,找到子CA,单击证书列表。
在证书列表页面,单击下载,选择证书格式后,将服务端证书(PEM格式)和客户端证书(PFX格式)下载至本地。
2.配置Nginx服务器
2.1 上传CA根证书和服务端证书至Nginx
执行以下命令,在Nginx中创建一个用于存放证书的目录
nginxcert
。mkdir /etc/pki/nginxcert
将本地CA根证书、解压好服务端证书和私钥文件上传至创建的目录中(
/etc/pki/nginxcert
)。说明您可以使用远程登录工具附带的本地文件上传功能,上传文件。例如PuTTy、Xshell或WinSCP等。如果您使用的阿里云云服务器 ECS,上传文件具体操作,请参见上传或下载文件(Windows)或上传文件到Linux云服务器。
2.2 在Nginx中配置CA根证书和服务端证书路径
执行以下命令,打开Nginx配置文件
nginx.conf
。本文示例Nginx为yum命令安装,故Nginx配置文件默认路径为
/etc/nginx/nginx.conf
。vim /etc/nginx/nginx.conf
参考以下示例,修改与证书相关的配置。
# Settings for a TLS enabled server. server { listen 443 ssl http2; listen [::]:443 ssl http2; # 需修改为您的网站域名 server_name example.com; root /usr/share/nginx/html; # 配置服务端公钥证书绝对路径。以下仅为示例,实际请需替换为真实的证书路径。 ssl_certificate "/etc/pki/nginx/example.com.pem"; # 配置服务端证书私钥绝对路径。以下仅为示例,实际请需替换为真实的证书私钥路径。 ssl_certificate_key "/etc/pki/nginx/example.com.key"; # 配置CA根证书绝对路径 ssl_client_certificate "/etc/pki/nginx/caroot.crt"; # 开启双向认证 ssl_verify_client on; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_prefer_server_ciphers on; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
执行以下命令,重启Nginx服务。
nginx -s reload #重新载入配置文件。
3.配置客户端浏览器
打开谷歌浏览器,进入设置页面。
在设置页面,单击隐私和安全,选择安全,并单击管理证书。
在受信任的根证书颁发机构页签,单击导入,并按照页面指引,导入根证书
caroot.crt
。在个人页签,单击导入,并按照页面指引,导入解压后的客户端证书(PFX),并输入客户端证书密码。
4.HTTPS加密访问验证
通过谷歌浏览器访问网站域名,选择证书并单击确定。
效果如下,客户端浏览器已信任服务端证书。
相关文档
在macOS系统安装根证书,请参见如何在macOS系统安装根证书。
在Windows系统安装根证书和中间证书,请参见在Windows服务器安装根证书和中间证书。