php - Curl 无法验证 Verisign 颁发的通配符 SSL 证书

标签 php ssl curl https

我有一个脚本需要使用 cURL 来安全地连接到网站 foo.bar.com,该网站由 *.bar.com 的通配符 SSL 证书覆盖。

通配符证书由威瑞信颁发,所有浏览器都信任它,没有任何问题。但是,我无法让 PHP/cURL 连接(至少在不禁用证书验证的情况下无法连接)。

为了隔离问题,我尝试仅使用命令行 cURL(版本 7.21.1)进行连接。我从 Mozilla 下载了一个更新的 CA 包(另存为 cacert.pem),然后运行:

curl --cacert /path/to/cacert.pem "https://foo.bar.com"

结果是:

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.

我一直在谷歌搜索和阅读有关此错误的帖子,但似乎无处可去。

如果我尝试任何正常的非通配符证书域,它似乎工作得很好,所以它似乎局限于这个特定的通配符证书问题。我什至手动导出了信任链中的所有证书并手动将它们添加到 cacert.pem 文件中(只是为了查看 CA 包是否缺少某些东西),但仍然没有。

最终,我想让它在 PHP cURL 中运行,但我想如果我能确定命令行 cURL 的问题,该解决方案也可能适用于 PHP 脚本。

最佳答案

问题可能不是 curl,而是由于缺少链证书而导致信任链不完整。桌面浏览器在这方面的问题较少,因为它们会在访问其他站点时缓存此类证书,并且某些浏览器甚至会下载丢失的证书。

header 到 SSLLabs并检查网站。留意“链条问题”。

如果我的回答有误,请附上相关网址和你使用的curl版本,以便大家仔细查看。

关于php - Curl 无法验证 Verisign 颁发的通配符 SSL 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28969538/

相关文章:

php - MySQL:where子句错误中的未知列

来自 godaddy 服务器的 php mail()

ssl - 1 个 SSL 证书服务于单独的服务器

security - Amazon Linux 支持的 SSL 中等强度密码套件

java - curl 和形式 - 不重定向到页面

php - 如何使用php echo以与mysql文本字段中添加的格式相同的格式显示文本

php - Smarty PHP 与 AngularJS 冲突

actionscript-3 - AS3 本地连接与 SSL

php - 如何解决 nginx 服务器上缺少 CURL 扩展的问题?

python - 从与我共享的文件夹中的 Google Drive 下载 zip 文件夹/文件