多环境SSL证书部署切换解决办法

编辑:老郝茅台回收
来源:老郝聊茅台网
浏览量:170
  
2025-11-25 11:20

企业级HTTPS部署中,通过阿里云、腾讯云SSL证书API可实现证书全生命周期自动化管理。本文提炼API调用准备、两大平台核心流程、代码示例及问题排查,助力快速落地自动化方案。

一、API调用前的通用准备工作

1. 账号权限配置

遵循最小权限原则,配置SSL证书管理权限:

  • 阿里云:RAM控制台→用户→添加权限→关联AliyunSSLFullAccess(或只读权限AliyunSSLReadOnlyAccess);
  • 腾讯云:访问管理控制台→用户→权限设置→添加权限→关联QcloudSSLFullAccess。

2. 获取API访问密钥(AK/SK)

  • 阿里云:控制台→头像→AccessKey 管理→创建并保存AK/SK(SK仅显示一次);
  • 腾讯云:控制台→头像→访问管理→API密钥管理→新建密钥,建议开启密钥轮换。

3. 环境与工具准备

  • 开发环境:支持Python/Java/Go,优先用官方SDK(减少签名错误);
  • 工具:Postman、阿里云API Explorer、腾讯云API调试工具;
  • 依赖库:Python需pip install aliyun-python-sdk-core(阿里云)、tencentcloud-sdk-python(腾讯云)。

二、阿里云SSL证书API调用流程

1. 核心API接口列表

操作场景 API接口名称 功能 调用方式
申请免费证书 CreateCertificate 申请Let’s Encrypt证书 POST
查询证书列表 DescribeCertificates 按条件筛选证书 GET
下载证书 DownloadCertificate 按服务器类型下载证书包 GET
提交证书续期 SubmitCertificateRenewal 手动续期证书 POST
吊销证书 RevokeCertificate 吊销已签发证书 POST

2. 步骤 1:申请免费SSL证书(CreateCertificate)

(1)关键参数

参数 类型 示例值 说明
Action String CreateCertificate 接口名,固定值
Version String 2018-05-10 版本,固定值
RegionId String cn-hangzhou 免费证书固定地域
CertificateType String FreeSSL 证书类型,固定值
DomainName String www.example.com 目标域名
ValidationMethod String DNS 验证方式,推荐自动解析
AutoRenew Boolean true 开启自动续期

(2)Python SDK 示例

from aliyunsdkcore.client import AcsClient
from aliyunsdkssl.request.v20180510 import CreateCertificateRequest
import json

初始化客户端

client = AcsClient("阿里云AK", "阿里云SK", "cn-hangzhou")

构建请求

request = CreateCertificateRequest.CreateCertificateRequest()
request.set_accept_format("json")
request.set_CertificateType("FreeSSL")
request.set_DomainName("www.example.com")
request.set_ValidationMethod("DNS")
request.set_AutoRenew(True)

发送请求

response = client.do_action_with_exception(request)
resp_dict = json.loads(response.decode("utf-8"))
print("证书ID:", resp_dict["CertId"])  # 后续操作需用

(3)响应关键字段

  • CertId:证书唯一 ID;
  • Status:状态(Checking验证中、Issued已签发、Failed失败)。

3. 步骤 2:查询证书状态(DescribeCertificates)

(1)关键参数

  • CertId:证书 ID(可选,指定查询单个);
  • Status:筛选状态(如Issued)。

(2)Python SDK 示例


from aliyunsdkssl.request.v20180510 import DescribeCertificatesRequest

request = DescribeCertificatesRequest.DescribeCertificatesRequest()
request.set_accept_format("json")
request.set_CertId("123456789")  # 传入CertId
response = client.do_action_with_exception(request)
resp_dict = json.loads(response.decode("utf-8"))
cert_info = resp_dict["Certificates"]["Certificate"][0]
print("状态:", cert_info["Status"], "有效期:", cert_info["StartTime"], "-", cert_info["EndTime"])

4. 步骤 3:下载证书(DownloadCertificate)

(1)关键参数

  • CertId:证书 ID;
  • Scene:服务器类型(Nginx/Apache等)。

(2)Python SDK 示例


from aliyunsdkssl.request.v20180510 import DownloadCertificateRequest
import base64

request = DownloadCertificateRequest.DownloadCertificateRequest()
request.set_CertId("123456789")
request.set_Scene("Nginx")
response = client.do_action_with_exception(request)
resp_dict = json.loads(response.decode("utf-8"))

解码保存

