文档中心>SSL 证书>实践教程>HTTPS 双向认证指南

HTTPS 双向认证指南

最近更新时间:2024-10-29 15:50:42

我的收藏

名词定义

双向认证(又称客户端认证或 SSL/TLS 双向认证)要求客户端和服务器在建立 HTTPS 连接时都要进行身份验证。

概述

HTTPS 双向认证通常用于需要高度安全性的场景,其中服务器和客户端都需要验证对方的身份。此时,除了配置服务器的证书之外,还需要配置客户端的证书,以实现通信双方的双向认证功能。

应用场景

1. 企业内部系统:用于内部系统之间的通信,例如在企业内部的微服务架构中,各个服务之间需要进行双向身份验证。
2. 银行和金融机构:用于客户端与银行服务器之间的通信,确保客户端和服务器都是合法且受信任的。
3. 政府机构通信:政府部门间或政府与合作伙伴之间的通信,确保通信双方的身份是可靠的。
4. 医疗保健领域:用于医疗信息系统中,确保只有经过授权的客户端可以访问和传输敏感的健康信息。

基本流程介绍

1. 生成服务器端证书。
2. 配置服务器。
在 Web 服务器(如Apache、Nginx)上安装服务器证书和私钥。
3. 生成客户端证书。
4. 配置服务器以接受客户端证书。
在服务器上配置双向认证以要求客户端提供有效的证书。
5. 配置客户端。
安装客户端证书。
6. 测试连接。
客户端尝试连接到服务器。
服务器验证客户端证书,客户端验证服务器证书。

操作步骤

本章节以腾讯云证书为例,指导您如何在 Nginx 服务器中部署双向认证。
说明:
本文档以证书名称 server.cloud.tencent.comclient.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.crtserver.cloud.tencent.com.keyclient.cloud.tencent.com_root.crt上传至服务器。
5. 编辑 Nginx 根目录下的 conf/nginx.conf 文件。修改内容如下:
说明:
由于版本问题,配置文件可能存在不同的写法。例如:Nginx 版本为 nginx/1.15.0 以上请使用 listen 443 ssl 代替 listen 443ssl 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
返回成功。如下图: