我正在尝试使用Indy和OpenSSL在Delphi XE3中设置一个Web服务器,它可以在同一端口上通过HTTP和HTTPS连接提供流量.
我已经看到了两种主要的方法,似乎都不适合我.
第一种:前期TLS / SSL.这涉及读取流的前几个字节以查找非安全握手的“Client-Hello”部分和(如果找到)调用服务器SSL握手响应,但是如果我这样做,则OpenSSL库无法识别握手,因为我已经剥离了消息的前导字节.
第二:STARTTLS之后的TLS(或等效的).这涉及发送一组特殊字符(STARTTLS),紧接着是“Client-Hello”.然后,服务器保留完整的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流量?