Nginx/Apache SSL证书配置报错,站长最常踩的五个坑
运作网站的人员, 有谁未曾遭受过SSL证书的困扰呢? 分明是照着教程逐一稳步去配置, 然而一旦重新启动服务就触发报错, 浏览器干脆直接给出“不安全”的提示。实际上大多数报错的缘由都颇为固定, 只要对下面的几个地方实行排查, 大体上能够予以解决。
一、常见报错:证书路径写错了
不论是 Nginx 也好, 还是 Apache 也罢, 第一步所要做的皆是去检查 ssl_certificate 以及 ssl_certificate_key 所指向的路径是不是正确的。好多站长直接把证书文件放置到 /root/ 下面, 然而 Nginx 工作进程是没有权限去读取的。
检查方法:
通过 “ls -l /你的路径/yourdomain.pem” 来进行文件是否存在的确认。
确认权限, Nginx 一般是以 www-data 或者 nginx 用户来运行的, 证书文件起码得有 640 权限, 并且是不可以放置在 /root/ 之下的。
给出的提议是, 要整齐划一地放置在, /etc/ssl/certs/这个特定目录, 以及, /etc/ssl/private/这个固定目录之中。
二、Nginx 加载私钥时报错:SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch
这是私钥与证书不匹配,最常见原因是:
生成CSR时用的私钥和当前配置的私钥不是同一个。
或证书被重新颁发,但私钥没更新。
解决方法:
在服务器上面, 去执行以下这个命令, 进而对比输出当中的 Modulus 值, 看其是不是一致。
openssl x509 -noout -modulus -in yourdomain.pem | openssl md5
openssl rsa -noout -modulus -in yourdomain.key | openssl md5
要是两个md5的数值并非一样, 那便是证书跟私钥不相匹配, 这种情况下就需要再次上传准确无误的证书文件。
三、Apache 报错:SSLCertificateFile: file '/path/cert.pem' does not exist or is empty
致使出现这种最为常见情况的缘由在于, 证书文件运用了Windows换行符, 也就是CRLF, 或者文件末尾欠缺空行。Apache的SSL模块对于文件格式具备显著的敏感性。
修复方法:
# 转换换行符
dos2unix /etc/ssl/certs/yourdomain.pem
# 在文件末尾加一个空行
echo "" >> /etc/ssl/certs/yourdomain.pem
四、Nginx 配置链不完整,部分手机端报错
仅仅配置了域名证书, 却没有配置中间证书链, 进而致使某些旧版浏览器或者手机在进行访问的时候报出“证书不可信”。
检查方法:
留意你那张证书文件的细节, 当仅存在一段-----BEGIN CERTIFICATE-----时, 便意味着中间证书有所缺失。
正确做法:
将你的域名证书和中间证书合并:
cat yourdomain.pem intermediate.crt > fullchain.pem
而后, 于Nginx配置当中, 将其指向fullchain.pem。
ssl_certificate /etc/ssl/certs/fullchain.pem;
ssl_certificate_key /etc/ssl/private/yourdomain.key;
五、防火墙或端口未放行
配置再对,443端口没开也是白搭。
检查命令:
# 查看端口监听状态
ss -tlnp | grep 443
# 查看防火墙规则
iptables -L -n | grep 443
# 如果是云服务器,检查安全组是否放行了443端口
诸多新手在完成SSL配置之后, 忘却了放行HTTPS端口, 进而致使浏览器持续弹出连接超时的提示。首先运用curl -v https://你的域名展开测试, 查看能否实现正常握手。
SSL证书出现报错情况, 其中80%的问题全都聚焦于路径权限、密钥匹配、证书链完整性以及端口放行这四个环节之上。要是碰到报错之时不要慌张, 依照上述步骤按照次序逐一进行检查, 基本上都是能够解决的。
否玩代码编辑 https://www.fouwan.com


