博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用java https发送请求
阅读量:4572 次
发布时间:2019-06-08

本文共 3432 字,大约阅读时间需要 11 分钟。

在网上找了好多例子,但是都没有我想要的。我的要求是,程序可以自动完成证书导入然后与服务器交换数据。

网上的例子是可以工作的,前提是要访问的网站的证书已经导入到本机。但是作为java的访问一个未知的https网站,不可能都手动的导入进去,所以这些例子不太好,但是又没有找到合适的,有的也不能工作,我研究一下争取可以发一个可以傻瓜直接运行的例子。

 

下边这个例子是可以直接运行的,也是我这次任务所要完成的,至于具体的原理鄙人也不知,总之先比葫芦画瓢等随后在慢慢剖析。

 貌似对这样的可以通过的代码有点感觉就是,java有一个默认的cert checker是需要你本机有目标网站的证书,如果没有就会抛出异常,但是在我们这里,我们自己定义了一个cerrt checker去替换默认的,我们这里的实现也是对于检查什么都没做,所以这样的code对于任何的一个https网站都是可以通过的,这也貌似是code的简单原理。。

 

package test;import java.net.URL;import java.security.cert.Certificate;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import javax.net.ssl.HostnameVerifier;import javax.net.ssl.HttpsURLConnection;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSession;import javax.net.ssl.TrustManager;import javax.net.ssl.X509TrustManager;public class HttpsTest {    public static void main(String[] args) {        new HttpsTest().doMain();        log("DONE");    }        public void doMain() {        String hsUrl = "https://localhost:8443/testApp/hel.jsp";        hsUrl = "https://google.com";        hsUrl = "https://vip1.icbc.com.cn/icbc/perbank/index.jsp";        URL url ;                try {            url = new URL(hsUrl);            HttpsURLConnection con = (HttpsURLConnection) url.openConnection();                        X509TrustManager xtm = new X509TrustManager() {                @Override                public X509Certificate[] getAcceptedIssuers() {                    // TODO Auto-generated method stub                    return null;                }                                @Override                public void checkServerTrusted(X509Certificate[] arg0, String arg1)                        throws CertificateException {                    // TODO Auto-generated method stub                                    }                                @Override                public void checkClientTrusted(X509Certificate[] arg0, String arg1)                        throws CertificateException {                    // TODO Auto-generated method stub                                    }            };                        TrustManager[] tm = { xtm };                        SSLContext ctx = SSLContext.getInstance("TLS");            ctx.init(null, tm, null);                        con.setSSLSocketFactory(ctx.getSocketFactory());            con.setHostnameVerifier(new HostnameVerifier() {                @Override                public boolean verify(String arg0, SSLSession arg1) {                    return true;                }            });                                    log(con.getResponseCode());            log(con.getCipherSuite());            log("");            Certificate[] certs = con.getServerCertificates();                        int certNum = 1;                        for(Certificate cert : certs) {                X509Certificate xcert = (X509Certificate) cert;                log("Cert No. " + certNum ++);                log(xcert.getType());                log(xcert.getPublicKey().getAlgorithm());                log(xcert.getIssuerDN());                log(xcert.getIssuerDN());                log(xcert.getNotAfter());                log(xcert.getNotBefore());                log("");            }                    } catch (Exception e) {            e.printStackTrace();        }            }        static void log(Object o) {        System.out.println(o);    }}

 

 

 

 

 

转载于:https://www.cnblogs.com/martinzh/archive/2012/09/19/2693639.html

你可能感兴趣的文章
VBA中Dictionary对象使用(Key,Value)
查看>>
Shell脚本中计算字符串长度的5种方法
查看>>
laravel 查询随机数据
查看>>
cocos2dx-3.2 笔记 - 点击事件
查看>>
VS2017简单使用
查看>>
[2015编程之美] 资格赛C
查看>>
步进电机驱动
查看>>
C++模板
查看>>
C#--正则匹配
查看>>
5.30 考试修改+总结
查看>>
BA-设计施工调试流程
查看>>
C#-CLR各版本特点
查看>>
css3背景透明文字不透明
查看>>
实验四
查看>>
C++学习--应用篇(Windows/Linux)(书籍推荐及分享)
查看>>
金山快盘有Linux版了
查看>>
Git tag 给当前分支打标签
查看>>
继承和组合(转)
查看>>
mssql sqlserver 取消数值四舍五入的方法分享
查看>>
[记录] JavaScript 中的事件分类
查看>>