一、概述
HTTPS 双向认证通常用于需要高度安全性的场景,其中服务器和客户端都需要验证对方的身份。此时,除了配置服务器的证书之外,还需要配置客户端的证书,以实现通信双方的双向认证功能。
二、应用场景
1. 企业内部系统:用于内部系统之间的通信,例如在企业内部的微服务架构中,各个服务之间需要进行双向身份验证。
2. 银行和金融机构:用于客户端与银行服务器之间的通信,确保客户端和服务器都是合法且受信任的。
3. 政府机构通信:政府部门间或政府与合作伙伴之间的通信,确保通信双方的身份是可靠的。
4. 医疗保健领域:用于医疗信息系统中,确保只有经过授权的客户端可以访问和传输敏感的健康信息。
三、基本流程介绍
1. 生成服务器端证书。
2. 配置服务器。
·在 Web 服务器(如Apache、Nginx)上安装服务器证书和私钥。
3. 生成客户端证书。
4. 配置服务器以接受客户端证书。
·在服务器上配置双向认证以要求客户端提供有效的证书。
5. 配置客户端。
·安装客户端证书。
6. 测试连接。
·客户端尝试连接到服务器。
·服务器验证客户端证书,客户端验证服务器证书。
四、操作步骤
本章节以腾讯云证书为例,指导你如何在 Nginx 服务器中部署双向认证。
注意:说明:
五、步骤一:购买服务器证书
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
返回成功。如下: