我們的系統需要從PHP到第三方服務器進行cURL調用。第三方服務器要求我們在認證請求中包含證書。目前,我們的請求返回:PHP + cURL請求服務器 - 需要證書/ NSSDB
HTTP錯誤:捲曲ERROR:0:NSS:客戶端證書找不到 或 NSS:找不到客戶端證書(不指定暱稱)
服務器是標準的Fedora 15的LAMP堆棧。
我們的系統需要從PHP到第三方服務器進行cURL調用。第三方服務器要求我們在認證請求中包含證書。目前,我們的請求返回:PHP + cURL請求服務器 - 需要證書/ NSSDB
HTTP錯誤:捲曲ERROR:0:NSS:客戶端證書找不到 或 NSS:找不到客戶端證書(不指定暱稱)
服務器是標準的Fedora 15的LAMP堆棧。
我發現低於http://www.linuxquestions.org/questions/programming-9/stuck-with-php-curl-and-ssl-certificates-322684/它看起來像它會滿足您的需求,特別是CURLOPT_SSLCERT, CURLOPT_SSLCERTPASSWD, CURLOPT_SSLKEYTYPE, CURLOPT_SSLKEY
$url = "https://www.bla.com/foo"; // onramp url
$clientcert = $diagno_libdir."/exported-with-private-key.pem";
$keyfile = $diagno_libdir."/clientkey.key";
$challenge = "nightmare";
print "<bR><BR>$challenge<br><br>";
print "<bR><BR>$keyfile<br><br>";
$header = Array();
$header[] = "Content-Type: multipart/related \r\n";
$header[] = "type=text/xml \r\n";
$header[] = "boundary=--someBoundaryValue-- \r\n";
$header[] = "start=ebXML_Message_Header \r\n";
$header[] = $iptest;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_SSLCERT, $clientcert);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, $challenge);
curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
curl_setopt($ch, CURLOPT_SSLKEY, $keyfile);
$ret = curl_exec($ch);
我意識到這個問題被問了一年+前,但因爲我發現它,因爲我碰到了(我想)今天發生同樣的問題:
我的問題是我試圖使用的證書是由證書頒發機構(CA)簽署的,它不在服務器接受的CA列表中。這已使用openssl進行驗證。
openssl s_client -connect host:443 -showcerts | more
(其中列出了接受CA證書)openssl x509 -in mycert.crt -noout -text | more
(它顯示誰籤我的證書......)如果從2. CA不中發現的列表1.,那麼你將無法完成SSL認證。