2012-03-15 247 views
7

我在ssl會話中使用客戶端證書來驗證用戶,但是我在緩存會話方面存在一些問題。 (我已配置IIS接受(不要求)客戶端證書)從javascript中清除ssl客戶端證書狀態

正常情況: 用戶訪問該頁面時是詢問證書。瀏覽器啓動證書選擇器,用戶選擇所需的證書(並在需要時插入PIN),並且所有事情都按照原樣進行。

情況是不能按預期工作: 用戶訪問頁面是證書被問。瀏覽器啓動證書選擇器,用戶選擇想要的證書,但取消PIN對話框。由於沒有發送證書,用戶被重定向到上一頁。用戶嘗試再次登錄,但由於最後一個SSL會話被緩存,它會自動失敗。

我解決了這個在ie中使用document.execCommand(「ClearAuthenticationCache」);但它仍然無法在FF和Chrome中使用,因爲它們不支持這種方法。無論如何要解決這個問題嗎?

回答

6

您可能會感興趣於this discussionthis Chromium issue。特別是,你應該嘗試:

if (window.crypto) window.crypto.logout(); 
+0

似乎它需要一段時間才能解決...在鉻中使用加密它給了我這個:TypeError:Object#沒有方法'註銷。 根據開發人員的說法,他們只會在DOMCrypto成熟後實施並且不會實施加密技術,因爲他們實施的很少。 http://www.mail-archive.com/[email protected]/msg16213.html 重要部分: 「我想重申,我們無意啓用此 功能,直到規範和標準過程更成熟爲止。試驗這個API應該對WebKit的其他消費者產生的影響很小 。 – RicardoSBA 2012-03-15 17:25:54

+1

正如@RuhollahDelpak所指出的,這不再適用於最近的版本。 – Bruno 2015-04-27 13:52:34

3

對於Chrome瀏覽器(至少在19.0.1084.30試用版),看來,如果你可以設置一個URL上,需要一個客戶端證書,但拒絕所有證書相同的主機名,那麼向該URL發送請求將具有與window.crypto.logout()相同的效果。例如,如果/ssl_logout/是專門配置的網址:(使用含有src="/ssl_logout/"作品的iframeimg一個頁面,太)

var xmlHttp = new XMLHttpRequest(); 
xmlHttp.onreadystatechange = function() { 
    // put any actions to carry out upon logout here 
}; 
xmlHttp.open("GET", "/ssl_logout/", true); 
xmlHttp.send(); 

+0

你會如何在apache或nginx中配置這樣一個url? – 2014-09-19 20:44:51

+0

這甚至可能嗎? SSL協商發生在URL傳輸之前,AFAIK。 – 2014-09-29 13:21:54

+1

@DavidBalažic:[SSLVerifyClient的Apache文檔](http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#sslverifyclient)表示它可以在目錄或.htaccess級別使用,所以它必須能夠在談判後做到這一點 - 我會想象談判發生了,連接建立了,Apache做了一些更多的工作,然後可以拒絕該證書,但是我對底層機制知之甚少HTTPS知道肯定或如何發生。我在發帖時證實我的答案有效(我認爲是使用Apache)。 – Isaac 2014-09-29 23:53:25

1

在IE6 +:

document.execCommand('ClearAuthenticationCache'); 
+0

如果用戶沒有選擇證書,這不起作用。他必須重新啓動瀏覽器。除非我不知道任何其他解決方案。 – 2014-09-29 14:34:40

相關問題