2011-05-24 51 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证书,该服务器实际上并没有。(这不一定是有用的,但它的工作原理。)