2012-05-24 23 views

回答

5

缺省情況下,沒有。

它將始終爲簡單的竊聽攻擊提供某種形式的保護,因爲數據將始終被加密(只要您連接的SSL服務器允許使用至少一個加密密碼 - 是,加密密碼在HTTPS連接中是允許的:roll-eyes :)但是,默認情況下,它不能防止中間人攻擊,因爲它不會驗證服務器的證書,因此您無法確信已連接到打算服務器。

證書驗證可以接通。爲此,您需要提供一個根證書包,並使用允許您指定流上下文的fopen的第四個參數。流上下文允許您修改流的行爲。下面的開關示例將使證書針對指定包文件中的根證書進行驗證。

$context = stream_context_create(array(
    'ssl' => array(
     'cafile'  => 'ca_bundle.crt', 
     'verify_peer' => true 
    ) 
)); 

$file = fopen($url, 'r', false, $context); 
+0

您可能想要做的一件事是限制允許的一組密碼以僅允許強加密形式。應該默認使用最強的可用密碼(客戶端和服務器都允許)但是,如果您真的很挑剔,那麼您可能想要拒絕與不支持高度加密級別的服務器的連接。 如果有人知道如何在PHP中實現這一點,請發表。 – Cheekysoft