WinInet + SSL:无法进行缩写SSL握手

时间:2012-08-13 15:19:51

标签: delphi ssl ssl-certificate sessionid wininet

我的ActiveX组件使用WinInet.dll并使用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托管在IE进程中,IE知道如何设置WinInet以使用以前的SessionID。 WinInet缩写为SSL / TLS握手。

  4. 如果我在非IE进程中使用WinInet.dll,则WinInet不会将SessionID用于Client Hello。 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

  6. 中查看有关这些方案的更多信息

    希望现在更清楚。

1 个答案:

答案 0 :(得分:1)

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