http转换https

因最近项目需要,将http转化为https,因此做个记录。

1、首先去网站把证书下下来

  

  

  最终得到一个.cer文件

2、将 .cer 文件转换为 .bks文件,将生成的 .bks 文件放入 raw 目录下

  下载转换工具

  我用的是 bcprov-jdk15on-159.jar

  输入命令

keytool -importcert -v -trustcacerts 
-alias (别名,随便取个名字)
-file xx.cer(下载证书的全路径) 
-keystore xxx.bks (生成文件的全路径)
-storetype BKS 
-providerclass org.bouncycastle.jce.provider.BouncyCastleProvider 
-providerpath xxx.jar (你下载转换工具的全路径)
-storepass xxxxxx(密码,自定义)

注意:上述命令没有换行,路径最好用英文

3、代码中,增加以下代码即可。

okHttpClient.sslSocketFactory(SSLSocketFactory sslSocketFactory)

/**
 * 获取bks文件的sslsocketfactory
 * @param context
 * @return
 */
public static SSLSocketFactory getSSLSocketFactory(Context context) {
    final String CLIENT_TRUST_PASSWORD = "123456";//信任证书密码,该证书默认密码是123456
    final String CLIENT_AGREEMENT = "TLS";//使用协议
    final String CLIENT_TRUST_KEYSTORE = "BKS";
    SSLContext sslContext = null;
    try {
        //取得SSL的SSLContext实例
        sslContext = SSLContext.getInstance(CLIENT_AGREEMENT);
        //取得TrustManagerFactory的X509密钥管理器实例
        TrustManagerFactory trustManager = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        //取得BKS密库实例
        KeyStore tks = KeyStore.getInstance(CLIENT_TRUST_KEYSTORE);
        InputStream is = context.getResources().openRawResource(R.raw.service);
        try {
            tks.load(is, CLIENT_TRUST_PASSWORD.toCharArray());
        } finally {
            is.close();
        }
        //初始化密钥管理器
        trustManager.init(tks);
        //初始化SSLContext
        sslContext.init(null, trustManager.getTrustManagers(), null);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return sslContext.getSocketFactory();
}

最后,如果运行中报错:

javax.net.ssl.SSLPeerUnverifiedException: Hostname ***.****.**not verified

那么,还需增加一行代码

okHttpClient.hostnameVerifier(new HostnameVerifier() {
                @Override
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            })

再次访问,就应该没问题了。

你可能感兴趣的:(android)