代码之家  ›  专栏  ›  技术社区  ›  Ryan Elkins

在Java中请求URL时忽略证书错误

  •  2
  • Ryan Elkins  · 技术社区  · 14 年前

    我正在尝试打印一个URL(完全不涉及浏览器),但该URL当前抛出以下内容:

    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
    

    我使用JEditorPane的setPage方法调用URL,该方法仅将URL作为参数。假设我不能在服务器端更改任何内容,并且仍然需要访问此资源,那么我将如何忽略证书错误(或其他使我达到目标的内容)?

    通过浏览器访问此URL会告诉我该网站不受信任,并询问我是否要继续。

    5 回复  |  直到 14 年前
        1
  •  10
  •   erickson    14 年前

    延伸 JEditorPane 覆盖 getStream() 方法。

    open a URLConnection . HttpsURLConnection . 如果是的话, initialize 你的 own SSLContext 有一个习惯 X509TrustManager 那不起任何作用 checks. Get the context's SSLSocketFactory set it as the socket factory 为了连接。然后返回 InputStream from the connection.

    这将挫败运行时保护用户免受提供恶意软件的欺骗站点的任何尝试。如果那是 真正地 你想要什么…

        2
  •  3
  •   ring bearer    14 年前

    这可能是因为您的密钥库中的证书用于访问目标 HTTPS URL与来自服务器的证书不匹配。

    您需要将证书导入到JVM的密钥库中。

    keytool -importkeystore -srckeystore /path/to/custom/keystore -destkeystore $JAVA_HOME/jre/lib/security/cacerts

    假设您使用的是来自 $JAVA_HOME

        3
  •  2
  •   systempuntoout    14 年前

    我会用埃里克森溶液。

    用途:

    java InstallCert YourHost
    

    创建 jssecacerts公司 文件

    $JAVA_HOME/jre/lib/security 
    
        4
  •  0
  •   Nick    14 年前

    如果您每次都要联系的是同一台服务器,那么只需将此证书添加到信任存储中,就可以信任它。我不会将其添加到默认的cacerts文件中,但是您可以创建自己的密钥库,并通过javax.net.ssl.trustStore系统属性指定它。

    最后,如果您想完全禁用PKIX检查(只有当您知道这会严重损害安全性时才应该这样做),唯一的方法是实现您自己的SSL上下文和信任管理器,正如erickson所建议的那样。

        5
  •  0
  •   Ian Robertson    10 年前

    另一个相关的注意事项是:我与WCF.netweb服务的相互认证在我的测试环境中引起了问题。我在代码中添加了这两行代码来解决问题,并允许我解决问题:

    //Uncomment this in case server demands some unsafe operations       
    System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");       
    
    //this command allowed me to see the detailed debugger log for detecting the
    //issue with my certs.
    System.setProperty("javax.net.debug","all");
    

    Transport Layer Security (TLS) Renegotiation Issue Readme