java 使用ssl,tls 證書認(rèn)證

public class HttpsTest {

public static void test(Context context)throws Exception {

//獲得ssl上下文

? ? ? ? SSLContext sslContext = SSLContext.getInstance("TLS");

? ? ? ? //信任證書管理器

? ? ? ? TrustManagerFactory trustManager = TrustManagerFactory.getInstance("X509");

? ? ? ? //證書 第一種,導(dǎo)入成bks或者jks的證書

//? ? ? ? KeyStore keyStore = KeyStore.getInstance("BKS");

//? ? ? ? keyStore.load(context.getAssets().open("12306.bks"),"123456".toCharArray());

?//證書 第二種,直接使用cer證書? ? ??

? CertificateFactory cf = CertificateFactory.getInstance("X.509");

? ? ? ? X509Certificate cert = (X509Certificate)cf.generateCertificate(context.getAssets().open("srca.cer"));

? ? ? ? KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());

? ? ? ? keyStore.load(null, null);

? ? ? ? keyStore.setCertificateEntry("certificate", cert);

? ? ? ? trustManager.init(keyStore);

? ?//KeyManager[]?第一個參數(shù)是授權(quán)的密鑰管理器,用來授權(quán)驗(yàn)證。第二個是被授權(quán)的證書管理器,??

? //用來驗(yàn)證服務(wù)器端的證書。只驗(yàn)證服務(wù)器數(shù)據(jù),第一個管理器可以為null??

? ?//ssl socket工廠創(chuàng)建socket

? ? ? sslContext.init(null,trustManager.getTrustManagers(),null);

? ? ? ? SSLSocketFactory socketFactory = sslContext.getSocketFactory();

? ? ? ? SSLSocket socket = (SSLSocket) socketFactory.createSocket("www.12306.cn", 443);

//? ? ? ? Socket socket = SSLSocketFactory.getDefault().createSocket("www.12306.cn", 443);//有ca認(rèn)證的證書使用默認(rèn)

? ? ? ? doHttps(socket);

? ? }

static void doHttps(Socket socket)throws Exception {

//接受數(shù)據(jù)的輸入流

? ? ? ? final BufferedReader br =new BufferedReader(new InputStreamReader(socket.getInputStream()));

? ? ? ? //發(fā)送數(shù)據(jù) 輸出流

? ? ? ? BufferedWriter bw =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

? ? ? ? new Thread() {

@Override

? ? ? ? ? ? public void run() {

while (true) {

String line =null;

? ? ? ? ? ? ? ? ? ? try {

while ((line =br.readLine()) !=null) {

System.out.println("recv :" + line);

? ? ? ? ? ? ? ? ? ? ? ? }

}catch (IOException e) {

e.printStackTrace();

? ? ? ? ? ? ? ? ? ? }

}

}

}.start();

? ? ? ? bw.write("GET / HTTP/1.1\r\n");

? ? ? ? bw.write("Host: www.12306.cn\r\n\r\n");

? ? ? ? bw.flush();

? ? }

}



?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容