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 ssl连接中的“证书上的名称错误”类型错误_Java_Ssl_X509certificate - Fatal编程技术网

忽略Java ssl连接中的“证书上的名称错误”类型错误

忽略Java ssl连接中的“证书上的名称错误”类型错误,java,ssl,x509certificate,Java,Ssl,X509certificate,我正在尝试使用https url建立连接,但由于它仍在测试中,url将重定向到测试环境,导致浏览器向用户提示一条消息,大致说明证书是可信的、有效的,但与域名不匹配,以及他们是否要继续。我很难用Java处理这个问题。我找到的所有答案都建议使用这样的信任管理器 TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { public X509Certificate[] getAcceptedIssu

我正在尝试使用https url建立连接,但由于它仍在测试中,url将重定向到测试环境,导致浏览器向用户提示一条消息,大致说明证书是可信的、有效的,但与域名不匹配,以及他们是否要继续。我很难用Java处理这个问题。我找到的所有答案都建议使用这样的信任管理器

TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
    public X509Certificate[] getAcceptedIssuers() {
        return null;
    }

    public void checkClientTrusted(X509Certificate[] certs, String authType) {
        return;
    }

    public void checkServerTrusted(X509Certificate[] certs, String authType) {
        return;
    }
}};

sslContext.init(kmf.getKeyManagers(), trustAllCerts, new SecureRandom());
但这并没有改变任何事情

身份验证涉及在读取客户端证书的私钥时输入密码,这在浏览器和我的应用程序中都可以相同且正确地工作。在此身份验证之后,浏览器中会弹出提示,或者连接在我的应用程序中返回“bad_certificate”错误。是否有其他方法可以完全忽略域验证或显示相同的提示


为清楚起见,我的应用程序不会导致出现密码提示,因为我在中编程了密码提示,我认为它只是源于windows检测到我的应用程序试图访问证书的私钥,因此我假设第二个提示也会以类似的方式工作,但我还没有找到实现这一点的任何参数

我要警告您,如果您这样做是为了测试代码,那么这不是正确的做法。浏览器通常会忽略错误并提示用户是否愿意继续,尽管存在问题。如果他决定继续,那么他拥有决定权。
在java应用程序中,如果使用JDK提供的默认SSLSocketFactory,则只有在SSL握手成功时,才会建立SSL会话。这是出于安全考虑。如果你需要像浏览器一样的功能;若要在不考虑安全问题的情况下继续,则需要有自己的自定义实现。或者最好不要使用SSL。

让我警告您,如果您这样做是为了测试代码,那么这不是正确的做法。浏览器通常会忽略错误并提示用户是否愿意继续,尽管存在问题。如果他决定继续,那么他拥有决定权。 在java应用程序中,如果使用JDK提供的默认SSLSocketFactory,则只有在SSL握手成功时,才会建立SSL会话。这是出于安全考虑。如果你需要像浏览器一样的功能;若要在不考虑安全问题的情况下继续,则需要有自己的自定义实现。或者最好不要使用SSL

是否有其他方法可以忽略域验证

对。请参阅Java的接口:

在握手过程中,如果URL的主机名和服务器的 标识主机名不匹配,验证机制可以调用 返回此接口的实现者,以确定此连接 应该允许

是否有其他方法可以忽略域验证

对。请参阅Java的接口:

在握手过程中,如果URL的主机名和服务器的 标识主机名不匹配,验证机制可以调用 返回此接口的实现者,以确定此连接 应该允许


这是一个有效的警告。然而,我对这一点投了反对票,认为这不是一个答案:在某些情况下,Java代码需要连接到合法的HTTPS URL,Java代码像任何好的浏览器一样告诉用户证书中的名称X与URL中的主机名Y不匹配,用户仍然希望建立连接。这是一个有效的警告。然而,我对这一点投了反对票,认为这不是一个答案:在某些情况下,Java代码需要连接到合法的HTTPS URL,就像任何好的浏览器一样,Java代码告诉用户证书中的名称X与URL中的主机名Y不匹配,并且用户仍然希望建立连接。