对于一些安全性要求较高的场景,例如金融交易、医疗、银行、在线支付等,传统的单向认证(仅验证服务端身份)无法满足安全需求,服务器默认信任所有连接到它的客户端,可能导致中间人攻击、未授权访问等安全风险。您可以使用DDoS高防的HTTPS双向认证功能,为业务提供更高的安全性。双向认证要求客户端和服务端在建立连接之前,双方都需要验证对方的身份,双方都通过认证后,才能建立安全通信通道进行数据传输。本文介绍如何配置双向认证。
功能介绍
为什么要用双向认证
大部分互联网Web应用,用户客户端来源广泛且无需限制,实现HTTPS加密通信时仅需要使用单向认证(即客户端在访问应用前验证服务端身份),从而保证用户连接到的是正确的服务器。
对于安全性更高的场景或应用,在需要验证服务端身份的同时,还需要验证客户端身份,此时可以使用双向认证功能,从而保证仅获得授权的客户端访问接入,降低中间人攻击、未授权访问等安全风险。
单向认证与双向认证对比
对比项 | 单向认证 | 双向认证 |
涉及的证书文件 | 服务端证书: | |
握手过程 |  |  |
应用场景
对于安全性要求较高的业务场景,例如金融交易、医疗、银行、物联网、在线支付等,在验证服务端身份的同时,系统也需要验证客户端的身份。
若无客户端身份认证需求,则无需使用双向认证。
场景示例
某政府电子政务服务平台,在接入DDoS高防防御DDoS攻击时,为了避免攻击者伪造政务平台域名或通过钓鱼网站诱导用户访问导致信息泄露,恶意用户通过自动化工具爬取政务公开接口等,建议在接入DDoS高防时配置HTTPS双向认证。

步骤一:创建CA证书并生成客户端证书
方式一:使用阿里云签发的CA证书生成客户端证书
您可以参考申请签发私有证书来申请客户端证书。
购买及启用私有CA。
说明 私有CA中一个根CA下可以包含多个子CA,只有子CA可用于签发私有证书(包括服务端证书、客户端证书)。
使用私有子CA申请客户端证书。
登录数字证书管理服务控制台,在左侧导航栏,选择。
在私有CA页签,定位到目标子CA,在操作列,单击申请证书。

在申请证书面板完成证书信息配置,单击确认申请。
在本文场景中,证书类型选择客户端证书,姓名请填写该客户端用户的唯一标识,其他参数配置可保持默认或根据实际需要进行修改。
提交证书申请后,私有CA证书会立即签发。签发后,您可以单击子CA操作列下的证书列表,查看已签发的证书信息。
导出客户端证书。
在私有CA页签,定位到目标子CA,在操作列,单击证书列表。
在证书列表页面,定位到目标私有证书,在操作列,单击下载。
在证书下载对话框,选择需要下载的证书格式,单击确认并下载(勾选包含信任链,下载后的证书中将包含完整证书链)。
本文场景中,证书格式选择浏览器可以识别的PFX格式。
如下图所示,下载的证书文件中,包括.pfx
后缀的客户端证书文件以及.txt
后缀的客户端私钥加密密码。

方式二:使用非阿里云签发的CA证书生成客户端证书
支持自签名根CA或自签名子CA证书进行双向认证,本文以自签名根CA证书为例为您介绍。
使用OPENSSL生成自签名根CA证书。
执行以下命令,创建根CA证书私钥。
openssl genrsa -out root.key 4096
执行以下命令,创建根CA证书请求文件。
openssl req -new -out root.csr -key root.key
后续参数请自行填写,示例如下:
说明 注意CA证书Common Name需要保证唯一性,不要与服务端证书或者客户端证书的Common Name相同。
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:bj
Locality Name (eg, city) [Default City]:bj
Organization Name (eg, company) [Default Company Ltd]:alibaba
Organizational Unit Name (eg, section) []:test
Common Name (eg, your name or your servers hostname) []:root
Email Address []:a****@example.com
A challenge password []:
An optional company name []:
执行以下命令,创建根CA证书。
openssl x509 -req -in root.csr -out root.crt -signkey root.key -CAcreateserial -days 3650
运行结果如下图所示:

