启用到java客户端的CA证书握手
我们有一个小型java客户端,它使用QuickFix库连接bloomberg提要。这基本上是使用fix协议。应用程序工作正常,但最近ssl证书过期,彭博社发送了一个新的key.pem、certificate.pem文件和CACert.pem文件。应用程序正在使用java证书存储进行ssl握手。因此,我尝试了以下步骤来删除密钥库并使用新密钥恢复密钥库启用到java客户端的CA证书握手,java,ssl,Java,Ssl,我们有一个小型java客户端,它使用QuickFix库连接bloomberg提要。这基本上是使用fix协议。应用程序工作正常,但最近ssl证书过期,彭博社发送了一个新的key.pem、certificate.pem文件和CACert.pem文件。应用程序正在使用java证书存储进行ssl握手。因此,我尝试了以下步骤来删除密钥库并使用新密钥恢复密钥库 删除密钥存储 rm-rf/root/keystore.ImportKey 将key.pem和cert.pem文件转换为der二进制格式 将密钥和证书
openssl rsa -in key.pem -pubout
-----开始公钥------miibijanbgkqhkig9w0baqefaocaq8amiibcgkcaqea6dmx7gxbetamdqarwhxq
d46c7oSrSjATTd1/KHvS7KojHZV9XE3d4Foh1rP1czla6uxMV5p0jSPq4RzWOZlY
I8TZJMXPHZ9ONDPURETMKKB1CYVZDYUJUAAN4KDUB/OWP+ubUS24DTZ+/RJ7SUX/
/UOcWgg232sc/sg9pcyysCRMXJUsPe5a94ztboOWr987+dnjl/t1atNRCvVObkqG
Fq6pmsKKjTR0Cl1i5wFK8G8cak/CNGABHNMCB6V5UDZGTT8QoSQG0MB3TYHXIA
MnhA7SBc7cu6NEsizxLMM34G+thDxg/s0RobuBirz5KZl3GC1KgR50Ggm//5/vJv
uwIDAQAB
-----结束公钥-----
在接受的答案后添加。
请在dave的回复中找到我最后的评论。这是更多的事情和细节来解决这个问题 Meta:不是一个明确或完整的答案,但评论太多了 好的,
openssl s_client
显示您的密钥和(声称的)证书之间不匹配。您需要弄清楚是否确实存在不匹配,或者您的数据只是结构异常
查看certificate.pem
文件,通常使用类似more
或less
的寻呼机,因为它可能很长;它应至少包含一个行块,每个行块:
- 以一行开始,可能插入了
李>X.509
- 然后是几行(通常为10-20行,但可能更多),完全由字母、数字、加号
和斜杠+
组成,并且通常在末尾等号/
;及=
- 最后一行
,可能是----结束证书------
李>X.509
----BEGIN
和base64和----END
块不是用于[X.509]证书的
,那么有些东西确实是乱七八糟的;发布详细信息
如果有一个证书(并且它与密钥不匹配),那么提供给您的数据是错误的。回到源头,让他们修复它。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
如果它说没有与私钥匹配的证书
您的certificate.pem
文件可能是错误的,或者是由于某种原因而损坏,无法使用。请将其发布给我们,让我们尝试找出答案,最好只使用私钥的公共部分,即openssl rsa-in key.pem-pubout
,或者返回您的源代码
如果pkcs12-导出
成功,则您的证书.pem确实包含必要的证书,但不是按照s_客户机
要求的常规顺序,并且您使用的过程也隐式要求。现在,您只需使用
keytool -importkeystore -srcstore temp.p12 -srcstoretype pkcs12 -deststore good.jks
如果您需要密钥库中的CAcert,请在此文件上执行keytool-import-file CAcert.pem
步骤。使用结果。“CA验证失败”--您忘记了包含错误消息和堆栈跟踪。在我这边,它记录为无法连接。从服务器端验证它是CACert验证失败。我是java开发人员,我不是ssl方面的专家。我只是按照我读到的做了。如果你有或可以获得openssl,请尝试openssl s_客户端-连接主机:port-key-key.pem-cert cert.pem-CAfile CACert.pem
——如果它连接,只需键入Q return退出,而不发送任何虚假数据。这将提供更多信息,可能包括关于错误的信息;补充你的问题。否则,请尝试使用syspropjavax.net.debug=ssl运行Java客户机;这将提供大量跟踪输出,其中一些是有用的。或者更好的是一个普通的Java客户端,它只做新的SSLSocket(主机、端口)
,并让任何异常进入默认处理程序。@dave\u thompson\u 085我将结果添加到问题中。谢谢。正如我指出的,对于s_客户机
使用PEM格式密钥和证书文件(您自己的和他们的CA)(一些openssl命令行操作处理不同的格式,但一些包括s_客户机
仅处理PEM。)它不提供证书匹配私钥错误。我查了一下酒吧的钥匙,然后贴到了问题上。谢谢你,伙计。@ambarox我指的是certificate.pem(“post it”是对上一句主题的引用)和privatekey中的public部分——因为这是
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
openssl rsa -in key.pem -pubout
openssl pkcs12 -export -in certificate.pem -inkey key.pem -out temp.p12
# and type (twice) a suitable password, at least 6 characters
keytool -importkeystore -srcstore temp.p12 -srcstoretype pkcs12 -deststore good.jks