代码之家  ›  专栏  ›  技术社区  ›  Shay Guy

如何有效地使用IntelliJ的resources文件夹中的JKS文件?

  •  0
  • Shay Guy  · 技术社区  · 8 年前

    javax.net.ssl.SSLHandshakeException ,所以我保存了该站点的安全证书并制作了一个JKS文件。因为我不能保证JVM将运行最终的JAR文件,所以我认为最好将JKS文件保存在resources文件夹中并将其加载到程序中。然而,当我测试这个函数时:

    fun getHomePage(): Connection.Response {
        System.setProperty("javax.net.ssl.trustStore", "/resources/certificate.jks")
        return Jsoup.connect("https://www.something.com/")
                .method(Connection.Method.GET)
                .execute()
    }
    

    …我仍然得到以下错误:

    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    
        at java.base/sun.security.ssl.Alerts.getSSLException(Alerts.java:198)
        at java.base/sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1974)
        at java.base/sun.security.ssl.Handshaker.fatalSE(Handshaker.java:345)
        at java.base/sun.security.ssl.Handshaker.fatalSE(Handshaker.java:339)
        at java.base/sun.security.ssl.ClientHandshaker.checkServerCerts(ClientHandshaker.java:1968)
        at java.base/sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1777)
        at java.base/sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:264)
        at java.base/sun.security.ssl.Handshaker.processLoop(Handshaker.java:1098)
        at java.base/sun.security.ssl.Handshaker.processRecord(Handshaker.java:1026)
        at java.base/sun.security.ssl.SSLSocketImpl.processInputRecord(SSLSocketImpl.java:1137)
        at java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1074)
        at java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)
        at java.base/sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1402)
        at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1429)
        at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413)
        at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567)
        at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
        at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:163)
        at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:746)
        at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:722)
        at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:306)
    [...]
    

    System.setProperty("javax.net.ssl.trustStore", "/resources/certificate.jks") (由 https://stackoverflow.com/a/7745706/990549 )在这里。我只是不知道是什么。

    0 回复  |  直到 8 年前