Linux 上 SSL 证书存放在哪里?
Linux SSL 证书常见存放位置:系统 CA 在 /etc/ssl/certs,私钥在 /etc/ssl/private,Let's Encrypt 在 /etc/letsencrypt/live/;各发行版差异、查找命令与权限要求、FAQ。
系统信任的 CA 证书在 /etc/ssl/certs/(Debian/Ubuntu)或 /etc/pki/tls/certs/(RHEL/CentOS);应用自用的服务器证书和私钥约定放在 /etc/ssl/ 或 /etc/pki/tls/ 下;Let's Encrypt 证书固定在 /etc/letsencrypt/live/域名/。 实际以各服务配置里写的路径为准。
常见位置速查
| 用途 | Debian/Ubuntu | RHEL/CentOS/Fedora |
|---|---|---|
| 系统 CA 根证书 | /etc/ssl/certs/ |
/etc/pki/tls/certs/ |
| 私钥 | /etc/ssl/private/ |
/etc/pki/tls/private/ |
| 应用证书(惯例) | /etc/ssl/certs/ |
/etc/pki/tls/certs/ |
| Let's Encrypt | /etc/letsencrypt/live/<域名>/ |
同左 |
| Nginx 自管(部分镜像) | /etc/nginx/ssl/ |
同左 |
Let's Encrypt 目录里的四个文件:
fullchain.pem:证书 + 中间链(Nginx 的ssl_certificate用它)privkey.pem:私钥(ssl_certificate_key用它)cert.pem/chain.pem:单证书 / 仅中间链
快速定位法
不知道证书在哪时,与其翻目录不如问服务本身:
# 看 Nginx/Apache 配置里写的路径
nginx -T | grep ssl_certificate
grep -r "SSLCertificateFile" /etc/apache2/
# 全盘按文件名找
sudo find / -name "*.pem" -o -name "*.crt" 2>/dev/null | head -30
权限要求(重要)
- 私钥必须严格:
chmod 600、root:root——权限太松,部分服务(OpenSSH 风格的检查)会直接拒绝使用,Nginx 虽宽松但这是底线卫生。 /etc/ssl/private/目录本身默认710 root:ssl-cert。- 证书公钥部分(.crt/.pem)权限 644 即可,本来就是要发给别人看的。
观测云对照
证书散落各处带来的最大风险是"某张证书默默过期"。与其人肉巡检各目录,不如让监控盯效果:观测云的站点可用性监测直接探测 HTTPS 端点,证书剩余天数、握手失败都会成为可告警的信号;certbot 续期日志(/var/log/letsencrypt/)采集后,续期失败第一时间通知到人。
常见问题(FAQ)
Q:.pem、.crt、.key、.cer 后缀有区别吗?
A:基本是约定俗成:.pem/.crt/.cer 都可能是证书(PEM 或 DER 编码),.key 是私钥。用 openssl x509 -in 文件 -text -noout 验证是不是证书、看内容。
Q:证书放哪个目录其实无所谓吗?
A:功能上无所谓——服务读的是配置里写的绝对路径。但遵循发行版约定能让团队协作、备份策略、SELinux 策略都更顺。
Q:私钥泄露过怎么办?
A:立即吊销并重签证书(Let's Encrypt 直接重签即可),不要抱侥幸心理;同时排查泄露途径(备份外泄、权限过松、误提交到 Git 是三大高发渠道)。