使用DDoS高防部署HTTPS双向认证

对于一些安全性要求较高的场景,例如金融交易、医疗、银行、在线支付等,传统的单向认证(仅验证服务端身份)无法满足安全需求,服务器默认信任所有连接到它的客户端,可能导致中间人攻击、未授权访问等安全风险。您可以使用DDoS高防的HTTPS双向认证功能,为业务提供更高的安全性。双向认证要求客户端和服务端在建立连接之前,双方都需要验证对方的身份,双方都通过认证后,才能建立安全通信通道进行数据传输。本文介绍如何配置双向认证。

功能介绍

为什么要用双向认证

大部分互联网Web应用,用户客户端来源广泛且无需限制,实现HTTPS加密通信时仅需要使用单向认证(即客户端在访问应用前验证服务端身份),从而保证用户连接到的是正确的服务器。

对于安全性更高的场景或应用,在需要验证服务端身份的同时,还需要验证客户端身份,此时可以使用双向认证功能,从而保证仅获得授权的客户端访问接入,降低中间人攻击、未授权访问等安全风险。

单向认证与双向认证对比

对比项

单向认证

双向认证

涉及的证书文件

服务端证书:

  • 服务端公钥证书

  • 服务端私钥文件

  • 服务端证书:

    • 服务端公钥证书

    • 服务端私钥文件

  • 客户端证书:

    • 客户端公钥证书

    • 客户端私钥文件

  • CA证书

握手过程

image

image

应用场景

对于安全性要求较高的业务场景,例如金融交易、医疗、银行、物联网、在线支付等,在验证服务端身份的同时,系统也需要验证客户端的身份。

若无客户端身份认证需求,则无需使用双向认证。

场景示例

某政府电子政务服务平台,在接入DDoS高防防御DDoS攻击时,为了避免攻击者伪造政务平台域名或通过钓鱼网站诱导用户访问导致信息泄露,恶意用户通过自动化工具爬取政务公开接口等,建议在接入DDoS高防时配置HTTPS双向认证。

  • 服务端认证:客户端验证DDoS高防上配置的服务端证书,确保连接至合法服务端。

  • 客户端认证:DDoS高防上配置CA证书,通过CA证书验证客户端证书,仅允许授权客户端接入。

image

步骤一:创建CA证书并生成客户端证书

方式一:使用阿里云签发的CA证书生成客户端证书

您可以参考申请签发私有证书来申请客户端证书。

  1. 购买及启用私有CA

    说明

    私有CA中一个根CA下可以包含多个子CA,只有子CA可用于签发私有证书(包括服务端证书、客户端证书)。

  2. 使用私有子CA申请客户端证书。

    1. 登录数字证书管理服务控制台,在左侧导航栏,选择证书管理 > PCA证书管理

    2. 私有CA页签,定位到目标子CA,在操作列,单击申请证书

      image

    3. 申请证书面板完成证书信息配置,单击确认申请

      在本文场景中,证书类型选择客户端证书姓名请填写该客户端用户的唯一标识,其他参数配置可保持默认或根据实际需要进行修改。image

      提交证书申请后,私有CA证书会立即签发。签发后,您可以单击子CA操作列下的证书列表,查看已签发的证书信息。

  3. 导出客户端证书。

    1. 私有CA页签,定位到目标子CA,在操作列,单击证书列表

    2. 证书列表页面,定位到目标私有证书,在操作列,单击下载

    3. 证书下载对话框,选择需要下载的证书格式,单击确认并下载(勾选包含信任链,下载后的证书中将包含完整证书链)。

      本文场景中,证书格式选择浏览器可以识别的PFX格式。导出客户端证书

      如下图所示,下载的证书文件中,包括.pfx后缀的客户端证书文件以及.txt后缀的客户端私钥加密密码。

      安装客户端证书

方式二:使用非阿里云签发的CA证书生成客户端证书

