0

我的 ActiveX 组件使用 WinInet.dll 并使用 SSL 证书颁发机构与服务器建立 SSL 连接。

如果它不在 IE 进程中,它总是与服务器进行完整的 SSL 握手。而且我找不到任何方法来重用 Client Hello 中的 SessionID 标头来进行简短的 SSL 握手。

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

看起来 IE 对我的连接应用了其他设置。有人知道这些附加设置吗?任何人都可以建议我一些技巧来解决这个问题吗?

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


我想我应该在这里澄清一下:

  1. 我的 ActiveX 在这两种情况下(在 IE 进程上下文和非 IE 进程上下文中)肯定都使用 WinInet.dll。

  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 握手场景:full 表示非 IE 进程,缩写表示 IE 进程。在 MSDN 博客http://blogs.msdn.com/b/huizhu/archive/2009/12/17/ssl-_2f00_tls-full-handshake-vs.-abbreviated-handshake.aspx中查看有关这些场景的更多信息

希望现在更清楚了。

4

1 回答 1

1

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

于 2012-08-13T20:46:51.087 回答