SSL 证书
为共享主机上传全局 SSL 证书,启用 HTTPS 并处理格式转换与续期。
本文介绍如何为共享主机部署 SSL 证书,使网站可以通过 HTTPS 访问。
工作方式
共享主机使用 全局 SSL 证书:每个主机部署一张证书,上传后应用到该主机绑定的所有域名。因此,证书必须覆盖您希望启用 HTTPS 的全部域名,可以是:
- 在主题备用名称(SAN)中列出所有域名的多域名证书,例如同时包含
example.com和www.example.com; - 或通配符证书,例如
*.example.com(注意通配符证书不包含根域名example.com本身,需要在 SAN 中另行包含)。
撰写本文时,所有共享主机套餐均支持部署 SSL 证书。
准备证书文件
您需要两段 PEM 格式的内容:
| 内容 | 格式要求 |
|---|---|
| SSL证书 (Certificate) | 以 -----BEGIN CERTIFICATE----- 开头、-----END CERTIFICATE----- 结尾 |
| 私钥 (Private Key) | 以 -----BEGIN PRIVATE KEY----- 或 -----BEGIN RSA PRIVATE KEY----- 开头,且不能设置密码 |
证书颁发机构通常会同时提供站点证书和中间证书。请把站点证书放在最前,后面依次粘贴中间证书,组成完整证书链,避免部分浏览器或客户端提示证书不受信任。
常见格式转换
如果您的私钥是 -----BEGIN EC PRIVATE KEY-----(ECC 证书常见)或带有密码,表单会拒绝。可以先用 OpenSSL 转换为不加密的 PKCS#8 格式:
openssl pkcs8 -topk8 -nocrypt -in original.key -out private.key如果证书是 .pfx / .p12 格式,可以这样拆分:
openssl pkcs12 -in cert.pfx -clcerts -nokeys -out cert.pem
openssl pkcs12 -in cert.pfx -cacerts -nokeys -out chain.pem
openssl pkcs12 -in cert.pfx -nocerts -nodes -out original.key
openssl pkcs8 -topk8 -nocrypt -in original.key -out private.key
cat cert.pem chain.pem > fullchain.pem上传前自检
服务器会校验证书与私钥是否匹配。您可以先在本地确认:
# 查看证书包含的域名和有效期
openssl x509 -in fullchain.pem -noout -subject -enddate -ext subjectAltName
# 两条命令输出一致,说明证书与私钥匹配
openssl x509 -in fullchain.pem -noout -pubkey | openssl sha256
openssl pkey -in private.key -pubout | openssl sha256部署证书
- 在 主机 → 共享主机 列表中,点击主机的 管理。
- 切换到 SSL证书 标签,点击 上传SSL证书。
- 在 SSL证书 (Certificate) 中粘贴完整证书链,在 私钥 (Private Key) 中粘贴私钥。
- 点击 上传。看到“SSL证书上传成功”即表示部署完成。
如果提示错误,常见原因如下:
| 提示 | 原因与处理 |
|---|---|
| 请输入有效的PEM格式证书 / 私钥 | 粘贴内容缺少 BEGIN/END 标记,或私钥类型不受支持,参考上文转换 |
| SSL证书内容无效 / SSL私钥内容无效 | 内容被截断或混入了多余字符,请重新复制完整内容 |
| SSL证书与私钥不匹配 | 私钥不是这张证书对应的私钥 |
| 当前套餐不支持部署SSL | 所在套餐不包含 SSL 功能 |
验证 HTTPS
部署完成后,在浏览器访问 https://您的域名,确认地址栏显示安全连接。也可以用命令行检查服务器返回的证书:
openssl s_client -connect www.example.com:443 -servername www.example.com </dev/null 2>/dev/null \
| openssl x509 -noout -subject -enddate撰写本文时,部署成功后 SSL证书 标签可能仍显示“未部署SSL证书”。请以上传时的成功提示和实际 HTTPS 访问结果为准。
跳转到 HTTPS
证书部署后,网站会同时接受 HTTP 和 HTTPS 访问。如果希望访客始终使用 HTTPS,建议在网站程序中实现跳转。例如,在 PHP 网站的入口文件开头加入:
<?php
$isHttps = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
|| (isset($_SERVER['SERVER_PORT']) && (int)$_SERVER['SERVER_PORT'] === 443);
if (!$isHttps) {
header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], true, 301);
exit;
}添加跳转前请先确认 HTTPS 访问正常。WordPress 等程序还需要在后台把站点地址改为 https:// 开头。
续期
共享主机上的证书不会自动续期。证书到期前,请从证书颁发机构获取新证书,然后在 SSL证书 标签中再次上传,新证书会替换旧证书。建议在到期前至少两周完成更换。
通过 API 部署
与控制台相同的接口如下,{name} 为主机名(即数据库用户名),需要携带登录令牌:
jq -n --rawfile cert fullchain.pem --rawfile key private.key \
'{certificate: $cert, certificate_key: $key}' \
| curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
https://api.yeap.cloud/api/user/host_shared/vhosts/name/{name}/ssl-full -d @-使用 jq 构造请求体可以正确处理 PEM 中的换行。