簡體   English   中英

Curl 失敗:NSS:未找到客戶端證書(未指定昵稱)-在 Centos 7

[英]Curl failed: NSS: client certificate not found (nickname not specified) - On Centos 7

我知道之前有人問過這個問題,但我認為我的情況有點不同:

當我嘗試在 PHP 中使用 curl 時,我在嘗試與蘋果推送通知服務交互時收到以下錯誤 ( https://api.push.device.apple.device )。

Curl failed: NSS: client certificate not found (nickname not specified)

這是因為在 centos 上,php 是用使用 NSS 的 curl 構建的,而不是 ZEE302FD5FD2A7A5A3CC19F。

到目前為止我嘗試了什么:

  • 重新編譯 curl (工作,二進制能夠執行調用,但 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 上構建 php 並使用 Z509358D4B20326 構建 curl?

BR,

最后我得到了這個工作,這就是我所做的:

  1. 用 openssl 重新編譯 curl 並將 libcurl.so.4 放入新文件夾 /home/mylibs/
  2. 將所有庫從 /usr/lib 復制到 /home/mylibs/ 而沒有替換我的 libcurl.so.4
  3. 找到系統的 php-cgi 二進制文件,將其重命名為 php-cgi-real
  4. 創建了一個空白文件 php-cgi

#! /bin/bash
export LD_PRELOAD=/home/mylibs/libcurl.so.4
exec php-cgi-real "$@"
  1. 重新啟動了服務
  2. 完畢!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM