Ich versuche, einen Web-Server in Delphi XE3 mit Indy und OpenSSL einzurichten, der Verkehr über HTTP- und HTTPS-Verbindungen am selben Port bedienen kann.Wie kann ich SSL- und Nicht-SSL-Datenverkehr auf demselben Port mit TIdTCPServer und OpenSSL in Delphi XE3 unterstützen?
Ich habe zwei Hauptansätze gesehen, und keiner scheint für mich zu funktionieren.
Zuerst: Vorne TLS/SSL. Dies beinhaltet das Lesen der ersten paar Bytes des Streams, um nach dem "Client-Hello" -Teil des nicht sicheren Handshakes zu suchen und (falls gefunden) die Server-SSL-Handshake-Antwort aufzurufen, aber wenn ich das tue, erkennt die OpenSSL-Bibliothek das nicht der Handshake, weil ich die führenden Bytes der Nachricht entfernt habe.
Zweitens: TLS nach STARTTLS (oder gleichwertig). Dies beinhaltet das Senden eines speziellen Zeichensatzes (STARTTLS), auf den sofort "Client-Hello" folgt. Der Server lässt dann die gesamte SSL-Handshake-Nachricht intakt, um sie an die OpenSSL-Bibliothek zu übergeben. Das Problem bei diesem Ansatz besteht darin, dass die meisten Webbrowser dies nicht unterstützen (RFC 2817).
Für eine Zusammenfassung der beiden Ansätze, schau mal hier: What happens on the wire when a TLS/LDAP or TLS/HTTP connection is set up?)
Wie kann ich SSL und nicht-SSL-Datenverkehr auf dem gleichen Port mit TIdHTTPServer und OpenSSL in Delphi XE3 unterstützen?
Danke für die alternativen Vorschläge! Ich werde in diese schauen und wenn ich am Ende eines von denen implementiere, werde ich hier wieder posten. – Andy