下载与部署
证书签发后可下载 fullchain.pem 与 privkey.pem 两个文件。本文说明两个文件的用途,以及 Nginx、Apache、Caddy、Tomcat 等常见服务器软件的配置方法。
证书签发后,可在申请详情页下载两个文件。
两个文件的用途
| 文件 | 内容 | 配置项 |
|---|---|---|
<域名>.fullchain.pem | 证书本身与中间证书,按顺序合并 | 证书 / certificate |
<域名>.privkey.pem | 私钥 | 私钥 / certificate key |
证书一项必须使用 fullchain.pem。若只配置了不含中间证书的文件,桌面浏览器多数情况下仍可正常访问,而手机 App、curl、Java 客户端会报证书错误——这是最难定位的一类故障。详见证书链缺少中间证书。
私钥仅在签发时生成一次,请妥善保管。私钥文件的权限应设置为仅所属用户可读:
chmod 600 privkey.pemNginx
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/example.com/fullchain.pem;
ssl_certificate_key /etc/ssl/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
}修改后需检查语法并重载:
nginx -t && nginx -s reloadApache
<VirtualHost *:443>
ServerName example.com
SSLEngine on
SSLCertificateFile /etc/ssl/example.com/fullchain.pem
SSLCertificateKeyFile /etc/ssl/example.com/privkey.pem
</VirtualHost>Apache 2.4.8 以下的版本不支持合并文件,需要使用 SSLCertificateChainFile 单独指定中间证书。
修改后需检查语法并重载:
apachectl configtest && apachectl gracefulCaddy
example.com {
tls /etc/ssl/example.com/fullchain.pem /etc/ssl/example.com/privkey.pem
}Caddy 默认会自行申请并续期证书。仅在需要使用本站签发的证书时才需要如上手工指定。
HAProxy
HAProxy 要求证书与私钥位于同一个文件中,且顺序不可颠倒:
cat fullchain.pem privkey.pem > /etc/ssl/example.com/combined.pem
chmod 600 /etc/ssl/example.com/combined.pem# haproxy.cfg
# bind :443 ssl crt /etc/ssl/example.com/combined.pemTomcat 与其他 Java 服务
Java 使用 keystore 格式,需要先转换。通过 PKCS#12 中转最为稳妥:
openssl pkcs12 -export \
-in fullchain.pem -inkey privkey.pem \
-out keystore.p12 -name tomcat转换时必须使用 fullchain.pem。Java 客户端不会主动补全缺失的中间证书,链不完整会直接导致 PKIX path building failed。
IIS 与 Windows
Windows 需要 PFX 格式:
openssl pkcs12 -export \
-in fullchain.pem -inkey privkey.pem \
-out example.com.pfx导入时请将中间证书放入「中间证书颁发机构」存储,而非「受信任的根证书颁发机构」。
CDN 与负载均衡
在 CDN 或负载均衡控制台上传证书时,「证书内容」输入框中同样需要粘贴 fullchain.pem 的全部内容,即包含证书与中间证书两段,而不是只有第一段。
仅更新源站而遗漏边缘节点,是证书故障最常见的复发方式。若同一域名同时配置在源站与 CDN 上,两处都需要更新。
部署后的验证
部署完成后建议实际验证一次,确认服务器发送的证书链完整:
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null 2>/dev/null | grep -c "BEGIN CERTIFICATE"返回 2 或更大表示链完整;返回 1 表示只发送了证书本身,需要改用 fullchain.pem。
也可以使用本站的证书检测,输入域名即可得到完整结论。