我们有一个小型的java客户端,使用快速修复库连接bloomberg feed。这基本上是使用修复协议。应用程序运行正常,但最近ssl证书已过期,bloomberg发送了一个新的key.pem,certificate.pem文件和CACert.pem文件。应用程序正在使用java证书存储进行ssl hanshaking。所以我尝试了以下步骤删除密钥库并使用新密钥恢复密钥库。
rm -rf /root/keystore.ImportKey
openssl pkcs8 -topk8 -nocrypt -in key.pem -inform PEM -out key.der -outform DER openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER
user@host:# java ImportKey key.der cert.der Using keystore-file : /root/keystore.ImportKey One certificate, no chain. Key and certificate stored. Alias:importkey Password:importkey
./keytool -import -keystore /root/keystore.ImportKey -storepass importkey -alias cacertificates -file /etc/bloomburg-live/CAcert.pem
user@host:# ./keytool -list -keystore /root/keystore.ImportKey Enter keystore password: Keystore type: JKS Keystore provider: SUN Your keystore contains 2 entries cacertificates, Jun 15, 2016, trustedCertEntry, Certificate fingerprint (MD5): 30:23:CE:0A:57:FB:71:04:8F:D2:3F:CD:89:A6:46:11 importkey, Jun 15, 2016, PrivateKeyEntry, Certificate fingerprint (MD5): 00:19:35:14:3F:14:31:4D:99:83:F5:34:09:3D:C8:BD
仍然CA验证失败。我有什么遗漏或。有什么不同的方法来解决这个问题。请帮助我,我目前卡在这里。
更新 尝试下面的命令后
openssl s_client -connect host:port -key key.pem -cert certificate.pem -CAfile CAcert.pem
我收到以下错误消息。
错误设置私钥5265:错误:0B080074:x509证书 例程:X509_check_private_key:键值不匹配:x509_cmp.c:398:
请在执行openssl pubout命令后找到结果。
openssl rsa -in key.pem -pubout
-----开始公共密钥----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6dMX7GxbEtAmdQarwHXQ d46c7oSrSjATTd1 / KHvS7KojHZV9XE3d4Foh1rP1czla6uxMV5p0jSPq4RzWOZlY i8TzJMXPhz9onDPUErTmkKB1cYvzdYUjuAan4KduB / OWP + ubUS24DTZ + / RJ7SUX / / UOcWgg232sc / sg9pcyysCRMXJUsPe5a94ztboOWr987 + dnjl / t1atNRCvVObkqG Fq6pmsKKjTR0Cl1i5wFK8G8cak / cnGABhnmCBEP6v5udzgTt8QOSqg0Mb3TyhXia MnhA7SBc7cu6NEsizxLMM34G + thDxg / s0RobuBirz5KZl3GC1KgR50Ggm // 5 / vJv uwIDAQAB ----- END PUBLIC KEY -----
在接受的答案后添加。 请在dave的回答中找到我的最终评论。这是解决这个问题的更多事情和细节。
答案 0 :(得分:3)
好的,openssl s_client
显示您的密钥和您声明的证书之间不匹配。您需要确定是否确实存在不匹配,或者您的数据只是异常结构化。
查看certificate.pem
文件,通常使用more
或less
等寻呼机,因为它可能很长;它应该包含至少一个行(每个):
-----BEGIN CERTIFICATE-----
的行X.509
开头; +
和斜杠/
组成,通常等号=
结束;和-----END CERTIFICATE-----
,可能X.509
。 每个块都是证书。在这些可能有用的块之前,之间或之后可能还有其他数据(例如&# 39;友好的名字'或者#key;')或者可能是无用的甚至是垃圾。如果-----BEGIN
和base64以及-----END
的任何块都不是[X.509] CERTIFICATE
,那么事情就会搞砸了。发布详情。
如果有一个证书(并且它与密钥不匹配),那么您提供的数据就很糟糕。回到源代码并让他们修复它。 Java标准keytool
阻止您使用私钥来放置不匹配的证书,但ImportKey
不是标准的,我不知道它的作用。
如果有多个证书,最简单的方法是让openssl尝试对它们进行排序。做
openssl pkcs12 -export -in certificate.pem -inkey key.pem -out temp.p12
# and type (twice) a suitable password, at least 6 characters
如果它显示No certificate matches private key
您的certificate.pem
文件错误或损坏,以某种方式使其无法使用。请将它发布给我们试图找出,最好只使用您的私钥的公共部分,即openssl rsa -in key.pem -pubout
,或者回到您的来源。
如果pkcs12 -export
成功,那么您的certificate.pem
确实包含了s_client
所要求的传统顺序所必需的证书,并且您使用的过程也需要隐式。现在您可以使用
keytool -importkeystore -srcstore temp.p12 -srcstoretype pkcs12 -deststore good.jks
如果您需要在密钥库中使用其CAcert,请对此文件执行keytool -import -file CAcert.pem
步骤。使用结果。