答案是私钥带密码、与证书模数不匹配、文件含bom/crlf或权限不当导致nginx误报“密码错误”或“不匹配”;需依次验证私钥是否加密、模数md5值是否一致、pem格式是否纯净、权限是否为600且属主正确。

启动时提示 SSL 证书私钥“密码错误”或“不匹配”,实际多数情况并非真输错了密码,而是 Nginx 无法正确加载私钥——根源通常在私钥状态、文件结构或系统兼容性上。直接检查密码意义不大,应优先验证私钥是否可被 Nginx 静默读取、是否与证书数学一致、是否干净可用。
确认私钥是否带密码(加密)
带密码的私钥(即打开时需输入 passphrase)Nginx 默认拒绝加载,会报类似 SSL_CTX_use_PrivateKey_file failed 或 key values mismatch 的错误,而非明确提示“请输入密码”。
- 运行
openssl rsa -check -in your_key.key,若提示Enter pass phrase for ...,说明有密码; - 解密方法:
openssl rsa -in your_key_encrypted.key -out your_key_decrypted.key; - 解密后务必设好权限:
chmod 600 your_key_decrypted.key,并确保 nginx 工作用户(如 www-data 或 nginx)可读。
验证证书与私钥是否真正匹配
“不匹配”不是配置路径写错,而是公私钥数学关系断裂。最可靠方式是比对模数(modulus)哈希值,二者必须逐字相同。
- 执行:
openssl x509 -noout -modulus -in example.com.crt | openssl md5openssl rsa -noout -modulus -in example.com.key | openssl md5 - 两行输出 MD5 值完全一致才表示匹配;不一致说明私钥不是该证书对应的原始私钥;
- 若私钥是 PKCS#8 格式(如用
openssl pkcs8转换过),改用:openssl pkey -noout -modulus -in example.com.key | openssl md5。
检查文件格式与编码是否合规
Windows 编辑器保存的 .key 或 .crt 文件常含 BOM 头或 CRLF 换行符,Linux 下 Nginx 解析失败,会误判为“密钥不匹配”。
- 用
file your_key.key确认显示 ASCII text,而非 UTF-8 Unicode (with BOM) text; - 用
dos2unix your_key.key your_cert.crt清理隐藏字符(未安装则先yum install -y dos2unix); - 肉眼核对开头结尾:
证书必须以-----BEGIN CERTIFICATE-----开头、-----END CERTIFICATE-----结尾;
私钥应以-----BEGIN RSA PRIVATE KEY-----或-----BEGIN PRIVATE KEY-----开头。
排除证书链拼接和权限干扰
证书文件里混入私钥、中间证书顺序颠倒、或 nginx 用户无权读取私钥,都会触发同类报错。
- 证书文件(
ssl_certificate指向的)只应含域名证书 + 中间证书(按顺序拼接),绝不能含私钥; - 私钥文件(
ssl_certificate_key指向的)只能有私钥内容,不能有任何BEGIN CERTIFICATE段落; - 检查权限:
ls -l your_key.key应显示属主为 nginx 运行用户,权限为-rw-------(600); - 用
nginx -t可通过但启动失败?很可能是权限或路径指向了错误文件(比如软链接失效、相对路径解析错)。











