我的ActiveX组件使用WinInet.dll并使用SSL证书颁发机构与服务器建立SSL连接。
如果它不在IE进程中托管,它始终与服务器进行完全SSL握手。而且我找不到任何方法在Client Hello中重用SessionID标头来进行缩写SSL握手。
否则,如果我的ActiveX在IE进程中托管,则重新使用SessionID标头会自动运行。
看起来IE会对我的连接应用其他设置。有人知道这些额外的设置吗? 有人可以告诉我一些如何解决这个问题的建议吗?
P.S。它是Delphi项目,所以我不能使用WCF也无法移动到OpenSSL。
我想我应该在这里澄清一下:
我的ActiveX在两种情况下都使用WinInet.dll(在IE进程上下文和非IE进程上下文中)。
WinInet.dll执行SSL / TLS握手。我无法访问WinInet级别的SessionID标头,但IE有。
如果我的ActiveX托管在IE进程中,IE知道如何设置WinInet以使用以前的SessionID。 WinInet缩写为SSL / TLS握手。
如果我在非IE进程中使用WinInet.dll,则WinInet不会将SessionID用于Client Hello。 WinInet进行完整的SSL / TLS握手。
因此,我们在此处有两种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 :(得分:1)
Internet Explorer使用WinInet进行自己的连接。假设您的ActiveX是进程内对象,当它在IE内部托管时,WinInet只是在同一进程中与自己共享信息。当您的ActiveX托管在不使用WinInet的非IE进程中时,您不会得到它。