Ssl 为相互身份验证设置客户端证书

Ssl 为相互身份验证设置客户端证书,ssl,Ssl,我正在尝试为我的web应用程序设置双向ssl相互身份验证。我目前还没有设置客户端,正在通过浏览器测试我的web服务 我在mac上使用keychain工具创建了一个客户端证书,并在Firefox中导入certificate.p12文件。我还有一个certificate.cert文件。据我所知,我需要将此证书文件添加到我的服务器信任库中 为此,我需要使用以下命令: keytool -import -trustcacerts -alias <hostname of DP> -file &l

我正在尝试为我的web应用程序设置双向ssl相互身份验证。我目前还没有设置客户端,正在通过浏览器测试我的web服务

我在mac上使用keychain工具创建了一个客户端证书,并在Firefox中导入certificate.p12文件。我还有一个certificate.cert文件。据我所知,我需要将此证书文件添加到我的服务器信任库中

为此,我需要使用以下命令:

keytool -import -trustcacerts -alias <hostname of DP> -file <your file.crt> -keystore <truststorefile>
keytool-import-trustcacerts-alias-file-keystore

但是,我应该添加什么作为系统的主机名?浏览器将向我的Web服务器显示什么主机名

首先,如果您拥有由知名CA(如Verisign、GoDaddy等)或本地受信任CA(如您的雇主)颁发的客户证书,您无需做任何事情。客户端将简单地向证书提供一个链,该链指向已经信任的CA

如果您已从自己的CA颁发客户端证书,则应仅将CA(根)证书添加到服务器信任库。然后,由该CA颁发的所有客户端证书都将被验证,无需进一步努力。如果按照惯例使CA证书长期有效,您甚至可以在服务器上不费吹灰之力地更新和/或替换客户端证书。如果您设置了CRL分发和/或OCSP,您可以自动撤销它们,尽管DIY CA并不总是希望这样做

如果您已经创建了自签名客户端证书,那么并且只有在那时您才需要将该特定证书添加到服务器信任库。尽管SSL/TLS服务器证书必须由服务器的主机名标识,但不需要客户端证书,并且CA证书(默认情况下,这些证书通常位于您的信任库中)从未将主机名作为主题(尽管某些扩展通常包含包含主机名的URL)。代码签名证书也不需要使用主机名


Java信任库中证书项的别名不需要是主机名;它只需要是唯一的,尽管它应该是证书主题的助记符。例如,如果您的客户证书是为名为Alice和Bob的用户(或者更可能是他们的PC或任何设备)提供的,您可以使用
Alice
Bob
作为别名。

首先,如果您拥有由知名CA颁发的客户证书(如Verisign、GoDaddy等)或本地受信任的证书(如您的雇主),您无需做任何事情。客户只需向证书提供一条链,该链将指向已受信任的CA

如果您已从自己的CA颁发客户端证书,则应添加CA(根)仅向服务器信任库颁发证书。然后,由该CA颁发的所有客户端证书都将在无需进一步努力的情况下进行验证。如果您按照惯例使CA证书长期有效,您甚至可以在服务器上不费吹灰之力地续订和/或替换客户端证书。并且,如果您设置了CRL分发和/或OCSP,您可以自动撤销这些证书DIY CAs并不总是想去努力

如果您已经创建了自签名客户端证书,那么并且只有在那时,您才需要将该特定证书添加到服务器信任库中。虽然SSL/TLS服务器证书必须由服务器的主机名标识,但客户端证书不需要和CA证书(默认情况下,这些证书通常位于您的信任库中)永远不要将主机名作为主题(尽管某些扩展通常包含包含主机名的URL)。代码签名证书也不需要使用主机名

Java truststore中证书项的别名不需要是主机名;它只需要是唯一的,尽管它应该是证书主题的助记符。例如,如果您的客户端证书是针对名为Alice和Bob的用户(或者更可能是他们的PC或任何设备)您可以使用
alice
bob
作为别名