Curl 失败:NSS:未找到客户端证书(未指定昵称)- 在 Centos 7 上
Curl failed: NSS: client certificate not found (nickname not specified) - On Centos 7
我知道之前有人在 SO 上问过这个问题,但我认为我的情况有点不同:
当我尝试在 PHP 中使用 curl 时,我在尝试与苹果推送通知服务 (https://api.push.apple.com/3/device/)
交互时收到以下错误
Curl failed: NSS: client certificate not found (nickname not specified)
这是因为在 centos 上,php 是使用 NSS 而不是 OpenSSL 的 curl 构建的。
到目前为止我尝试了什么:
- 正在重新编译 curl(成功!二进制能够执行调用,但 php 不能)
- 重新编译 php(没用,因为它需要安装 curl-devel,这可能会再次 link 到 NSS)
所以我的下一个方法是解决这个 NSS 问题,但事实证明 NSS 是一个非常糟糕的软件,因为只是简单地重命名导入的 lets-ecnrypt 证书不起作用.. ..
谁能请 解释一下我该如何解决这个问题?我已经尝试将 lets encrypt 证书导入存储在 /etc/pki/nssdb 中的 NSS 数据库,这很有效 - 但不幸的是,即使我在 CURLOPT_SSLCERT = 中提供了它的昵称,该证书在 PHP 中也无法识别> 'nickname'.
也许这是因为它的昵称中有特殊字符,我无法更改,因为 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,
我终于开始工作了,这是我所做的:
- 使用 openssl 重新编译 curl 并将 libcurl.so.4 放入新文件夹 /home/mylibs/
- 已将所有库从 /usr/lib 复制到 /home/mylibs/ 而未替换我的 libcurl.so.4
- 找到系统的 php-cgi 二进制文件,将其重命名为 php-cgi-real
- 创建了一个空白文件 php-cgi
#! /bin/bash
export LD_PRELOAD=/home/mylibs/libcurl.so.4
exec php-cgi-real "$@"
- 重新启动服务
- 完成!
我知道之前有人在 SO 上问过这个问题,但我认为我的情况有点不同:
当我尝试在 PHP 中使用 curl 时,我在尝试与苹果推送通知服务 (https://api.push.apple.com/3/device/)
交互时收到以下错误Curl failed: NSS: client certificate not found (nickname not specified)
这是因为在 centos 上,php 是使用 NSS 而不是 OpenSSL 的 curl 构建的。
到目前为止我尝试了什么:
- 正在重新编译 curl(成功!二进制能够执行调用,但 php 不能)
- 重新编译 php(没用,因为它需要安装 curl-devel,这可能会再次 link 到 NSS)
所以我的下一个方法是解决这个 NSS 问题,但事实证明 NSS 是一个非常糟糕的软件,因为只是简单地重命名导入的 lets-ecnrypt 证书不起作用.. ..
谁能请 解释一下我该如何解决这个问题?我已经尝试将 lets encrypt 证书导入存储在 /etc/pki/nssdb 中的 NSS 数据库,这很有效 - 但不幸的是,即使我在 CURLOPT_SSLCERT = 中提供了它的昵称,该证书在 PHP 中也无法识别> 'nickname'.
也许这是因为它的昵称中有特殊字符,我无法更改,因为 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,
我终于开始工作了,这是我所做的:
- 使用 openssl 重新编译 curl 并将 libcurl.so.4 放入新文件夹 /home/mylibs/
- 已将所有库从 /usr/lib 复制到 /home/mylibs/ 而未替换我的 libcurl.so.4
- 找到系统的 php-cgi 二进制文件,将其重命名为 php-cgi-real
- 创建了一个空白文件 php-cgi
#! /bin/bash
export LD_PRELOAD=/home/mylibs/libcurl.so.4
exec php-cgi-real "$@"
- 重新启动服务
- 完成!