服务器证书用于客户端认证服务端,服务器证书需要由您自行购买或自行签发并托管至阿里云数字证书管理服务。本文为您介绍如何生成并使用服务器证书。

服务器证书使用流程

服务端证书使用流程

使用限制

仅铂金版实例支持服务器证书管理功能。

前提条件

使用CA证书签发服务器证书

您可以向权威证书颁发机构购买服务器证书,也可以使用CA证书签发服务器证书,CA证书获取方式,请参见自签CA证书

  1. 准备配置文件。
    1. 创建一个名称为server.csr.cfg的文件,内容如下:
      说明 [dn]内容需要根据您的实际需求修改。
      [req]
      default_bits = 2048
      prompt = no
      default_md = sha256
      distinguished_name = dn
      
      [dn]
      C=CN
      ST=ZJ
      L=HZ
      O=ALI
      OU=MQTT
      emailAddress=xxx@xxx
      CN=mqtt-test.xxx.aliyuncs.com
    2. 创建一个名称为server.crt.cfg的文件,内容如下:
      说明
      • [alt_names]可以填写您自定义的域名,若您使用自定义域名,您需要自行将自定义域名CNAME到微消息队列MQTT版服务提供的域名。
      • 若您不需要使用自定义域名,[alt_names]直接填写为微消息队列MQTT版提供的域名。
      • 若您需要在多个Region的不同实例使用同一个服务器证书,域名填写可以使用通配符,例如:DNS.1=*.mqtt.aliyuncs.com。
      authorityKeyIdentifier=keyid,issuer
      basicConstraints=CA:FALSE
      keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyCertSign
      subjectAltName = @alt_names
      
      [alt_names]
      DNS.1=*.mqtt.aliyuncs.com
      DNS.2=mqtt-test.cn-qingdao.aliyuncs.com
  2. 根据配置生成服务器证书的私钥和CSR文件。
    openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <(cat server.csr.cfg)
  3. 生成服务器证书。
    openssl x509 -req -in server.csr -CA CA.crt -CAkey CA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile server.crt.cfg
  4. 将私钥格式转换为PKCS#8格式。
    openssl pkcs8 -topk8 -nocrypt -in server.key -out server_pkcs8.key

    转换后的私钥示例如下:

    -----BEGIN PRIVATE KEY-----
    MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALaDOET1McZD0hV/
    ma1YlSZjim00rVwrdXefqOHXWEqm8/HxZ3iWmKN/jGWW1aAoYFRAg0CNar1eDap4
    c3wKB1s/uqjaV1StCgTjDdH90fIoH84CKIdhfirQRGiW3ZUY7rzKa63N9u2Y69YD
    *****
    *****
    *****
    C8fG7VM+3q8D9NUCunNHUvmvanIPlBDHE/88PhHw/2OQLUjdy5pDAkBAiYsxCvNN
    PLX2WlXAXggKZvpozkig/J6klAN8pVvwM4BPgJDLk+hllM8MowOxlNjoHsI34lAQ
    g17SUS1ERIK+
    -----END PRIVATE KEY-----
  5. 生成服务器证书链。

    将服务器证书托管至证书管理服务时,需要上传服务器证书链的内容。

    touch server_chain.crt
    cat server.crt >> server_chain.crt
    cat CA.crt >> server_chain.crt
    
    查看证书链内容。
    cat server_chain.crt

托管服务器证书

您需要将签发的服务器证书托管至阿里云证书管理服务控制台,托管后才能在微消息队列MQTT版控制台查看并启用服务器证书。

说明
  • 服务器证书支持RSA,ECC算法。
  • 若您需要自定义域名,可在证书中添加域名,并通过CNAME(Canonical Name)指向微消息队列MQTT版实例的接入点域名。
  1. 登录微消息队列MQTT版控制台,并在左侧导航栏单击实例列表
  2. 在顶部菜单栏选择目标地域,然后在实例列表中单击实例名称进入实例详情页面。
  3. 在左侧导航栏选择证书管理 > 服务器证书,然后在页面左上角单击创建证书
    系统将自动跳转到阿里云证书管理服务控制台SSL 证书页面。
  4. SSL 证书页面,单击上传证书。在弹出的上传证书面板中填写相关参数然后单击确定。具体操作,请参见上传SSL证书
    • 证书标准:选择国际标准。
    • 证书文件:填写服务器证书链的内容,将PEM或者CRT格式的证书文件打开,并复制其内容粘贴至文本框。
    • 证书密钥:填写服务器证书私钥转换为PKCS#8格式后的内容,将KEY格式的证书私钥文件打开,并复制其内容粘贴至文本框。

使用服务器证书启动服务

  • 启动服务会重启微消息队列MQTT版实例,重启时间预计5~10分钟,重启后客户端即可使用服务器证书做服务端认证。
  • 启动服务后,8883端口将开启双向认证,同时关闭单向认证。
  • 服务器证书认证开启后,客户端接入时可以不需要填写AK(AccessKey)、SK(AccessKey Screct),服务端将按照设备证书进行认证。

    如果您同时使用证书认证并填写了AK、SK,则服务端会在证书认证后,验证AK、SK的正确性,以及资源所属的GID,填写ClientID时需要添加GID_XXX@@@前缀。更多信息,请参见名词解释

  • 若客户端仅使用证书认证而不使用AK、SK认证,您需要提前创建一个名称为GID_Default的Group。

    该场景下ClientID填写时无需添加GID_XXX@@@的前缀,系统会自动添加GID_Default@@@的前缀。

    创建Group ID,请参见Group操作
警告 使用服务器证书启动服务,启动过程中客户端会断开连接,请您谨慎操作。
  1. 登录微消息队列MQTT版控制台,进入服务器证书页面。
  2. 在证书列表中选择指定服务器证书,并在其操作列单击启动服务
  3. 在弹出的提示对话框中仔细阅读提示信息并单击确认