2011-03-09 106 views
6

我正在編寫一個小測試工具,它使用HttpWebRequest加載測試服務器。每次我嘗試調用HttpWebRequest.GetResponse()時,我都希望爲它創建一個新的SSL會話,而不是使用緩存中的那個會話。注意:我正在提供客戶端證書,併爲SSL會話使用相互身份驗證。如何清除客戶端.Net SSL會話緩存

有沒有辦法清除http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.clientcertificates.aspx中提到的SSL會話緩存?

回答

1

我認爲你正在尋找的HttpRequestCacheLevel枚舉值NoCacheNoStore

http://msdn.microsoft.com/en-us/library/system.net.cache.httprequestcachelevel.aspx

然後,您可以覆蓋HttpRequestCachePolicy

http://msdn.microsoft.com/en-us/library/system.net.webrequest.cachepolicy.aspx

+2

但這是HTTP級別的緩存,不是嗎? OP請求清除_SSL session_緩存(它保留臨時的每會話密鑰,加速初始SSL握手),AFAICT。 – Mormegil 2012-03-27 14:15:03

3

的的ServicePoint類有一個內部方法稱爲ReleaseAllConnectionGroups那在所有連接上設置KeepAlive = false然後釋放它們。 This answer包含所有需要的反映,但在每個HttpWebRequest上設置KeepAlive = false將保持客戶端.Net SSL會話緩存清除。

SslEmptyCache可能需要清除caching of SSL-SessionID和/或由SCHANNEL在本機代碼級完成的票證。

+1

設置KeepAlive = false工作得很好。試過先設置HttpRequestCachePolicy,但它沒有效果。 – 2017-06-16 16:12:25