DBMNG数据库管理与应用

抓住自己最有兴趣的东西,由浅入深,循序渐进地学……
当前位置:首页 > 移动应用 > Android

android 让webview支持自签名证书https 双向认证(SSL)

最近完成一个项目,安全级别比较高。所以涉及到https双向认证,在网上找了很多资料都没有完美的解决方案。最后参考了org.sandrob.sslexample的实现方式,结合实际情况才完成该技术难题,现在分享一下我的实现方案来弥补这方面的空白。
正文:
1.android 4.0(不包含)以下版本的实现方法:
1.1 书写认证

private SSLContext createSSLContext() {  
    SSLContext localSSLContext = null;  
try {  
    // 创建一个证书库,并将证书导入证书库  
    KeyStore keyStore = KeyStore.getInstance("PKCS12", "BC");  
    keyStore.load(  
            mContext.getResources().openRawResource(R.raw.client),//client 是*.pfx文件  
            CERTFILE_PASSWORD.toCharArray());//CERTFILE_PASSWORD 为你的证书的密码  
    KeyManagerFactory localKeyManagerFactory = KeyManagerFactory  
            .getInstance(KeyManagerFactory.getDefaultAlgorithm());  
    localKeyManagerFactory.init(keyStore,  
            CERTFILE_PASSWORD.toCharArray());  
    KeyManager[] arrayOfKeyManager = localKeyManagerFactory  
            .getKeyManagers();  
    localSSLContext = SSLContext.getInstance("TLS");  
    localSSLContext.init(arrayOfKeyManager, trustAllCerts,  
            new SecureRandom());              
    } catch (Exception ex) {  
        ex.printStackTrace();  
    }  
    return localSSLContext;  
}  




public boolean setWebViewSSLCert() {  
    boolean issuc = false;// true 代表验证和设置成功  
    if (Build.VERSION.SDK_INT >= 14){  
        return issuc;  
    }  
      
    try {             
        Field[] arrayOfField = Class.forName(  
                "android.net.http.HttpsConnection").getDeclaredFields();  
        for (Field localField : arrayOfField) {  
            if (localField.getName().equals("mSslSocketFactory")) {//采用反射的方式修改mSslSocketFactory变量  
                localField.setAccessible(true);  
                localField.set(null,createSSLContext().getSocketFactory());  
                issuc = true;  
                break;  
            }  
        }  
    } catch (Exception ex) {  
        ex.printStackTrace();  
    }  
    return issuc;  
}  


1.2 调用
 在webview初始化或者application 等,需要用https认证的地方调用 setWebViewSSLCert方法即可。

下接:http://blog.sina.com.cn/s/blog_618199e60101tgvk.html

转自:http://blog.csdn.net/mingli198611/article/details/9233705
参考:http://www.apkbus.com/forum.php?mod=viewthread&tid=142055

本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号