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;
                }
            })

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值