支持自签名根CA或自签名子CA证书进行双向认证,本文以自签名根CA证书为例为您介绍。

  1. 使用OPENSSL生成自签名根CA证书。

    1. 执行以下命令,创建根CA证书私钥。

      openssl genrsa -out root.key 4096
    2. 执行以下命令,创建根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 []:
    3. 执行以下命令,创建根CA证书。

      openssl x509 -req -in root.csr -out root.crt -signkey root.key -CAcreateserial -days 3650

      运行结果如下图所示:

      创建根CA证书

    4. 执行ls命令,可查看到生成的根CA证书root.crt和根CA证书私钥root.key

      您可以将这些根CA证书文件下载到本地进行保存,便于后续上传至阿里云证书中心。

  2. 使用根CA证书生成客户端证书。

    1. 执行以下命令,生成客户端证书密钥。

      openssl genrsa -out client.key 4096
    2. 执行以下命令,生成客户端证书请求文件。

      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 []:
    3. 执行以下命令,生成客户端证书。

      openssl x509 -req -in client.csr -out client.crt -CA root.crt -CAkey root.key -CAcreateserial -days 3650

      运行结果如下图所示:

      生成客户端证书

    4. 执行以下命令,将生成的客户端证书client.crt转换为浏览器可以识别的PKCS12文件。按照提示输入设置的客户端私钥加密密码。

      openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
    5. 执行ls命令,可查看到生成的client.p12客户端证书文件。

      您可以将客户端证书文件下载到本地进行保存,便于后续发送至客户端使用。

  3. 上传自签名根CA证书至阿里云数字证书管理服务。

    1. 登录数字证书管理服务控制台

    2. 在左侧导航栏,选择证书及域名应用服务 > 证书应用仓库

    3. 证书应用仓库页面,单击创建仓库,在创建仓库面板,配置数据来源上传CA证书,然后单击确定

      创建证书仓库

    4. 证书应用仓库页面,单击已创建的证书仓库。

    5. 证书管理页面,单击上传证书,在CA信息面板,上传根CA证书文件root.crt,单击确认并启用

步骤二:将域名接入DDoS高防并开启双向认证

  1. 登录DDoS高防控制台的域名接入页面。

  2. 在顶部菜单栏左上角处,根据DDoS高防产品选择地域。

    • DDoS高防(中国内地):选择中国内地地域。

    • DDoS高防(非中国内地):选择非中国内地地域。

  3. 域名接入页面,单击添加网站,根据指引完成域名接入。

    本文仅描述双向认证如何开启,其他配置项,请参见添加网站配置

    HTTPS协议相关的配置区域,勾选启用双向认证,根据证书来源选择CA证书。image

  4. 配置完成后,请复制DDoS高防的CNAME地址。image

步骤三:配置域名解析

实际业务场景中,建议您使用自有域名,通过CNAME解析的方式将自有域名指向DDoS高防的CNAME地址。

以域名DNS托管在阿里云云解析DNS为例介绍,当您使用其他DNS服务商的域名解析服务时仅供参考。

  1. 登录阿里云云解析DNS控制台

  2. 权威域名解析页面,定位到目标域名,单击操作列下的解析设置

  3. 解析设置页面,定位到要修改的解析记录,单击操作列下的修改

    说明

    如果要操作的解析记录不在记录列表中,您可以单击添加记录

    本文场景中,记录类型配置为CNAME记录值配置为DDoS高防的CNAME地址,其他配置项可保持默认值或根据实际情况修改。image

  4. 单击确认,等待修改后的解析设置生效。

步骤四:测试HTTPS双向认证

本文Windows客户端使用Chrome浏览器为例进行测试。

  1. 将步骤一中创建的客户端证书安装到客户端。

    双击已下载的客户端证书文件,根据系统证书导入向导提示完成客户端证书安装。

  2. 在浏览器中,输入https://<自有域名>,在弹出的对话框中选择用于验证客户端身份的证书。

  3. 刷新浏览器,观察客户端是否能正常访问域名。