Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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
启用到java客户端的CA证书握手_Java_Ssl - Fatal编程技术网

启用到java客户端的CA证书握手

启用到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二进制格式 将密钥和证书

我们有一个小型java客户端,它使用QuickFix库连接bloomberg提要。这基本上是使用fix协议。应用程序工作正常,但最近ssl证书过期,彭博社发送了一个新的key.pem、certificate.pem文件和CACert.pem文件。应用程序正在使用java证书存储进行ssl握手。因此,我尝试了以下步骤来删除密钥库并使用新密钥恢复密钥库

  • 删除密钥存储 rm-rf/root/keystore.ImportKey

  • 将key.pem和cert.pem文件转换为der二进制格式
  • 将密钥和证书添加到java密钥存储
  • 然后我尝试将CACert.pem文件添加到java密钥库中
  • 对于错误跟踪,我将在java keytool中添加键列表 CA验证仍然失败。有什么我错过或错过的吗。有什么不同的方法来解决这个问题吗。请帮帮我,我现在被困在这里了

    更新 在尝试下命令后

    openssl s_客户端-连接主机:port-key-key.pem-cert certificate.pem -卡菲尔·卡塞特·佩姆

    我收到下面的错误消息

    设置私钥5265时出错:错误:0B080074:x509证书 例程:X509\u检查\u私钥:键值不匹配:X509\u cmp.c:398:

    请在执行openssl pubout命令后查找结果

    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
    每个块都是一个证书。在这些块之前、之间或之后可能还有其他有用的数据(例如“友好名称”或“密钥id”),也可能是无用的,甚至是垃圾。如果有任何
    ----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退出,而不发送任何虚假数据。这将提供更多信息,可能包括关于错误的信息;补充你的问题。否则,请尝试使用sysprop
    javax.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