Linux 上 SSL 证书存放在哪里?
Linux SSL 证书常见存放位置:系统 CA 在 /etc/ssl/certs,私钥在 /etc/ssl/private,Certbot 默认目录为 /etc/letsencrypt/live/,可按配置修改;各发行版差异、查找命令与权限要求、FAQ。
系统信任的 CA 证书在 /etc/ssl/certs/(Debian/Ubuntu)或 /etc/pki/tls/certs/(RHEL/CentOS);应用自用的服务器证书和私钥约定放在 /etc/ssl/ 或 /etc/pki/tls/ 下;使用Certbot默认配置时证书通常在 /etc/letsencrypt/live/<证书名>/,证书名/配置目录可修改,其他ACME客户端路径不同。 实际以各服务配置里写的路径为准。
常见位置速查
| 用途 | 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/ |
| Certbot 默认配置 | /etc/letsencrypt/live/<证书名>/ |
同左 |
| Nginx 自管(部分镜像) | /etc/nginx/ssl/ |
同左 |
Certbot 上述目录里的四个文件:
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
权限要求(重要)
- 私钥必须严格:按读取进程设置最小权限,例如由root读取时root:root 600——权限太松,部分服务(OpenSSH 风格的检查)会直接拒绝使用,Nginx 虽宽松但这是底线卫生。
/etc/ssl/private/属主/模式依发行包而异,需检查实际设置,不能套用统一710。- 证书公钥部分(.crt/.pem)权限 644 即可,本来就是要发给别人看的。
找到证书并完成配置后,还应确认服务实际呈现的是新证书。观测云 SSL 拨测可按域名和端口检查握手及证书剩余天数;续期后核对拨测结果,避免文件已更新但服务仍加载旧证书。
常见问题(FAQ)
Q:.pem、.crt、.key、.cer 后缀有区别吗?
A:基本是约定俗成:.pem/.crt/.cer 都可能是证书(PEM 或 DER 编码),.key 是私钥。用 openssl x509 -in 文件 -text -noout 验证是不是证书、看内容。
Q:证书放哪个目录其实无所谓吗?
A:功能上无所谓——服务读的是配置里写的绝对路径。但遵循发行版约定能让团队协作、备份策略、SELinux 策略都更顺。
Q:私钥泄露过怎么办?
A:立即生成新私钥、重新签发并部署,按CA流程吊销旧证书;单纯续期而复用已泄露密钥不解决问题,不要抱侥幸心理;同时排查泄露途径(备份外泄、权限过松、误提交到 Git 是三大高发渠道)。