2011-09-17 28 views
1

我們的系統需要從PHP到第三方服務器進行cURL調用。第三方服務器要求我們在認證請求中包含證書。目前,我們的請求返回:PHP + cURL請求服務器 - 需要證書/ NSSDB

HTTP錯誤:捲曲ERROR:0:NSS:客戶端證書找不到 或 NSS:找不到客戶端證書(不指定暱稱)

服務器是標準的Fedora 15的LAMP堆棧。

回答

2

我發現低於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); 
0

我意識到這個問題被問了一年+前,但因爲我發現它,因爲我碰到了(我想)今天發生同樣的問題:

我的問題是我試圖使用的證書是由證書頒發機構(CA)簽署的,它不在服務器接受的CA列表中。這已使用openssl進行驗證。

  1. openssl s_client -connect host:443 -showcerts | more(其中列出了接受CA證書)
  2. openssl x509 -in mycert.crt -noout -text | more(它顯示誰籤我的證書......)

如果從2. CA不中發現的列表1.,那麼你將無法完成SSL認證。

相關問題