android 访问https服务器

    之前,我讲了如何让tomcat支持https访问,当时浏览器通过https:localhost:8443即可访问tomcat。可是android此时如何访问已经搭建好的tomcat的https了?我在网上找了很多资料,发现还是有问题,后来自己改了一些,终于是做出来了。

1.搭建tomcat的https服务器。

这个,我之前的博客已经讲过,所有不在细讲了。


2.将搭建tomcat服务器时生成的server.cer证书放在android的assets目录下,应为客户端用https访问时需要检测服务器的证书是否符合要求。


3.编写一个类继承X509TrustManager,X509TrustManager是证书信任管理器类,我们可以自己实现该接口,让它信任我们指定的证书。

自己实现了信任管理器类,如何使用呢?类HttpsURLConnection似乎并没有提供方法设置信任管理器。其实,HttpsURLConnection通过SSLSocket来建立与HTTPS的安全连接,SSLSocket对象是由SSLSocketFactory生成的。HttpsURLConnection提供了方法setSSLSocketFactory(SSLSocketFactory)设置它使用的SSLSocketFactory对象。SSLSocketFactory通过SSLContext对象来获得,在初始化SSLContext对象时,可指定信任管理器对象。

public class TrustAllCertsManager implements X509TrustManager {
    @Override
    public void checkClientTrusted(X509Certificate[] chain, String authType)
            throws CertificateException {
        // Do nothing -> accept any certificates
    }

    @Override
    public void checkServerTrusted(X509Certificate[] chain, String authType)
            throws CertificateException {
        // Do nothing -> accept any certificates
    }

    @Override
    public X509Certificate[] getAcceptedIssuers() {
        return new X509Certificate[0];
    }
}


4.编写一个类实现HostnameVerifier接口,此类是用于主机名验证的基接口。

在握手期间,如果 URL 的主机名和服务器的标识主机名不匹配,则验证机制可以回调此接口的实现程序来确定是否应该允许此连接。

策略可以是基于证书的或依赖于其他验证方案。

当验证 URL 主机名使用的默认规则失败时使用这些回调。

public class VerifyEverythingHostnameVerifier implements HostnameVerifier {
    @Override
    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
}

此时,我设置对所有主机都可以访问。

5.实例化服务器的证书。

private TrustManager[] createTrustManager() {
    BufferedInputStream cerInputStream = null;
    try {
        // 获取客户端存放的服务器公钥证书
        cerInputStream = new BufferedInputStream(getAssets().open("server.cer"));
        // 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值