PFX文件的双向授权
我有双向认证问题。 我使用tomcat6作为服务器,并作为客户端尝试IE,Firefox和我自己的Java应用程序。
使用其他人给我的PFX证书会出现问题。 我必须将它们用作客户端证书,因此我只是将它添加到服务器上的可信证书并在用户证书中的浏览器中使用它。 问题是我得到bad_certificate警报。
我成功地通过为服务器和客户端生成自己的证书并在两个密钥库中添加公钥作为可信的方式来成功实现双向SSL。
当我看到wireshark日志时,我发现该服务器发送了很好的证书请求,但当我使用我自己生成的证书时,客户端发送空证书(11字节长度数据包)而不是500+字节。
可能是什么问题? 为什么客户没有发送好的证书? :(
那么,首先要检查的是,看看Tomcat是否正确地配置为从客户端请求相关路径的证书。 对于Tomcat 6,这意味着您应该在conf / server.xml中配置一个Connector,如下所示:
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="${user.home}/.keystore" keystorePass="password"
truststoreFile="conf/truststore" truststorePass="password"
clientAuth="true" sslProtocol="TLS" />
truststoreFile&truststorePass非常重要 - 如果只是在不包含这两个参数的情况下添加“clientAuth = true”,就会看到各种奇怪的行为(并且没有警告您做了任何错误)。 truststoreFile必须指向一个合法的JKS文件,该文件列出了您信任的用于签署客户端证书的CA. 如果Tomcat配置正确,浏览器应该弹出一个对话框给用户:“网站需要客户端证书”以及所有已导入浏览器的证书列表。 如果你没有看到这个,你的Tomcat设置有问题。
听起来你的设置正确,但值得仔细检查。 另外,如果您设置正确,如果您在wireshark中按专有名称列出受信任的CA,则会看到“证书请求”握手消息。 再一次,如果你没有看到这一点,请检查你的Tomcat设置,最重要的是信任库。
接下来的事情是检查PKCS12文件本身。 你可以这样做:
openssl pkcs12 -in [path-to-pkcs12-file] -nokeys | openssl x509 -noout -subject -issuer
确保发行人的专有名称与信任商店中的某个trustedCaCert条目匹配。 这对于使用Java keytool来说有点麻烦,但是您可以使用以下方法进行复选:
keytool -exportcert -keystore conf/truststore -alias [alias of trusted cert] | openssl x509 -noout -subject -inform der
如果所有这些检查出来,但仍然无法正常工作,则值得使用openssl的s_client进行故障排除,因为您通常会从中获得更多的故障排除信息。 为此,您必须将密钥与PKCS12文件中的证书分开:
openssl pkcs12 -in [PKCS12 file] -out [whatever].key
openssl s_client -tls1 -connect localhost:443 -cert [whatever].key -key [whatever].key
(您可以对“-cert”和“-key”参数使用相同的文件,因为openssl足够聪明,可以在源文件中查找“BEGIN CERTIFICATE”和“BEGIN RSA PRIVATE KEY”分隔符。 我有一个令人沮丧的问题,我无法弄清客户端证书,直到我使用s_client并得到一个提醒,说明我的客户端证书已过期(未记录或输出到其他地方)。
另外,您可能需要强烈考虑将您的配置转换为通过Tomcat使用Apache - Apache的灵活性更强,并且在涉及到SSL配置时比Apache有更多的反馈。
仔细查看您的客户端证书,特别是X509v3扩展“密钥使用”和“扩展密钥使用”。 它们可能被标记为不可信的客户端身份验证。
使用openssl命令行工具:
$ openssl pkcs12 -in server-only.pfx -nokeys | openssl x509 -noout -purpose
Enter Import Password:
MAC verified OK
Certificate purposes:
SSL client : No
SSL client CA : No
SSL server : Yes
SSL server CA : No
此证书仅用于服务器身份验证(正常HTTPS)。 有关完整的详细信息,请在openssl x509中使用-text选项:
$ openssl pkcs12 -in server-only.pfx -nokeys | openssl x509 -noout -text
[..snip..]
X509v3 Key Usage:
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication
[..snip..]
如果是这种情况,那么您将不得不要求获取标记为使用客户端身份验证的新签名证书。
链接地址: http://www.djcxy.com/p/21815.html