文档中心
NginxSSL璇佷功鏍煎紡璇﹁ВPEM銆丆RT銆並EY绛夊父瑙佹牸寮忓尯鍒笌杞崲鎸囧崡
时间 : 2025-09-27 16:26:14浏览量 : 3

作为网站安全的第一道防线,SSL证书的正确配置至关重要。本文将深入浅出地讲解Nginx中常见的SSL证书格式(PEM、CRT、KEY等),通过实际案例展示它们之间的区别和转换方法,帮助您轻松搞定HTTPS配置。
一、SSL证书的"身份证"原理
想象一下SSL证书就像网站的身份证,它包含三个核心部分:
1. 证书本身:相当于身份证正面,包含网站信息(如域名)和公钥
2. 私钥:相当于身份证的防伪密码,只有网站服务器知道
3. 中间证书:相当于发证机关的证明链,帮助浏览器验证真伪
在Nginx配置中,我们常见到这样的指令:
```nginx
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;
```
二、常见证书格式详解
1. PEM格式 - 最通用的"文本身份证"
特点:
- 以`--BEGIN CERTIFICATE--`开头
- Base64编码的文本文件
- 扩展名常见为.pem、.crt或.key
实际案例:
--BEGIN CERTIFICATE--
MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
...
--END CERTIFICATE--
2. DER格式 - 计算机喜欢的"二进制身份证"
- 二进制格式文件
- Windows系统常用
- 扩展名通常为.der或.cer
3. PKCS7/P7B格式 - Windows家族的"集体户口本"
- 可以包含整个证书链
- Windows IIS服务器常用
- 扩展名为.p7b或.p7c
4. PKCS12/PFX格式 - "带密码的钱包"
- 同时包含证书和私钥
- 用密码保护(像加密钱包)
- 扩展名为.p12或.pfx
三、Nginx偏爱的证书组合
Nginx最常用的组合是:
1. 证书文件:PEM格式的.crt文件(可能包含完整链)
2. 私钥文件:PEM格式的.key文件(必须保密!)
典型目录结构示例:
/etc/nginx/ssl/
├── example.com.crt
PEM格式的站点证书+中间证书
├── example.com.key
PEM格式的私钥文件
└── dhparam.pem
DH参数文件(增强安全性)
四、实战转换指南
Case1: PFX转PEM(适合从IIS迁移到Nginx)
```bash
提取证书(不包含私钥)
openssl pkcs12 -in certificate.pfx -clcerts -nokeys -out cert.pem
提取私钥(需要输入PFX密码)
openssl pkcs12 -in certificate.pfx -nocerts -nodes -out key.pem
Case2: CER/CRT转PEM
DER转PEM
openssl x509 -inform der -in certificate.cer -out certificate.pem
CRT本身就是PEM格式时可以直接重命名使用
cp domain.crt domain.pem
Case3: PEM合成完整链
将多个PEM文件合并为一个(顺序很重要!):
cat domain_cert.pem intermediate1.pem intermediate2.pem > fullchain.pem
五、Nginx配置最佳实践示例
server {
listen 443 ssl;
server_name example.com;
SSL基础配置(使用合并后的完整链)
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/private.key;
DH参数增强安全性(单独生成)
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
TLS协议优化配置... (以下省略其他优化参数)
}
六、常见问题排查技巧
1. 报错:"SSL_CTX_use_PrivateKey_file" failed
→ PEM私钥与证书不匹配,用以下命令验证:
`openssl x509 -noout -modulus -in cert.crt | openssl md5`
`openssl rsa -noout -modulus -in private.key | openssl md5`
两个MD5值必须相同!
2. 浏览器提示"证书链不完整"
→ Nginx需要完整的信任链。将中间CA追加到站点证书后:
`cat your_domain.crt intermediate.crt > fullchain.crt`
3. 如何检查现有SSL配置是否正确?
```bash
openssl s_client -connect example.com:443 \
| openssl x509 -noout –text | grep "Issuer:\|Subject:\|Not "
```
4. 查看实际生效的协议和加密套件
```bash
nginx –T | grep ssl_protocols
nginx –T | grep ssl_ciphers
```
[附]快速参考表:各平台常用格式对照表
|平台 |推荐使用格式 |备注 |
|--|--||
|Nginx |PEM(.crt/.pem)+KEY |需单独指定密钥 |
|Apache |PEM(.crt)+KEY |SSLCertificateFile指定 |
|IIS |PFX/P7B |含完整导入向导 |
|Tomcat |JKS |Java KeyStore专用 |
记住这些要点,您的Nginx SSL配置就能既安全又高效!当遇到问题时,先确认各文件的格式是否正确匹配——就像确保锁和钥匙是同一套系统一样重要。
TAG:ngixn ssl证书格式,ssl证书格式转换,ssl证书 pem,ssl证书名称应该填什么