我正在尝试使用 Indy 和 OpenSSL 在 Delphi XE3 中设置一个 Web 服务器,该服务器可以通过同一端口上的 HTTP 和 HTTPS 连接提供流量。
我已经看到了两种主要的方法,但似乎都不适合我。
第一:前期 TLS/SSL。这涉及读取流的前几个字节以查找非安全握手的“Client-Hello”部分并(如果找到)调用服务器 SSL 握手响应,但如果我这样做,OpenSSL 库将无法识别握手,因为我已经剥离了消息的前导字节。
第二:在 STARTTLS(或等效)之后的 TLS。这涉及发送一组特殊的字符 (STARTTLS),紧随其后的是“Client-Hello”。然后服务器将整个 SSL 握手消息保持原样以传递给 OpenSSL 库。这种方法的问题是大多数网络浏览器不支持它(RFC 2817)。
有关这两种方法的摘要,请查看此处: 当建立 TLS / LDAP 或 TLS / HTTP 连接时,线路上会发生什么?)
如何使用 TIdHTTPServer 和 OpenSSL 在同一端口上支持 SSL 和非 SSL 流量?