2016-01-30 88 views
1

可能不是一個非常有幫助的問題,但我無法想象這個問題沒有明確的答案。我剛剛通過一些已經回答的有關imap_open()連接問題的問題找到了答案,即當連接到SSL服務器時,該函數很可能會返回錯誤。所以我只是想知道,PHP使用SSL有什麼問題?雖然這一個連接沒有問題爲什麼不用php的imap_open()就像SSL?

function connect($host, $port, $login, $pass){ 

    $this->server = $host; 
    $this->username = $login; 

    $this->link = imap_open("{". $host .":". $port."}INBOX", $login, $pass); 
     if($this->link) { 
      $this->status = 'Connected'; 
    } else { 
     $this->error[] = imap_last_error(); 
     $this->status = 'Not connected'; 
    } 
} 

使用此連接字符串返回錯誤

function connect($host, $port, $login, $pass){ 

    $this->server = $host; 
    $this->username = $login; 

    $this->link = imap_open("{". $host .":". $port."/imap/ssl/novalidate-cert}INBOX", $login, $pass); 
     if($this->link) { 
      $this->status = 'Connected'; 
    } else { 
     $this->error[] = imap_last_error(); 
     $this->status = 'Not connected'; 
    } 
} 
+2

看來大多數人沒有正確設置本地根證書存儲區(似乎PHP沒有正確配置),所以當它試圖驗證遠程證書(安全的必要部分)時,它可以「T。使用novalidate-cert會引發攻擊。另外,許多小型安裝使用自簽名(無效)證書。 – Max

回答

2

如果服務器需要加密連接,這意味着你要連接到加密端口,如果您不使用/ssl(根本不連接),您的腳本將失敗。

服務器也可能接受明文連接,然後需要加密(請參閱STARTTLS),但我想它會連接,然後發送IMAP錯誤。

這可以通過您連接的端口和郵件服務器規範來檢查。通常將端口465/993分配爲使用加密的TLS/SSL連接,而25/143/587可能會接受未加密的連接,然後要求升級。

相關問題