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

Google的X509TrustManager接口的不安全实现

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

Google的X509TrustManager接口的不安全实现

我找到了这个解决方案,效果很好!

X509TrustManager:

public class EasyX509TrustManager    implements X509TrustManager {private X509TrustManager standardTrustManager = null;public EasyX509TrustManager(KeyStore keystore)        throws NoSuchAlgorithmException, KeyStoreException {    super();    TrustManagerFactory factory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());    factory.init(keystore);    TrustManager[] trustmanagers = factory.getTrustManagers();    if (trustmanagers.length == 0) {        throw new NoSuchAlgorithmException("no trust manager found");    }    this.standardTrustManager = (X509TrustManager) trustmanagers[0];}public void checkClientTrusted(X509Certificate[] certificates, String authType)        throws CertificateException {    standardTrustManager.checkClientTrusted(certificates, authType);}public void checkServerTrusted(X509Certificate[] certificates, String authType)        throws CertificateException {    if ((certificates != null) && (certificates.length == 1)) {        certificates[0].checkValidity();    } else {        standardTrustManager.checkServerTrusted(certificates, authType);    }}public X509Certificate[] getAcceptedIssuers() {    return this.standardTrustManager.getAcceptedIssuers();}}

SSLSocketFactory:

public class EasySSLSocketFactory implements LayeredSocketFactory {private SSLContext sslcontext = null;private static SSLContext createEasySSLContext() throws IOException {    try {        SSLContext context = SSLContext.getInstance("TLS");        context.init(null, new TrustManager[]{new EasyX509TrustManager(     null)}, null);        return context;    } catch (Exception e) {        throw new IOException(e.getMessage());    }}private SSLContext getSSLContext() throws IOException {    if (this.sslcontext == null) {        this.sslcontext = createEasySSLContext();    }    return this.sslcontext;}public Socket connectSocket(Socket sock, String host, int port,      InetAddress localAddress, int localPort, HttpParams params)        throws IOException, UnknownHostException, ConnectTimeoutException {    int connTimeout = HttpConnectionParams.getConnectionTimeout(params);    int soTimeout = HttpConnectionParams.getSoTimeout(params);    InetSocketAddress remoteAddress = new InetSocketAddress(host, port);    SSLSocket sslsock = (SSLSocket) ((sock != null) ? sock : createSocket());    if ((localAddress != null) || (localPort > 0)) {        // we need to bind explicitly        if (localPort < 0) { localPort = 0; // indicates "any"        }        InetSocketAddress isa = new InetSocketAddress(localAddress,     localPort);        sslsock.bind(isa);    }    sslsock.connect(remoteAddress, connTimeout);    sslsock.setSoTimeout(soTimeout);    return sslsock;}public Socket createSocket() throws IOException {    return getSSLContext().getSocketFactory().createSocket();}public boolean isSecure(Socket socket) throws IllegalArgumentException {    return true;}public Socket createSocket(Socket socket, String host, int port,     boolean autoClose) throws IOException, UnknownHostException {    return getSSLContext().getSocketFactory().createSocket(socket, host, port, autoClose);}// -------------------------------------------------------------------// javadoc in org.apache.http.conn.scheme.SocketFactory says :// Both Object.equals() and Object.hashCode() must be overridden// for the correct operation of some connection managers// -------------------------------------------------------------------public boolean equals(Object obj) {    return ((obj != null) && obj.getClass().equals( EasySSLSocketFactory.class));}public int hashCode() {    return EasySSLSocketFactory.class.hashCode();}}

然后:

SchemeRegistry schReg = new SchemeRegistry(); schReg.register(new Scheme("http", PlainSocketFactory         .getSocketFactory(), 80)); schReg.register(new Scheme("https", new EasySSLSocketFactory(), 443));


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

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

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