fullchain = base64.b64decode(resp_dict["CertificateBody"]).decode("utf-8")
private_key = base64.b64decode(resp_dict["PrivateKey"]).decode("utf-8")
with open("fullchain.pem", "w") as f: f.write(fullchain)
with open("privkey.pem", "w") as f: f.write(private_key)

5. 步骤 4:证书续期

(1)关键参数:CertId、RenewalMethod=FreeSSL、ValidationMethod(同申请)。

三、腾讯云SSL证书API调用流程

1. 核心API接口列表

操作场景 API接口名称 功能 调用方式
申请证书 ApplyCertificate 申请免费 / 付费证书 POST
查询证书列表 DescribeCertificates 按条件查询证书 POST
下载证书 DownloadCertificate 按服务器类型下载 POST
提交证书续期 RenewCertificate 手动续期 POST

2. 步骤 1:申请免费SSL证书(ApplyCertificate)

(1)关键参数

参数 类型 示例值 说明
Action String ApplyCertificate 接口名,固定值
Version String 2019-12-05 版本,固定值
DomainName String www.example.com 目标域名
CertificateType String 2 免费证书固定值
ValidateType String DNS 验证方式
AutoRenewFlag Integer 1 1 = 开启自动续期

(2)Python SDK 示例

from tencentcloud.common import credential
from tencentcloud.common.profile import HttpProfile, ClientProfile
from tencentcloud.ssl.v20191205 import ssl_client, models
import json

初始化凭证与客户端

cred = credential.Credential("腾讯云AK", "腾讯云SK")
httpProfile = HttpProfile()
httpProfile.endpoint = "ssl.tencentcloudapi.com"
clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile
client = ssl_client.SslClient(cred, "", clientProfile)

构建请求

req = models.ApplyCertificateRequest()
params = {"DomainName":"www.example.com","CertificateType":2,"ValidateType":"DNS","AutoRenewFlag":1}
req.from_json_string(json.dumps(params))

发送请求

resp = client.ApplyCertificate(req)
resp_dict = json.loads(resp.to_json_string())
print("证书ID:", resp_dict["CertificateId"])

3. 步骤 2:查询证书状态(DescribeCertificates)

(1)关键参数

  • CertificateId:证书 ID;
  • Status:筛选状态(2 = 已签发、1 = 验证中)。

(2)Python SDK 示例

req = models.DescribeCertificatesRequest()
params = {"CertificateId":"abcdef123456"}
req.from_json_string(json.dumps(params))
resp = client.DescribeCertificates(req)
resp_dict = json.loads(resp.to_json_string())
cert_info = resp_dict["Certificates"][0]
print("状态:", cert_info["Status"], "有效期:", cert_info["StartTime"], "-", cert_info["EndTime"])

4. 步骤 3:下载证书(DownloadCertificate)

(1)关键参数

  • CertificateId:证书 ID;
  • ResourceType:服务器类型(如nginx)。

(2)Python SDK 示例

req = models.DownloadCertificateRequest()
params = {"CertificateId":"abcdef123456","ResourceType":"nginx"}
req.from_json_string(json.dumps(params))
resp = client.DownloadCertificate(req)
resp_dict = json.loads(resp.to_json_string())

保存证书(腾讯云返回证书内容,直接写入文件)

with open("cert.pem", "w") as f:
f.write(resp_dict["Content"]["Certificate"])
with open("key.pem", "w") as f:
f.write(resp_dict["Content"]["PrivateKey"])

四、常见问题与排查

问题现象 原因 解决方案
签名错误 AK/SK 错误或签名算法错 核对AK/SK,使用官方SDK
权限不足 未配置SSL管理权限 关联对应平台的SSL权限策略
证书申请失败(验证超时) DNS解析未生效 检查解析记录,等待生效后重试
下载证书为空 证书未签发(Status 非 Issued) 确认证书状态为已签发后再下载

调用两大平台SSL证书API,需先完成权限、密钥、环境准备,再按 “申请 - 查询 - 下载 - 续期” 流程操作。优先使用官方SDK避免签名问题,定期监控证书状态,确保自动化管理合规高效。

北京SSL证书申请

SSL证书的组织部,锁定安全,加密信任,让网站安全不再是难题!
企业使用OA SSL证书,让你的网站马上变安全, 申请SSL证书?找我!简单、快捷、专业!

即刻扫码 咨询技术
证书技术支持
139-1050-5354
欢迎打扰
热      情
SSL证书 | 免费SSL证书申请、安装、管理与安全指南
企业OV SSL证书申请
139-1050-5354
真诚合作 欢迎咨询