2011-01-05 72 views
0

最近我決定爲我的PHP商店添加銀行付款選項,並且在閱讀實現規範後,一切似乎都是okey,但是它的1點。所有的公鑰(證書)交換均採用X509格式。現在最後一個是什麼意思,它與常規密碼保護的.pem文件有什麼不同? 也與正規密碼保護.pem文件我不能使用PHP功能openssl_verify()簽署openssl_sign()函數。如何使證書在OpenSSL中使用PHP?

請問我可以在這裏得到一些建議,因爲提供這種付款方式的銀行有這方面的信息很少,我對此完全陌生。

所以我需要做的例程是爲它們生成request.pem併發送給它們。之後,他們會簽署或不管我不知道,我應該能夠在我的應用程序中使用它。

請告訴我,如果我的信息不夠充足,因爲我告訴我在證書或openssl時不太瞭解。

回答

1

PEM文件包含加密的和base64編碼的'原始'證書/私鑰值,所以與PEM一起使用的函數也應該使用原始證書。 OpenSSL應該能夠從一種格式轉換爲另一種格式。

+0

試圖將PEM轉換爲DER,所以openssl_verify在PHP中可以讀取沒有結果仍然返回false。我只是在x509中創建了新的證書,然後從私鑰中刪除了密碼。 – arma 2011-01-05 14:13:12

1

您必須使用curl概念。

curl_setopt($ch, CURLOPT_SSLCERT,'CA.pem'); 
0

很久以前我在做類似的事情。不同之處在於他們只給了我一個pem文件,我用它來連接到他們的服務器。

下面我爲你寫了我的guiessing。 :)

  1. 使用openssl工具生成myreq.pem。
  2. 發送myreq.pem給他們並獲得簽名證書ca.pem。
  3. 像下面這樣在PHP中使用ca.pem。

 

$context = stream_context_create(); 
stream_context_set_option($context, 'ssl', 'verify_peer', false); //or can be true 
stream_context_set_option($context, 'ssl', 'cafile', "ca.pem"); 
stream_context_set_option($context, 'ssl', 'local_cert', "ca.pem"); 
stream_context_set_option($context, 'ssl', 'passphrase', 'your pem file password'); 
//instead tls can be ssl, sslv3, sslv2 depending requirements, 10 is timeout 
$sock = stream_socket_client("tls://host:port", $errno, $errstr, 10, STREAM_CLIENT_CONNECT, $context); 
fwrite($sock, "Hi server\r\n"); 
$strResponse; 
while(!feof($sock)) { $strResponse = $strResponse . fgets($sock, 1024); } 
fclose($s); 
echo $strResponse; 
1

老實說,在PHP OpenSSL的能力是糟糕透頂。你最好的選擇是去尋找一個很棒的包裹,比如phpseclib

相關問題