2012-08-13 29 views
0

我的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

回答

1

Internet Explorer使用WinInet作爲自己的連接。假設你的ActiveX是一個進程內對象,當它被託管在IE內部時,WinInet只是在同一個進程內與自己共享信息。當您的ActiveX託管在非IE進程中時,您自己並不使用WinInet。

+0

謝謝您的回覆,但我的ActiveX在這兩種情況下都使用WinInet。我更新我的問題更加清楚。 – 2012-08-14 09:01:15