2009-12-17 42 views
2

我是新來的php,我需要對SSO服務器進行身份驗證。 SSO服務器是.Net,使用SSL證書。用證書解碼http響應

當我從SSO服務器返回時,響應被編碼。 我有證書的關鍵當然,但我怎麼能解密的迴應?

這對我來說很模糊,不要猶豫,詳細你的答案:)

提前感謝您的幫助, 問候

+0

如果來自SSO的響應超過SSL/HTTPS,則不需要解密響應。你能給出一些代碼,並指出你期望它做什麼,不做什麼。 – Gordon 2009-12-17 11:03:02

+0

另外,您可以提供SSO服務器產品的名稱或任何其他相關信息。 – Gordon 2009-12-17 11:07:24

回答

7

可以使用http/ssl stream wrapper讓PHP透明地處理ssl部分。

讓我們從簡單的開始:

$c = file_get_contents('file.txt'); 

沒有包裝已指定,因此文件://默認情況下使用。 file:// wrapper嘗試打開本地文件file.txt,file_get_contents()從該流讀取數據。

下一步:所述HTTP包裝

$c = file_get_contents('http://docs.php.net/fopen'); 

現在被指定的包裝。 http-wrapper請求h ttp://docs.php.net/fopen並將結果作爲從其中file_get_contents()所有數據的流返回。

如果啓用了ssl支持(另請參閱http://docs.php.net/openssl),也可以使用http s

$c = file_get_contents('https://developer.mozilla.org/en/gecko_dom_reference'); 

可選:服務器/客戶機認證
您可以將context to a php stream允許您設置選項/參數所涉及的流包裝。
例如http-wrapper在向服務器發送http請求時考慮參數http.user_agent。所以,如果你想使服務器「相信」火狐的特定版本發出請求爲一個文件,你可以這樣做

$context = stream_context_create(
    array(
    'http'=>array('user-agent'=>'Mozilla/6.0 (Windows; U; Windows NT 7.0; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.9 (.NET CLR 3.5.30729)') 
) 
); 
$c = file_get_contents('http://docs.php.net/fopen', 0, $context); 

作出HTTPS請求均httpssl選項是當使用

$context = stream_context_create(
    array(
    'http'=>array( ...http-wrapper options here), 
    'ssl'=>array( ...ssl-wrapper options here) 
) 
); 

https服務器可能會要求您在允許訪問資源前進行身份驗證。客戶端證書必須與請求一起發送,服務器決定它是否可接受。上下文參數ssl.local_cert允許您指定請求中使用的客戶端證書。證書文件可能受密碼保護。在這種情況下,你必須爲ssl.passphrase

$context = stream_context_create(
    array(
    'ssl'=>array(
     'local_cert'=>'xyz/VolkerCA/UserVolker.pem', 
     'passphrase'=>'my secret passphrase' 
    ) 
) 
); 
$c = file_get_contents('https://hermes..../ssl/test.php', 0, $context); 

在您可能(還)要確保服務器確實是它所聲稱的另一方面提供密碼。如何確定一個(服務器)證書是否可接受/有效/可信賴是有點超出了這篇文章。 http://docs.php.net/book.openssl
設置ssl.verify_peer = true並將查找驗證數據的位置信息傳遞給ssl。cafile

$context = stream_context_create(
    array(
    'ssl'=>array(
     'local_cert'=>'xyz/VolkerCA/UserVolker.pem', 
     'passphrase'=>'my secret passphrase', 
     'verify_peer'=>true, 
     'cafile'=>'xyz/VolkerCA/VolkerCA.pem' 
    ) 
) 
); 
$c = file_get_contents('https://hermes..../ssl/test.php', 0, $context);