Java-Java SSL证书访问https链接

发布于 2016-10-31 17:44:29 字数 222 浏览 1244 评论 2

对于没有证书的网站,例如https://www.google.com.hk,可以直接用

URL url = new URL("https://www.google.com.hk");
HttpsUrlConnection conn = (HttpsUrlConnection)url.openConnection();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

泛泛之交 2017-04-18 21:02:01

怎样写代码的话就太长了 建议LZ去买本书 o'reilly的Java网络编程
或者LZ去看下SSLSocket的使用方式

泛泛之交 2016-12-31 09:52:57

整这个代码真有够麻烦的。
先说原理吧,https网站服务器都是有证书的! 之所以google和12306表现不一,是因为12306的证书是什么 “SRCA”,铁道部自己的CA服务器签发的,并不被浏览器或操作系统(至少我的firefox就不认它)广泛接受!
Google的证书也是Google的CA服务器签发的,不过被认可,没办法。。。
建行CCB的证书是VeriSign签发的,这个基本所有的地方都认。

好了,解决方法:1.把这个SRCA签发的证书导入系统。这个windows下导入IE即可,具体不说了;2.我们在程序中 不让它去验证 服务器证书(这种方法仅用于测试!)

代码如下,给出一个空的TrustManager来绕过SSL 服务器证书验证:

@Test
public void test14() throws Exception {
URL url = new URL("https://dynamic.12306.cn/otsweb/main.jsp");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
SSLContext sc = SSLContext.getInstance("SSL");
TrustManager[] tmArr={new X509TrustManager(){
@Override
public void checkClientTrusted(X509Certificate[] paramArrayOfX509Certificate,String paramString) throws CertificateException{}
@Override
public void checkServerTrusted(X509Certificate[] paramArrayOfX509Certificate,String paramString) throws CertificateException {}
@Override
public X509Certificate[] getAcceptedIssuers() {return null;}
}};
sc.init(null, tmArr, new SecureRandom());
conn.setSSLSocketFactory(sc.getSocketFactory());
conn.connect();
try(BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())) ){
String input;
while ((input = br.readLine()) != null)
System.out.println(input);
}
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文