我有一個簡單的SMTP客戶端,我試圖添加TLS支持。我不確定在客戶發出「STARTTLS」命令後會發生什麼。大多數消息來源(包括RFC本身)都將其描述爲TLS會話的協商,但這並不是特別清楚。通過套接字與ESMTP協商TLS
怎麼去做這件事?我的客戶端用Objective C編寫,並使用Cocoa的流對象(套接字的包裝器)。可可流有能力將TLS指定爲具有NSStream的setProperty函數的套接字安全級別系統。
但是它似乎,在打開連接在此之前必須完成。如果是這種情況,那麼客戶希望在從服務器接收到代碼220(爲了響應STARTTLS)之後斷開連接,然後在指定TLS時重新連接?
或者更確切地說,這只是NSStream的限制?普通套接字是否在不關閉的情況下重新協商TLS或SSL?
此外,一旦STARTTLS已發出和隨後的談判完成,預計在客戶端的一部分的任何其他編碼/解碼?
道歉,如果這些都是簡單的問題。我很難找到合適的例子。
乾杯!
感謝您的答覆非常有用。 在發佈最初的問題後,我做了一些調查並最終得出了相同的結論。 解決方案是爲OpenSSL套接字編寫一個簡單的Objective-C包裝器,並使用它替代NSStream。 – Gareth 2010-07-19 16:44:28