使用java https發送請求


在網上找了好多例子,但是都沒有我想要的。我的要求是,程序可以自動完成證書導入然后與服務器交換數據。

網上的例子是可以工作的,前提是要訪問的網站的證書已經導入到本機。但是作為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);
    }

}

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM