2011-05-24 52 views
2

我已經配置了一個Apache httpd的網站使用SSL客戶端證書,這樣只有誰已經在其網絡瀏覽器安裝了正確的證書,用戶可以訪問該網站。是否可以自動選擇正確的客戶端證書?

如果只安裝一個客戶端證書的Web瀏覽器會自動選擇(這是不是默認的,但它可以在某處設置對話框配置)。但是,如果用戶安裝了多個證書,則Web瀏覽器會顯示證書列表,用戶必須選擇合適的證書才能繼續。

的問題是:是否有配置的httpd發送提示,以便Web瀏覽器可以自動選擇所需的證書的方法嗎?

回答

1

我想說,由於證書的選擇是客戶端任務,因此客戶端無法通過服務器端使用此證書或證書。

2

SSL (TLS) protocol只允許指定服務器上的客戶端證書的兩個約束:

  1. 簽署的證書類型(RSA,DSA等)
  2. 的受信任的證書頒發機構(CA)客戶端證書

您可以使用"openssl s_client"來查看Apache服務器信任哪些CA用於客戶端證書。我不知道如何配置Apache來更改該列表(對不起),但我敢打賭有一種方法。因此,如果您可以將列表僅限於(比如說)您自己組織的CA,那麼您將盡一切可能允許Web瀏覽器自動選擇客戶端證書。

正如尤金說,瀏覽器是否真的這樣做,要由特定的瀏覽器。

+1

此外,服務器發送的列表僅僅是客戶端提示:服務器仍然可以自由選擇接受或拒絕接收到的任何證書,不管它是否來自列表中的CA. – Bruno 2011-05-27 02:30:03

1

除了@Nemo和@Eugene說的默認情況下,Apache Httpd會發送從它的SSLCACertificateFileSSLCACertificatePath配置指令中獲得的CA列表。

但是,您可以使用SSLCADNRequestFileSSLCADNRequestPath指令強制它在certificate_authorities中發送不同的列表,並將它們指向另一組證書。僅使用這些證書的主題DN(並在列表中發送)。如果你想強制某些名字,你甚至可以用你想要的任何名字自籤這些證書。我已經與SSLVerifyClient optional_no_ca試過這個(中聯,你可以得到客戶端發送證書的CA證書,該服務器實際上並沒有。(這不一定是有用的,但它的工作原理。)