Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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 PKIX路径生成失败:我向carcert添加的证书仍然失败_Java_Exception_Keytool_Sslhandshakeexception_Pkix - Fatal编程技术网

Java PKIX路径生成失败:我向carcert添加的证书仍然失败

Java PKIX路径生成失败:我向carcert添加的证书仍然失败,java,exception,keytool,sslhandshakeexception,pkix,Java,Exception,Keytool,Sslhandshakeexception,Pkix,我面临PKIX路径构建失败的问题,这是我尝试过的 我转到了我试图访问的目标URL (eg -> https://localdevchannel.master.info/Gate/CustomerManagement/rest/resources/search) 我点击“锁定”图标并导出证书 我在命令下跑 keytool-importcert-file sec.cer-storepass changeit-keystore“C:/Program Files/Java/jdk-11.0.

我面临PKIX路径构建失败的问题,这是我尝试过的

  • 我转到了我试图访问的目标URL

     (eg -> https://localdevchannel.master.info/Gate/CustomerManagement/rest/resources/search)
    
    我点击“锁定”图标并导出证书

  • 我在命令下跑

    keytool-importcert-file sec.cer-storepass changeit-keystore“C:/Program Files/Java/jdk-11.0.2/jdk-11.0.2/lib/security/cacerts”-别名secCert

  • 证书已成功放置。但我仍然面临这个问题。请帮帮我,我做错了什么

    javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    
  • 如果您的证书已过期,或者您的存储中不存在证书,或者您更新了另一个cacert文件,并且您的java/和/或应用程序正在查看/使用另一个cacert文件,则会出现此异常

    1-检查您的cacert文件,查看是否已添加证书 它的别名在那里

    从JDK/jre/bin中,可以找到keytool.exe 您可以按如下方式调用它来读取cacerts文件:

    susan@SE-00018098 /c/Program Files/Java/jdk1.7.0_80/jre/bin
    
    $ keytool.exe -list -keystore ../lib/security/cacerts
    Enter keystore password:
    Keystore type: jks
    Keystore provider: SUN
    
    Your keystore contains 92 entries
    
    digicertassuredidrootca, 2008-apr-16, trustedCertEntry,
    Certificate fingerprint (SHA1): 05:63:B8:63:0D:62:D7:5A:BB:C8:AB:1E:4B:DF:B5:A8:99:B2:4D:43
    trustcenterclass2caii, 2008-apr-29, trustedCertEntry,
    Certificate fingerprint (SHA1): AE:50:83:ED:7C:F4:5C:BC:8F:61:C6:21:FE:68:5D:79:42:21:15:6E
    thawtepremiumserverca, 2009-dec-11, trustedCertEntry,
    Certificate fingerprint (SHA1): E0:AB:05:94:20:72:54:93:05:60:62:02:36:70:F7:CD:2E:FC:66:66
    swisssignplatinumg2ca, 2008-okt-31, trustedCertEntry,
    
    2-如果是,是否过期?检查日期

    3-确认您的应用程序/java运行时是否正在使用cacert文件 您刚刚更新了(您是否安装了多个Java版本?您的(Java_主页)是什么

    ==========已编辑

    如果证书存在,并且没有过期,并且您100%确定它是正确的证书,那么您的应用程序/或容器可能没有查看cacert文件

    尝试下面的黑客:我认为这是一个黑客,因为你是硬编码。 在不同服务器上部署时可能存在/不存在的路径

    有许多方法可以创建您自己的信任库和密钥库 在应用程序中包含这些内容,然后您可以将它们合并到应用程序中 你的代码,但试试看其余的代码是否有效

    在https连接代码之前设置系统属性

    System.setProperty("javax.net.ssl.trustStore", "java_home_path/jre/lib/security/cacerts");  
    

    替换为cacerts文件的正确路径,然后重试。

    有用的堆栈流我有一个Java_home:指向jdk11 bin的路径。(因此没有出现多个Java版本)我试图打开cacerts文件,不确定命令为什么不起作用。密钥库“path”-列表不起作用。@horizon,我更新了答案。密码是change。我明天会试试这个,然后让你发帖。你有没有遇到过类似的情况?只是好奇?