栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Android通过SSL与Bouncy Castle进行服务器之间的通信

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android通过SSL与Bouncy Castle进行服务器之间的通信

我添加了以下课程来解决该问题

import org.apache.http.conn.ssl.SSLSocketFactory;import java.io.IOException;import java.io.InputStream;import java.net.Socket;import java.security.KeyManagementException;import java.security.KeyStore;import java.security.KeyStoreException;import java.security.NoSuchAlgorithmException;import java.security.UnrecoverableKeyException;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import java.util.ArrayList;import java.util.Arrays;import javax.net.ssl.KeyManager;import javax.net.ssl.KeyManagerFactory;import javax.net.ssl.SSLContext;import javax.net.ssl.TrustManager;import javax.net.ssl.TrustManagerFactory;import javax.net.ssl.X509TrustManager;public class AdditionalKeyStoresSSLSocketFactory extends SSLSocketFactory{    protected SSLContext sslContext = SSLContext.getInstance("TLSv1");    public AdditionalKeyStoresSSLSocketFactory(KeyStore keyStore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {        super(null, null, null, null, null, null);        KeyManagerFactory keyManagerFactory = KeyManagerFactory     .getInstance(KeyManagerFactory.getDefaultAlgorithm());;        keyManagerFactory.init(keyStore, "123456".toCharArray());        sslContext.init(keyManagerFactory.getKeyManagers(), new TrustManager[]{new AdditionalKeyStoresTrustManager(keyStore)}, null);    }    @Override    public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException {        return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);    }    @Override    public Socket createSocket() throws IOException {        return sslContext.getSocketFactory().createSocket();    }        public static class AdditionalKeyStoresTrustManager implements X509TrustManager {        protected ArrayList<X509TrustManager> x509TrustManagers = new ArrayList<X509TrustManager>();        protected AdditionalKeyStoresTrustManager(KeyStore... additionalkeyStores) { final ArrayList<TrustManagerFactory> factories = new ArrayList<TrustManagerFactory>(); try {     // The default Trustmanager with default keystore     final TrustManagerFactory original = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());     original.init((KeyStore) null);     factories.add(original);     for( KeyStore keyStore : additionalkeyStores ) {         final TrustManagerFactory additionalCerts = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());         additionalCerts.init(keyStore);         factories.add(additionalCerts);     } } catch (Exception e) {     throw new RuntimeException(e); }  for (TrustManagerFactory tmf : factories)     for( TrustManager tm : tmf.getTrustManagers() )         if (tm instanceof X509TrustManager)  x509TrustManagers.add( (X509TrustManager)tm ); if( x509TrustManagers.size()==0 )     throw new RuntimeException("Couldn't find any X509TrustManagers");        }                public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { final X509TrustManager defaultX509TrustManager = x509TrustManagers.get(0); defaultX509TrustManager.checkClientTrusted(chain, authType);        }                public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { for( X509TrustManager tm : x509TrustManagers ) {     try {         tm.checkServerTrusted(chain,authType);         return;     } catch( CertificateException e ) {         // ignore     } } throw new CertificateException();        }        public X509Certificate[] getAcceptedIssuers() { final ArrayList<X509Certificate> list = new ArrayList<X509Certificate>(); for( X509TrustManager tm : x509TrustManagers )     list.addAll(Arrays.asList(tm.getAcceptedIssuers())); return list.toArray(new X509Certificate[list.size()]);        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/483419.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号