执行ls
命令,可查看到生成的根CA证书root.crt
和根CA证书私钥root.key
。
您可以将这些根CA证书文件下载到本地进行保存,便于后续上传至阿里云证书中心。
使用根CA证书生成客户端证书。
执行以下命令,生成客户端证书密钥。
openssl genrsa -out client.key 4096
执行以下命令,生成客户端证书请求文件。
openssl req -new -out client.csr -key client.key
后续参数请自行填写,示例如下:
说明 注意CA证书Common Name需要保证唯一性,不要与服务端证书、根证书和其他客户端证书的Common Name相同。
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:bj
Locality Name (eg, city) [Default City]:bj
Organization Name (eg, company) [Default Company Ltd]:alibaba
Organizational Unit Name (eg, section) []:test
Common Name (eg, your name or your servers hostname) []:client-alb-user
Email Address []:username@example.com
A challenge password []:
An optional company name []:
执行以下命令,生成客户端证书。
openssl x509 -req -in client.csr -out client.crt -CA root.crt -CAkey root.key -CAcreateserial -days 3650
运行结果如下图所示:

执行以下命令,将生成的客户端证书client.crt
转换为浏览器可以识别的PKCS12文件。按照提示输入设置的客户端私钥加密密码。
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
执行ls
命令,可查看到生成的client.p12
客户端证书文件。
您可以将客户端证书文件下载到本地进行保存,便于后续发送至客户端使用。
上传自签名根CA证书至阿里云数字证书管理服务。
登录数字证书管理服务控制台。
在左侧导航栏,选择。
在证书应用仓库页面,单击创建仓库,在创建仓库面板,配置数据来源为上传CA证书,然后单击确定。

在证书应用仓库页面,单击已创建的证书仓库。
在证书管理页面,单击上传证书,在CA信息面板,上传根CA证书文件root.crt
,单击确认并启用。
步骤二:将域名接入DDoS高防并开启双向认证
登录DDoS高防控制台的域名接入页面。
在顶部菜单栏左上角处,根据DDoS高防产品选择地域。
DDoS高防(中国内地):选择中国内地地域。
DDoS高防(非中国内地):选择非中国内地地域。
在域名接入页面,单击添加网站,根据指引完成域名接入。
本文仅描述双向认证如何开启,其他配置项,请参见添加网站配置。
在HTTPS协议相关的配置区域,勾选启用双向认证,根据证书来源选择CA证书。
配置完成后,请复制DDoS高防的CNAME地址。
步骤三:配置域名解析
实际业务场景中,建议您使用自有域名,通过CNAME解析的方式将自有域名指向DDoS高防的CNAME地址。
以域名DNS托管在阿里云云解析DNS为例介绍,当您使用其他DNS服务商的域名解析服务时仅供参考。
登录阿里云云解析DNS控制台。
在权威域名解析页面,定位到目标域名,单击操作列下的解析设置。
在解析设置页面,定位到要修改的解析记录,单击操作列下的修改。
说明 如果要操作的解析记录不在记录列表中,您可以单击添加记录。
本文场景中,记录类型配置为CNAME,记录值配置为DDoS高防的CNAME地址,其他配置项可保持默认值或根据实际情况修改。
单击确认,等待修改后的解析设置生效。
步骤四:测试HTTPS双向认证
本文Windows客户端使用Chrome浏览器为例进行测试。
将步骤一中创建的客户端证书安装到客户端。
双击已下载的客户端证书文件,根据系统证书导入向导提示完成客户端证书安装。
在浏览器中,输入https://<自有域名>
,在弹出的对话框中选择用于验证客户端身份的证书。
刷新浏览器,观察客户端是否能正常访问域名。