2011-01-05 137 views
2

这里是我的代码的java给错误的HTTPS请求

 URL url = new URL(requestUrl); 
     HttpsURLConnection conn = (HttpsURLConnection)url.openConnection(); 
     BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

我得到以下异常

java.security.cert.CertificateException: No name matching www.sandbox.freelancer.com found 

按照我知道这个网站没有正确的证书。但任何我必须登录到这个网站。任何建议将不胜感激。谢谢。

回答

3

创建一个不验证证书链

TrustManager[] trustAllCerts = new TrustManager[]{ 
    new X509TrustManager() { 
     public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
      return null; 
     } 
     public void checkClientTrusted(
      java.security.cert.X509Certificate[] certs, String authType) { 
     } 
     public void checkServerTrusted(
      java.security.cert.X509Certificate[] certs, String authType) { 
     } 
    } 
}; 

信任管理器安装所有信任信任管理器

try { 
    SSLContext sc = SSLContext.getInstance("SSL"); 
    sc.init(null, trustAllCerts, new java.security.SecureRandom()); 
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
} catch (Exception e) { 
} 

现在访问HTTPS URL

try { 
    URL url = new URL("https://www.sandbox.freelancer.com"); 
    HttpsURLConnection conn = (HttpsURLConnection)url.openConnection(); 
    BufferedReader br = 
     new BufferedReader(new InputStreamReader(conn.getInputStream())); 

} catch (MalformedURLException e) { 
} 
+0

为什么不创建只信任该特定证书的信任管理器,并对所有其他证书进行默认检查? – 2011-01-06 00:11:26

+0

@GregS是的,这可能已经完成了,但我认为这不会解决问题,如果证书有一个不受信任的根证书颁发机构链。 – 2011-01-06 16:41:37

1

您可以保存证书(在Firefox中获取),然后将证书添加到密钥存储中,然后配置您的应用使用该密钥存储。

+0

我可以得到证书直接从网络而不使用Firefox? – Barun 2011-01-05 16:17:51