Java 到HTTPS URL的连接超时

Java 到HTTPS URL的连接超时,java,ssl,https,Java,Ssl,Https,我需要忽略Java中的所有SSL证书,但我一辈子都无法让它工作。我已经浏览了下面列出的页面,但是在每个https链接上似乎都不起作用 stackoverflow.com/questions/19517538/ignoring-ssl-certificate-in-apache-httpclient-4-3 stackoverflow.com/questions/13470998/ignoring-ssl-validation-in-java stackoverflow.com/questions

我需要忽略Java中的所有SSL证书,但我一辈子都无法让它工作。我已经浏览了下面列出的页面,但是在每个https链接上似乎都不起作用

stackoverflow.com/questions/19517538/ignoring-ssl-certificate-in-apache-httpclient-4-3
stackoverflow.com/questions/13470998/ignoring-ssl-validation-in-java
stackoverflow.com/questions/12060250/ignore-ssl-certificate-errors-with-java
stackoverflow.com/questions/2694281/ignore-certificate-errors-when-requesting-a-url-in-java
stackoverflow.com/questions/6681969/java-ignore-certificate-validation
www.nakov.com/blog/2009/07/16/disable-certificate-validation-in-java-ssl-connections/
code.google.com/p/misc-utils/wiki/JavaHttpsUrl
www.exampledepot.8waytrips.com/egs/javax.net.ssl/TrustAll.html
www.obsidianscheduler.com/blog/ignoring-self-signed-certificates-in-java/
java.dzone.com/articles/how-ignore-cert-and-host-name
gist.github.com/henrik242/1510165
我有一个很好的理由需要这样做,所以不要担心,但我真的需要能够做到这一点。基本上,我需要浏览一个内部https链接列表,并检查它们是否仍然有效,并且没有断开的链接。有些链接可以正常工作,因为Java代码忽略了证书,可以返回HTTP响应头,但有些链接只是超时,即使它们在我的web浏览器中工作正常。所有这些链接都是公司内部链接

我尝试过使用HttpsURLConnection以及HttpGet和HttpClient。是否有其他我没有想到的东西,或者与Java无关的东西可能导致页面超时?我只是想确保链接的URL存在。以下是我得到的例外情况

使用HttpGet/SSLContextBuilder/poolighttpclientconnectionmanager:

org.apache.http.conn.HttpHostConnectException: Connect to -removed- [-removed-] failed: Connection timed out: connect
使用X509TrustManager的HttpsUrlConnection:

java.net.ConnectException: Connection timed out: connect
具体地说,我已经尝试了以下内容以及基于上面发布的链接的多种变体:

TrustManager[] trustAllCerts = new TrustManager[] {
    new X509TrustManager() {
        public void checkClientTrusted(X509Certificate[] chain, String authType) {}
        public void checkServerTrusted(X509Certificate[] chain, String authType) {}
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }
    }
};

// Install the all-trusting trust manager
javax.net.ssl.SSLContext sc = null;

try {
    sc = javax.net.ssl.SSLContext.getInstance("TLS");
    sc.init(null, trustAllCerts, new SecureRandom());

    // Create all-trusting host name verifier
    HostnameVerifier allHostsValid = new HostnameVerifier() {
        @Override
        public boolean verify(String arg0, SSLSession arg1) {
            return true;
        }
    };
    // Install the all-trusting host verifier
    HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
}

我还尝试了这一点以及几种变体:

连接超时与SSL证书没有任何关系

更有可能的是,您没有与浏览器相同的HTTP代理设置。您需要将系统属性
http.proxyHost
http.proxyPort
设置为浏览器使用的相同值。如果HTTPS代理设置与HTTP代理设置不同,请相应地设置
HTTPS.proxyHost
HTTPS.proxyPort


编辑以确保完整性:许多旧来源错误地提到了
proxySet
属性。JDK中没有也从来没有这样的属性。它出现在1997年短暂而久违的hotjavabean中。类似地,
http.proxySet
也不存在。证明:尝试将它们设置为
false
,在它们应该为
true的情况下,
并观察您的程序继续工作。

非常感谢,这正是它的用途:https代理。超时的站点看起来像内部URL,但它们位于外部云服务器上。我设置了http代理,但没有https。我会投票给你,但我没有足够的声望点数…@Triad,即使你现在不能投票,你也可以接受答案(答案分数旁边的勾号)。@Bruno谢谢,继续检查。