加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在Delphi XE3中使用TIdTCPServer和OpenSSL在同一端口上支持S

发布时间:2020-12-15 04:11:06 所属栏目:大数据 来源:网络整理
导读:我正在尝试使用Indy和OpenSSL在Delphi XE3中设置一个Web服务器,它可以在同一端口上通过HTTP和HTTPS连接提供流量. 我已经看到了两种主要的方法,似乎都不适合我. 第一种:前期TLS / SSL.这涉及读取流的前几个字节以查找非安全握手的“Client-Hello”部分和(如
我正在尝试使用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流量?

解决方法

开箱即用的Indy无法满足您的要求.它的默认SSL实现使用OpenSSL的传统API,它可以完成所有自己的套接字I / O,因此需要直接访问完整的握手数据,而不必先查看数据.但是,一切都不会丢失.你有几个选择:

1)在套接字将其提供给您的应用程序之前,使用libpcap / Winpcap捕获并查看新连接的原始数据的前几个字节.

2)编写自己的TIdIOHandler派生类,该类使用OpenSSL的新BIO API或Microsoft的SChannel API,因此您可以控制套接字I / O并自己读取传入的字节并在将它们推入加密引擎进行处理之前查看它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读