服务器证书管理
本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
服务器证书用于客户端认证服务端,服务器证书需要由您自行购买或自行签发并托管至阿里云数字证书管理服务。本文为您介绍如何生成并使用服务器证书。
服务器证书使用流程
使用限制
仅铂金版实例和专业版实例支持服务器证书管理功能。
前提条件
- 已获取CA证书。 
- 已安装OpenSSL v1.1.1i或以上版本。 
步骤一:使用CA证书签发服务器证书
您可以向权威证书颁发机构购买服务器证书,也可以使用CA证书签发服务器证书,CA证书获取方式,请参见自签CA证书。
RSA算法证书
- 在安装好的OpenSSL路径下创建配置文件。 - 创建一个名称为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
- 创建一个名称为server.crt.cfg的文件,内容如下: 说明- [alt_names]可以填写您自定义的域名。如果您使用自定义域名,则需要自行将自定义域名CNAME到云消息队列 MQTT 版服务提供的域名。
- 若您不需要使用自定义域名, - [alt_names]直接填写为云消息队列 MQTT 版提供的域名。例如:- DNS.2=mqtt-test.cn-qingdao.aliyuncs.com。
- 若您需要在多个Region的不同实例使用同一个服务器证书,域名填写可以使用通配符,例如:DNS.1=*.mqtt.aliyuncs.com。 
 - authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyCertSign extendedKeyUsage = serverAuth, clientAuth subjectAltName = @alt_names [alt_names] DNS.1=*.mqtt.aliyuncs.com DNS.2=mqtt-test.cn-qingdao.aliyuncs.com
 
- 执行如下命令生成服务器证书的私钥和CSR文件。 - Mac: - openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <(cat server.csr.cfg)
- Windows: - openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config server.csr.cfg
 
- 执行如下命令将服务器证书私钥的格式转换为PKCS#8格式。 - openssl pkcs8 -topk8 -nocrypt -in server.key -out server_pkcs8.key- 转换后的证书私钥为 - server_pkcs8.key,您可以执行- cat server_pkcs8.key命令查看,示例如下:重要- 在进行步骤二:托管服务器证书后续操作时,需要上传此步骤生成的服务器证书私钥。 - -----BEGIN PRIVATE KEY----- MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALaDOET1McZD0hV/ ma1YlSZjim00rVwrdXefqOHXWEqm8/HxZ3iWmKN/jGWW1aAoYFRAg0CNar1eDap4 ***** ***** ***** PLX2WlXAXggKZvpozkig/J6klAN8pVvwM4BPgJDLk+hllM8MowOxlNjoHsI34lAQ g17SUS1ERIK+ -----END PRIVATE KEY-----
- 执行如下命令生成服务器证书 。 - openssl x509 -req -in server.csr -CA CA.crt -CAkey CA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile server.crt.cfg- 生成的服务器证书为 - server.crt。
- 执行如下命令生成服务器证书链。 - 创建一个名称为 - server_chain.crt的空的证书链文件。- touch server_chain.crt
- 将服务器证书内容复制到证书链文件中。 - cat server.crt >> server_chain.crt
- 将CA证书内容复制到证书链文件并追加到服务器证书内容后面。 - cat CA.crt >> server_chain.crt
 - 您可以执行 - cat server_chain.crt命令查看服务器证书链内容,证书链的内容格式如下:重要- 在进行步骤二:托管服务器证书后续操作时,需要上传此步骤生成的服务器证书链。 - -----BEGIN CERTIFICATE----- xxx 服务器证书内容 xxx -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- xxx CA证书内容 xxx -----END CERTIFICATE-----
ECC算法证书
- 在安装好的OpenSSL路径下创建配置文件。 - 创建一个名为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
- 创建一个名称为server.crt.cfg的文件,内容如下: 说明- [alt_names]可以填写您自定义的域名。如果您使用自定义域名,则需要自行将自定义域名CNAME到云消息队列 MQTT 版服务提供的域名。
- 若您不需要使用自定义域名, - [alt_names]直接填写为云消息队列 MQTT 版提供的域名。例如:- DNS.2=mqtt-test.cn-qingdao.aliyuncs.com。
- 若您需要在多个Region的不同实例使用同一个服务器证书,域名填写可以使用通配符,例如:DNS.1=*.mqtt.aliyuncs.com。 
 - authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyCertSign extendedKeyUsage = serverAuth, clientAuth subjectAltName = @alt_names [alt_names] DNS.1=*.mqtt.aliyuncs.com DNS.2=mqtt-test.cn-qingdao.aliyuncs.com
 
- 生成服务器证书的私钥server.key - openssl ecparam -out server.key -name prime256v1 -genkey
- 生成服务器证书的server.csr - Mac: - openssl req -new -sha256 -nodes -out server.csr -key server.key -config <(cat server.csr.cfg)
- Windows: - openssl req -new -sha256 -nodes -out server.csr -key server.key -config server.csr.cfg
 
- 由ca证书签发服务器证书 - openssl x509 -req -in server.csr -CA CA.crt -CAkey CA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile server.crt.cfg
- 执行如下命令将服务器证书私钥的格式转换为PKCS#8格式,转换后的证书私钥为 - server_pkcs8.key。- openssl pkcs8 -topk8 -nocrypt -in server.key -out server_pkcs8.key重要- 在进行步骤二:托管服务器证书后续操作时,需要上传此步骤生成的服务器证书私钥。 
- 执行如下命令生成服务器证书链。 - 创建一个名称为 - server_chain.crt的空的证书链文件。- touch server_chain.crt
- 将服务器证书内容复制到证书链文件中。 - cat server.crt >> server_chain.crt
- 将CA证书内容复制到证书链文件并追加到服务器证书内容后面。 - cat CA.crt >> server_chain.crt
 重要- 在进行步骤二:托管服务器证书后续操作时,需要上传此步骤生成的服务器证书链。 
步骤二:托管服务器证书
您需要将签发的服务器证书托管至阿里云证书管理服务控制台,托管后才能在云消息队列 MQTT 版控制台查看并启用服务器证书。
- 服务器证书支持RSA,ECC算法。 
- 若您需要自定义域名,可在证书中添加域名,并通过CNAME(Canonical Name)指向云消息队列 MQTT 版实例的接入点域名。 
- 登录云消息队列 MQTT 版控制台,并在左侧导航栏单击实例列表。 
- 在顶部菜单栏选择目标地域,然后在实例列表中单击实例名称进入实例详情页面。 
- 在左侧导航栏选择,然后在页面左上角单击创建证书。 - 系统将自动跳转到阿里云证书管理服务控制台的SSL证书管理页面。 
- 在SSL证书管理页面,单击上传证书。在弹出的上传证书面板中填写相关参数然后单击确定。  - 证书标准:选择国际标准。 
- 证书文件:上传步骤一:使用CA证书签发服务器证书中生成的服务器证书链文件 - server_chain.crt,或将证书链内容复制到文本框中。
- 证书私钥:上传步骤一:使用CA证书签发服务器证书中生成的转换格式后的证书私钥文件 - server_pkcs8.key,或将证书私钥内容复制到文本框中。
- 证书链:请勿在该参数下上传证书链文件或填写证书链文件内容,否则会导致证书认证失败。 
 
步骤三:使用服务器证书启动服务
使用服务器证书启动服务,启动过程中客户端会断开连接,请您谨慎操作。
如果证书错误会导致服务短暂不可用。
- 登录云消息队列 MQTT 版控制台,并在左侧导航栏单击实例列表。 
- 在顶部菜单栏选择目标地域,然后在实例列表中单击实例名称进入实例详情页面。 
- 在左侧导航栏选择。 
- 单击双向认证,在弹出的对话框中选择指定的服务器证书,并在其操作列单击启动服务 - 启动服务会重启云消息队列 MQTT 版实例,重启时间预计5~10分钟,重启后客户端即可使用服务器证书做服务端认证。 
- 启动服务后,8883端口将开启双向认证,同时关闭单向认证。 
 
- 在弹出的提示对话框中仔细阅读提示信息并单击确认。 
如果您想要回退到单向认证,可以单击单向认证,在弹出的提示对话框单击确认,等待服务器重启完成即可。