我想在Delphi XE3中使用Indy和OpenSSL設置一個Web服務器,它可以通過同一端口上的HTTP和HTTPS連接提供流量。如何在Delphi XE3中使用TIdTCPServer和OpenSSL在同一端口上支持SSL和非SSL流量?
我已經看到了兩種主要的方法來此,既不似乎爲我工作。
第一:先期的TLS/SSL。這包括讀取流的前幾個字節以查找非安全握手的「Client-Hello」部分和(如果找到)調用服務器SSL握手響應,但如果我這樣做,OpenSSL庫不會識別握手,因爲我已經刪除了消息的前導字節。
第二:TLS後STARTTLS(或等同物)。這涉及到發送一組特殊的字符(STARTTLS),緊接着是「客戶 - 你好」。然後,服務器將整個SSL握手消息保持原樣傳遞給OpenSSL庫。這種方法的問題是大多數Web瀏覽器都不支持它(RFC 2817)。
對於這兩種方法的總結,看這裏:What happens on the wire when a TLS/LDAP or TLS/HTTP connection is set up?)
我怎麼能支持在Delphi XE3使用TIdHTTPServer和OpenSSL在同一端口上的SSL和非SSL流量?
感謝您的替代建議!我會研究這些,如果我最終實施其中的任何一個,我會在這裏再次發佈。 – Andy 2013-04-26 16:43:25