名词定义
双向认证(又称客户端认证或 SSL/TLS 双向认证)要求客户端和服务器在建立 HTTPS 连接时都要进行身份验证。
概述
HTTPS 双向认证通常用于需要高度安全性的场景,其中服务器和客户端都需要验证对方的身份。此时,除了配置服务器的证书之外,还需要配置客户端的证书,以实现通信双方的双向认证功能。
应用场景
1. 企业内部系统:用于内部系统之间的通信,例如在企业内部的微服务架构中,各个服务之间需要进行双向身份验证。
2. 银行和金融机构:用于客户端与银行服务器之间的通信,确保客户端和服务器都是合法且受信任的。
3. 政府机构通信:政府部门间或政府与合作伙伴之间的通信,确保通信双方的身份是可靠的。
4. 医疗保健领域:用于医疗信息系统中,确保只有经过授权的客户端可以访问和传输敏感的健康信息。
基本流程介绍
1. 生成服务器端证书。
2. 配置服务器。
在 Web 服务器(如Apache、Nginx)上安装服务器证书和私钥。
3. 生成客户端证书。
4. 配置服务器以接受客户端证书。
在服务器上配置双向认证以要求客户端提供有效的证书。
5. 配置客户端。
安装客户端证书。
6. 测试连接。
客户端尝试连接到服务器。
服务器验证客户端证书,客户端验证服务器证书。
操作步骤
本章节以腾讯云证书为例,指导您如何在 Nginx 服务器中部署双向认证。
说明:
本文档以证书名称
server.cloud.tencent.com
和client.cloud.tencent.com
为例。Nginx 版本以
nginx/1.18.0
为例。当前服务器的操作系统为 CentOS 7,由于操作系统的版本不同,详细操作步骤略有区别。
安装 SSL 证书前,请您在 Nginx 服务器上开启 HTTPS 默认端口
443
,避免证书安装后无法启用 HTTPS。具体请参见 服务器如何开启443端口?SSL 证书文件上传至服务器方法请参见 如何将本地文件拷贝到云服务器。
如果您的证书部署在腾讯云负载均衡,请参见 SSL 单向认证和双向认证说明 。
步骤一:购买服务器证书
1. 登录 SSL 证书购买页,购买服务器证书。若您无需指定证书品牌,可进入推荐购买选购性价比最高的 SSL 证书。
步骤二:配置服务器
1. 请在 SSL 证书控制台 中选择您需要使用的证书并单击下载。
2. 分别下载服务端
server.cloud.tencent.com
和客户端client.cloud.tencent.com
证书。如下图所示:
3. 下载客户端
client.cloud.tencent.com
证书的根证书。如下图所示:
4. 将下载得到的证书文件
server.cloud.tencent.com_bundle.crt
、server.cloud.tencent.com.key
和client.cloud.tencent.com_root.crt
上传至服务器。5. 编辑 Nginx 根目录下的
conf/nginx.conf
文件。修改内容如下:说明:
由于版本问题,配置文件可能存在不同的写法。例如:Nginx 版本为
nginx/1.15.0
以上请使用 listen 443 ssl
代替 listen 443
和 ssl on
。server { #SSL 默认访问端口号为 443 listen 443 ssl; #请填写绑定证书的域名 server_name server.cloud.tencent.com; #请填写证书文件的相对路径或绝对路径 ssl_certificate server.cloud.tencent.com_bundle.crt; #请填写私钥文件的相对路径或绝对路径 ssl_certificate_key server.cloud.tencent.com.key; ssl_session_timeout 5m; #请按照以下协议配置 ssl_protocols TLSv1.2 TLSv1.3; #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; #开启客户端验证 ssl_verify_client on; #请填写客户端根证书文件的相对路径或绝对路径 ssl_client_certificate client.cloud.tencent.com_root.crt; #证书验证深度。腾讯云免费证书建议设置为2 ssl_verify_depth 2;location / {#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。#例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。root html;index index.html index.htm;}}
6. 在 Nginx 根目录下,通过执行以下命令验证配置文件问题。
./sbin/nginx -t
若存在,请您重新配置或者根据提示修改存在问题。
若不存在,请执行 步骤7。
7.
在 Nginx
根目录下,通过执行以下命令重启 Nginx。./sbin/nginx -s reload
测试结果
直接使用
curl
命令进行访问。curl https://server.cloud.tencent.com
返回报错
400 Bad Request
。如下图所示:
使用
curl
命令带上受信任的客户端证书和私钥进行访问。curl https://server.cloud.tencent.com --cert /tmp/other_client.cloud.tencent.com_bundle.crt --key /tmp/other_client.cloud.tencent.com.key
返回成功。如下图: