对于一些安全性要求较高的场景,例如金融交易、医疗、银行、在线支付等,传统的单向认证(仅验证服务端身份)无法满足安全需求,服务器默认信任所有连接到它的客户端,可能导致中间人攻击、未授权访问等安全风险。您可以使用ALB的HTTPS双向认证功能,为业务提供更高的安全性。双向认证要求客户端和服务端在建立连接之前,双方都需要验证对方的身份,双方都通过认证后,才能建立安全通信通道进行数据传输。
功能介绍
为什么要用双向认证
大部分互联网Web应用,用户客户端来源广泛且无需限制,实现HTTPS加密通信时仅需要使用单向认证(即客户端在访问应用前验证服务端身份),从而保证用户连接到的是正确的服务器。
对于安全性更高的场景或应用,在需要验证服务端身份的同时,还需要验证客户端身份,此时可以使用双向认证功能,从而保证仅获得授权的客户端访问接入,降低中间人攻击、未授权访问等安全风险。
什么场景下使用双向认证
对于安全性要求较高的业务场景,例如金融交易、医疗、银行、在线支付等,在验证服务端身份的同时,系统也需要验证客户端的身份。
若无客户端身份认证需求,则无需使用双向认证。
ALB双向认证功能使用限制
仅标准版和WAF增强版的ALB实例支持双向认证,基础版ALB实例不支持双向认证。
仅HTTPS监听支持双向认证,QUIC监听及HTTP监听均不支持双向认证。
场景示例
某企业部署了一套面向客户的在线交易平台,初期仅采用HTTPS单向认证,但发现部分未经授权的设备尝试访问系统,存在数据泄露和交易篡改风险。此外,随着业务规模的增长,平台还面临流量高峰时性能压力增大的问题。
为解决以上问题,企业决定部署阿里云ALB并启用双向认证。
通过ALB的负载均衡能力,平台能够高效分发客户端请求至后端服务器,确保在高并发场景下依然保持稳定的性能和快速的响应速度。
通过在ALB中启用双向认证,可确保所有访问平台的客户端必须提供有效的客户端证书才能建立连接,有效阻止未经授权的设备接入系统,大幅降低数据泄露和交易篡改的风险。
前提条件
本文以从阿里云数字证书管理服务控制台购买服务器证书为例。
说明购买SSL证书时需要绑定域名,请确保您拥有真实可用的域名。
您已在证书中心购买及启用子CA证书,且私有子CA的证书剩余数量不为0;或已上传自签名根CA或自签名子根CA证书至证书中心。
您已创建专有网络VPC1,并在VPC1中创建ECS实例2台,且ECS01和ECS02实例中部署了应用服务。
本文以Alibaba Cloud Linux 3操作系统为例,使用Nginx配置HTTPS服务。
您已创建ALB实例(标准版或WAF增强版)。
您已创建服务器组,并添加了ECS01和ECS02作为后端服务器。
如需ALB与后端服务使用HTTPS协议通信,请在创建服务器组时选择后端协议为HTTPS,并确保后端服务器已部署HTTPS服务。
操作步骤
步骤一:配置客户端证书
客户端(用户)需要完成准备客户端证书、导出客户端证书操作。
本文为您介绍两种获取CA证书的方式。您可以通过证书中心购买CA证书并申请客户端证书,也可以上传自签CA证书至证书中心。
1.准备客户端证书
方式一:申请客户端证书
您可以参考申请签发私有证书来申请客户端证书。
登录数字证书管理服务控制台。
在左侧导航栏,选择,在PCA证书管理页面,选择PCA服务所在地域。
在私有CA页签,定位到目标子CA,在操作列,单击申请证书。
在申请证书面板,参考下表完成证书信息配置,单击确认申请。
本文场景中,申请客户端证书时,证书类型选择客户端证书,并输入姓名(用于标识该客户端用户的唯一标识),申请客户端证书其他参数配置可保持默认或根据实际需要进行修改。
提交证书申请后,私有CA证书会立即签发。签发后,您可以单击子CA操作列下的证书列表,查看已签发的证书信息。
方式二:上传自签CA证书
远程登录ECS01,执行以下命令,生成自签名根CA证书。
ALB支持自签名根CA或自签名子CA证书进行双向认证,本文以自签名根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证书至阿里云证书中心。
登录数字证书管理服务控制台。
在左侧导航栏,选择。
在证书应用仓库页面,单击创建仓库,在创建仓库面板,配置数据来源为上传CA证书,然后单击确定。
在证书应用仓库页面,单击已创建的证书仓库。
在证书管理页面,单击上传证书,在CA信息面板,上传根CA证书文件
root.crt
,单击确认并启用。
2.导出客户端证书
方式一:导出通过控制台购买的客户端证书
如果您已通过控制台购买了客户端证书,并需要通过该客户端证书进行双向认证,请执行以下操作导出客户端证书。
在私有CA页签,定位到目标子CA,在操作列,单击证书列表。
在证书列表页面,定位到目标私有证书,在操作列,单击下载。
在证书下载对话框,选择需要下载的证书格式,单击确认并下载(勾选包含信任链,下载后的证书中将包含完整证书链)。
本文场景中,证书格式选择浏览器可以识别的PFX格式。
如下图所示,下载的证书文件中,包括
.pfx
后缀的客户端证书文件以及.txt
后缀的客户端私钥加密密码。
方式二:导出通过自签证书生成的客户端证书
如果您已上传自签CA证书至证书中心,并需要自签CA证书生成的客户端证书进行双向认证,请执行以下操作生成客户端证书。
远程登录ECS01,执行以下步骤,生成客户端证书。具体操作,请参见ECS远程连接操作指南。
执行以下命令,生成客户端证书密钥。
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 []:[email protected] 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
客户端证书文件。您可以将客户端证书文件下载到本地进行保存,便于后续发送至客户端使用。
步骤二:配置HTTPS双向认证监听
在应用型负载均衡ALB控制台顶部菜单栏选择ALB实例所属地域,在实例页面,找到目标ALB实例,单击实例ID。
在实例详情页,选择监听页签,单击创建监听,完成以下配置,然后单击下一步。
本文场景中,选择监听协议为HTTPS,监听端口为443,HTTPS监听其他参数配置可保持默认值或根据实际情况修改。
在配置SSL证书配置向导,选择已购买的服务器证书;然后单击修改展开高级配置,开启高级配置中的启用双向认证,选择CA证书来源及对应证书;最后选择TLS安全策略,单击下一步。
选择CA证书来源为阿里云签发,在选择默认CA证书下拉框中选择步骤一:配置客户端证书中申请的CA证书。
选择CA证书来源为非阿里云签发,在选择默认CA证书下拉框中选择步骤一:配置客户端证书上传的自签CA证书。
图示以选择阿里云签发CA证书为例,请根据实际情况配置。
在选择服务器组配置向导,选择服务器类型及服务器类型下的后端服务器组RS,查看后端服务器ECS01和ECS02的信息,然后单击下一步。
在配置审核配置向导,确认配置信息,然后单击提交。
步骤三:配置域名解析
实际业务场景中,建议您使用自有域名,通过CNAME解析的方式将自有域名指向ALB实例域名。
在应用型负载均衡ALB控制台的左侧导航栏,选择 ,在实例页面,复制已创建的ALB实例的DNS名称。
执行以下步骤添加CNAME解析记录。
在域名解析页面,找到目标自有域名,在操作列单击解析设置。
说明对于非阿里云注册域名,需先添加域名到云解析控制台,才可以进行域名解析设置。
在解析设置页面,单击添加记录,配置CNAME记录,然后单击确定。
本文场景中,记录类型配置为CNAME,记录值配置为ALB实例的DNS名称,解析记录其他参数配置可保持默认值或根据实际情况修改。
步骤四:测试HTTPS双向认证
本文Windows客户端使用Chrome浏览器为例进行测试。
将已导出的客户端证书安装到客户端。
双击已下载的客户端证书文件,根据系统证书导入向导提示完成客户端证书安装。
在浏览器中,输入
https://<自有域名>
,在弹出的对话框中选择用于验证客户端身份的证书。刷新浏览器,您可以观察到客户端的请求在ECS01和ECS02服务器之间的转换。
相关文档
控制台操作文档
ALB相关信息:
证书相关信息:
API文档
您可以调用以下API,将CaEnabled
参数配置为true
,以开启双向认证。