【发布时间】:2021-07-03 12:21:52
【问题描述】:
我知道之前有人问过这个问题,但我认为我的情况有点不同:
当我尝试在 PHP 中使用 curl 时,我在尝试与苹果推送通知服务交互时收到以下错误 (https://api.push.apple.com/3/device/)
Curl failed: NSS: client certificate not found (nickname not specified)
这是因为在 centos 上,php 是用 curl 构建的,使用 NSS 而不是 OpenSSL。
到目前为止我尝试了什么:
- 重新编译 curl(成功了!Binary 可以执行调用,但 php 不行)
- 重新编译 php(没用,因为它需要安装 curl-devel,可能会再次链接到 NSS)
所以我的下一个方法是解决这个 NSS 问题,但事实证明 NSS 是一个非常糟糕的软件,因为只是简单地重命名导入的lets-ecnrypt 证书不起作用.. ..
有人可以请解释一下我该如何解决这个问题吗?我已经尝试将 let encrypt 证书导入存储在 /etc/pki/nssdb 中的 NSS 数据库中,这很有效 - 但不幸的是,即使我在 CURLOPT_SSLCERT => 'nickname' 中提供了它的昵称,PHP 也无法识别该证书。
也许这是因为它的昵称中有特殊字符,我无法更改,因为 NSS 无法重命名(lol)。
当我直接尝试使用 php 提供证书时
CURLOPT_SSLCERT => $certFile,
CURLOPT_SSLKEY => $keyFile,
CURLOPT_CAINFO => $caCertFile
我明白了:
Curl failed: Peer's Certificate issuer is not recognized.
我也关闭了对等验证
CURLOPT_SSL_VERIFYPEER => FALSE
结束
Curl failed: security library failure
有没有人可以教我如何修复它或如何在 centos 上使用 openssl 构建 curl 构建 php?
BR,
【问题讨论】:
-
我没有针对您的确切问题的解决方案,但一种可能的解决方法是使用您编译的有效二进制文件,然后使用
proc_open之类的东西来解决这个问题。我知道这很老套,但至少你可以继续前进
标签: php curl openssl centos7 nss