Bluehost服务器调用Twilio API时SSL证书不匹配问题排查求助
我遇到了一个棘手的SSL证书问题,希望能得到大家的帮助:
环境背景
- 我的服务器是Bluehost的VPS,虽然购买时说是CentOS,但执行
cat /etc/redhat-release显示是CloudLinux release 6.10 (Final) - 本地Win11/IIS/PHP环境下,调用Twilio API的curl命令完全正常,但到Bluehost服务器上就报错
核心错误信息
执行带verbose参数的curl命令时,出现证书不匹配的错误:
curl: (51) SSL: certificate subject name '*.us-east-1.es.amazonaws.com' does not match target host name 'api.twilio.com'
完整的verbose输出:
* About to connect() to api.twilio.com port 443 (#0) * Trying 50.19.189.95... connected * Connected to api.twilio.com (50.19.189.95) port 443 (#0) * Initializing NSS with certpath: sql:/etc/pki/nssdb * CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none * SSL: certificate subject name '*.us-east-1.es.amazonaws.com' does not match target host name 'api.twilio.com' * NSS error -12276 * Closing connection #0 curl: (51) SSL: certificate subject name '*.us-east-1.es.amazonaws.com' does not match target host name 'api.twilio.com'
已尝试的解决步骤(Twilio支持提供)
Twilio支持让我下载他们的SSL证书(通过Chrome导出,命名为cacert.pem),然后执行以下操作:
- 用SCP/SFTP上传
cacert.pem到服务器 - 复制证书到系统证书目录:
sudo cp cacert.pem /etc/pki/tls/certs/ - 启用并更新CA信任:
sudo update-ca-trust enable sudo update-ca-trust extract - 验证证书是否加入到CA bundle:
cat /etc/pki/tls/certs/ca-bundle.crt(确认内容已包含) - 重启Apache
但执行完这些步骤后,问题依然存在,还是返回错误的证书。我问Twilio支持"系统怎么知道该用哪个证书?"但没得到回复。
额外测试结果
用
-k参数跳过证书验证:
执行curl命令时加上-k,虽然跳过了证书检查,但得到了另一个错误:Authorization header requires 'Credential' parameter. Authorization header requires 'Signature' parameter. Authorization header requires 'SignedHeaders' parameter. Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header. Authorization=Basic QUNmN***
DNS解析测试(dig命令):
- 执行
dig api.twilio.com,结果显示api.twilio.com最终解析到多个AWS ELB的IP地址(比如34.204.146.75、52.20.98.48等) - 执行
dig api.twilio.com @8.8.8.8,同样解析到AWS ELB的IP,只是具体地址不同
- 执行
指定TLSv1.2的curl测试(11月4日尝试):
执行指定TLS版本的curl命令:curl -v --tlsv1.2 -X POST "https://api.twilio.com/2010-04-01/Accounts/ACf7b58ec793***4d/Messages.json" \ --data-urlencode "Body=This is the ship that made the Kessel Run in fourteen parsecs?" \ --data-urlencode "From=+14*****40" \ --data-urlencode "To=+18*****44" \ -u ACf7b*****30a4d:0ce7445d*****48bc4d结果依然报错,只是这次证书变成了
*.glympse.com:SSL: certificate subject name '*.glympse.com' does not match target host name 'api.twilio.com'openssl测试(11月4日尝试):
执行openssl s_client -connect api.twilio.com,提示no port defined,然后输出了一堆参数说明。
我是开发人员,但对Linux和证书相关的知识比较陌生,真心希望有人能帮我排查这个问题,谢谢大家!
备注:内容来源于stack exchange,提问作者HerrimanCoder

