WinInet + SSL:无法进行缩短的SSL握手

问题描述:

我的ActiveX组件使用WinInet.dll并使用SSL证书颁发机构与服务器建立SSL连接。WinInet + SSL:无法进行缩短的SSL握手

如果服务器未托管在IE进程中,它始终与服务器进行完全SSL握手。而且我无法找到任何方法在Client Hello中重用SessionID头来进行简短的SSL握手。

否则,如果我的ActiveX托管在IE进程中,那么重新使用SessionID标头将自动工作。

看起来像IE应用其他设置到我的连接。有人知道这些额外的设置吗? 任何人都可以建议我一些技巧,我可以如何解决这个问题?

P.S.这是Delphi项目,所以我不能使用WCF,也不能移动到OpenSSL。


我想我应该在这里给一些澄清:

  1. 我的ActiveX控件在这两种情况下使用的wininet.dll(在IE进程上下文,并在非IE进程上下文)是肯定的。

  2. WinInet.dll会与SSL/TLS握手自己。我无法访问WinInet级别的SessionID头,但IE拥有。

  3. 如果我的ActiveX托管insede IE进程,IE知道如何设置WinInet使用以前的SessionID。 WinInet缩写SSL/TLS握手。

  4. 如果我在非IE进程中使用WinInet.dll,那么WinInet没有为Client Hello使用SessionID。 WinInet完成SSL/TLS握手。

  5. 因此,我们有两种SSL/TLS握手方案:完整的非IE进程和缩写为IE进程。查看更多有关这些场景在MSDN博客http://blogs.msdn.com/b/huizhu/archive/2009/12/17/ssl-_2f00_tls-full-handshake-vs.-abbreviated-handshake.aspx

希望现在更清楚。

+0

因此,您有一个作为本地delphi程序编写的ActiveX .ocx控件?也许如果您期待某种特定的行为,您应该指定您正在使用的API以及您用于这些API的参数,以查看是否有人能够发现您错过的某些内容。我最好的猜测是你需要找到一个wininet api,它设置了与上面提到的点#5链接相同的选项,显示通过注册表设置。 – 2012-08-14 12:44:00

Internet Explorer使用WinInet作为自己的连接。假设你的ActiveX是一个进程内对象,当它被托管在IE内部时,WinInet只是在同一个进程内与自己共享信息。当您的ActiveX托管在非IE进程中时,您自己并不使用WinInet。

+0

谢谢您的回复,但我的ActiveX在这两种情况下都使用WinInet。我更新我的问题更加清楚。 – 2012-08-14 09:01:15