使用Let's Encrypt证书对接Messenger API出现SSL本地颁发者证书错误
SSL证书报错排查解决步骤
该unable to get local issuer certificate报错的核心原因是请求方无法完整验证你站点SSL证书的信任链,结合你使用Let's Encrypt证书、NGINX部署的场景,可按照以下步骤排查:
1. 服务端证书配置校验
- 确认证书路径匹配:你当前配置的
ssl_certificate参数为fullchain.pem是正确的,但需要确认路径中example.com和你实际运行的站点域名完全一致,没有错配其他域名的证书。 - 检查证书文件完整性:执行命令
openssl crl2pkcs7 -nocrl -certfile /etc/letsencrypt/live/example.com/fullchain.pem | openssl pkcs7 -print_certs -noout,正常会返回至少2条证书信息(你的站点证书+Let's Encrypt中间证书),如果只有1条说明证书链不完整,需要重新通过certbot生成证书。 - 验证证书文件权限:确保NGINX运行用户有证书文件的读取权限,可执行
chmod 644 /etc/letsencrypt/live/example.com/*.pem调整权限,修改后执行nginx -s reload重载配置。
2. 站点SSL部署有效性校验
- 本地执行命令
curl -vI https://你的实际域名,查看输出的SSL验证部分,如果返回* SSL certificate verify ok说明服务端部署正常,问题出在请求侧;如果返回同样的证书错误,说明服务端证书链部署有问题。
3. 请求侧问题排查
如果服务端校验无问题,需要检查发起Messenger API请求的客户端环境:
- 确认客户端系统的CA根证书库是最新版本,老旧系统(如CentOS 6、Windows Server 2008及更早版本)默认没有内置Let's Encrypt的ISRG Root X1根证书,需要手动更新系统CA根证书库。
- 如果你是自定义代码发起请求,确认代码没有指定自定义的CA证书路径、没有禁用系统根证书库加载逻辑,不要临时关闭SSL验证规避问题,会带来严重的安全风险。
内容的提问来源于stack exchange,提问作者mudit
相关产品推荐
相关产品推荐

