Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssl 使用PFX文件进行双向授权_Ssl_Certificate_Mutual Authentication - Fatal编程技术网

Ssl 使用PFX文件进行双向授权

Ssl 使用PFX文件进行双向授权,ssl,certificate,mutual-authentication,Ssl,Certificate,Mutual Authentication,我对双向身份验证有问题。我使用tomcat6作为服务器,作为客户端,我尝试IE、Firefox和我自己的java应用程序 使用其他人提供给我的PFX证书时出现问题。我必须将它们用作客户端证书,所以我只需将其添加到服务器上的受信任证书中,并在用户证书中的浏览器上使用它。问题是我收到了坏证书警报 通过为服务器和客户端生成自己的证书,并在两个密钥库中添加受信任的公钥,我成功地实现了双向ssl 当我查看wireshark日志时,我看到服务器发送了良好的证书请求,但客户端发送的是空证书(长度为11字节的数

我对双向身份验证有问题。我使用tomcat6作为服务器,作为客户端,我尝试IE、Firefox和我自己的java应用程序

使用其他人提供给我的PFX证书时出现问题。我必须将它们用作客户端证书,所以我只需将其添加到服务器上的受信任证书中,并在用户证书中的浏览器上使用它。问题是我收到了坏证书警报

通过为服务器和客户端生成自己的证书,并在两个密钥库中添加受信任的公钥,我成功地实现了双向ssl

当我查看wireshark日志时,我看到服务器发送了良好的证书请求,但客户端发送的是空证书(长度为11字节的数据包),而不是我使用自己生成的证书时发送的500多字节


有什么问题吗?为什么客户不发送好的证书(

首先要检查的是,Tomcat是否正确配置为从客户端请求有关路径的证书。对于Tomcat 6,这意味着您应该在conf/server.xml中配置一个连接器,如下所示:

<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设置,最重要的是检查truststore

下一步是检查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的_客户端进行故障排除是值得的,因为您通常会从中获得更多的故障排除信息。为此,您必须将密钥与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_客户端并收到一个提示,提示我的客户端证书已过期(在其他任何地方都没有记录或输出),我才发现这个问题


此外,您可能想强烈考虑将配置转换为使用Apache在Tomcat—Apache上是更灵活的,并且在与SSTCAT相关的SSL信任度方面给您更多的反馈。

仔细查看您的客户端证书,特别是X509V3扩展“密钥使用”和“扩展密钥使用”。。它们可能被标记为不受信任,无法进行客户端身份验证

使用:

此证书仅针对服务器身份验证(普通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..]

如果是这种情况,您将不得不要求获得一个新的签名证书,该证书被标记为用于客户端身份验证。

谢谢,我的设置都很好,但无论如何,感谢您再次显示正确的连接器配置:)我将在明天早上检查s_客户端,准备好接受反馈。我已经成功地与openssl s_客户端建立了安全连接。为什么我不能通过firefox实现呢?(当我向firefox添加证书时,我指向pfx文件,他似乎只接受pkcs12文件)s_client显示的唯一错误是18(自签名证书),这是绝对正确的,因为服务器证书确实是自签名的。无论如何,他在GET/中没有问题,当查看wireshark日志时,一切都很顺利。。。为什么具有相同pfx文件的firefox和internet explorer出现问题?我甚至不尝试打开我的java应用程序,因为它更不可靠。只在open_ssl上工作的证书是长的(超过1800字节)到处工作的证书是短的(大约750字节),而且:唯一的通信是坏的_证书(因为空的证书TLS数据包)你已经为客户端身份验证设置了服务器,你说呢?你的连接器有什么类型的密钥库?jks,我认为没有问题,因为它使用我自己生成的密钥,并且使用带有pfx密钥的openssl s_客户端。只是使用firefox、ie(windows应用商店中的密钥)或指向p12密钥的java应用程序无法使用pfx您描述它的方式pfx是空的或已损坏。您是否尝试查看其内容?很好!完全是!它可以成功导入到windows应用商店,可以导入到firefox,甚至可以在java应用程序中读取,可以查看、验证等等。更重要的是,我可以从中提取pem,并通过openssl s_客户端使用它来建立连接!它看起来非常好,但由于某些原因,它并不是作为对firefox/IE/java应用程序的证书请求的响应发送的,只有openssl s_客户端能够很好地使用它:/将问题场景的调试流程放在OP中
$ 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..]