我们的客户端需要使用双向 SSL 身份验证连接服务器。在我的例子中,我使用“keytool -genkey”生成 keystore 并使用“keytool -certreq”导出 csr 文件。服务器端获取我的 csr 文件并由 CA 签名,然后返回给我一个由 CA 和根 CA cer 签名的新 cer 文件。问题是我应该如何更新我的 keystore 以完成服务器端身份验证?这是我生成 keystore 的步骤。
keytool -genkey -alias client -keyalg RSA -keystore D://key/client.keystore -validity 3650
keytool -certreq -alias client -keystore D://key/client.keystore -file client.csr
使用 wireshark,我可以发现我的客户端发送了一个由我的 keystore 生成的自签名证书,但服务器端实际上将由 CA 作为客户端 cer 签名的 cer 文件导入到它的信任库中,这使得握手每次都失败。
PS:服务器的cer文件已经导入到我的truststore,所以问题只在客户端的cer文件上。 Here is the wireshake capture
您需要将签名的证书和链导入生成 key 对和 CSR 的同一 keystore ,使用相同的别名,不使用 -trustcacerts
选项。
但是您的捕获显示问题出在服务器证书上。甚至都没有要求客户证书,更不用说发送了。
我是一名优秀的程序员,十分优秀!