【问题标题】:How to bypass CertificateException by Java?如何通过 Java 绕过 CertificateException?
【发布时间】:2013-11-25 10:54:52
【问题描述】:

我正在尝试向服务器发送请求,但它遇到了以下错误,因为我知道应该创建一个证书但不知道该怎么做。我找到了这个answer,但无法实现它。

java.security.cert.CertificateException: No subject alternative DNS name matching www.example.com found.

代码

        URL url = new URL("https://www.example.com:1897/services/myservice");

        HttpsURLConnection con = (HttpsURLConnection) url.openConnection();

        con.setRequestMethod("POST");
        con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        con.setDoOutput(true);
        con.setDoInput(true);

        OutputStream os = con.getOutputStream();
        m.marshal(auth, os);
        m.marshal(auth, System.out);

        os.flush();
        con.getResponseCode();

【问题讨论】:

    标签: java ssl https webservice-client


    【解决方案1】:

    服务器可能正在使用缺少适当扩展名的证书。您可以禁用主机名验证(这会产生安全问题),或者在服务器上安装适当的证书(如果不是您的服务器,这可能会很困难)。

    更具体地说,我猜服务器证书包含主题备用名称扩展名,但该扩展名不包含服务器的主机名,或者没有 SAN 扩展名和主题的通用名称属性名称与服务器不匹配。无论哪种情况,解决方案都是在 SAN 扩展中获取具有正确服务器主机名的证书。

    【讨论】:

    • 这是否意味着我需要要求他们在 SAN 扩展中使用正确的服务器主机名更新他们的证书?如果不是,你会解释更多或向我推荐几个来源以获得更多信息,谢谢
    • 是的,这就是你应该问他们的。但是,如果没有看到证书,很难确定。
    • 如果您给我您的电子邮件地址,我可以将证书发送给您。
    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多