• Android客户端访问https网站,默认情况下,受证书信任限制,无法访问,可以有两种解决方法来实现: 1、将要访问的https网站的ca证书添加到客户端信任证书列表中,此种方式为谷歌...1、客户端添加指定信任证书 ass

    当Android客户端访问https网站,默认情况下,受证书信任限制,无法访问,可以有两种解决方法来实现:

    1、将要访问的https网站的ca证书添加到客户端信任证书列表中,此种方式为谷歌推荐,安全性高。

    2、将客户端设置为信任所有证书,也就是说不验证服务器证书,此种方式实现简单,但是安全性低,不推荐使用。

    直接上代码,分别实现两种方式的访问。


    1、客户端添加指定信任证书

    assets目录中放置ca.crt证书,此证书为https://certs.cac.washington.edu/CAtest/网站的信任证书。

    public void initSSL() throws CertificateException, IOException, KeyStoreException,
                NoSuchAlgorithmException, KeyManagementException {
            CertificateFactory cf = CertificateFactory.getInstance("X.509");
            InputStream in = getAssets().open("ca.crt");
            Certificate ca = cf.generateCertificate(in);
    
            KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
            keystore.load(null, null);
            keystore.setCertificateEntry("ca", ca);
    
            String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
            TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
            tmf.init(keystore);
    
            // Create an SSLContext that uses our TrustManager
            SSLContext context = SSLContext.getInstance("TLS");
            context.init(null, tmf.getTrustManagers(), null);
            URL url = new URL("https://certs.cac.washington.edu/CAtest/");
    //        URL url = new URL("https://github.com");
            HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
            urlConnection.setSSLSocketFactory(context.getSocketFactory());
            InputStream input = urlConnection.getInputStream();
    
            BufferedReader reader = new BufferedReader(new InputStreamReader(input, "UTF-8"));
            StringBuffer result = new StringBuffer();
            String line = "";
            while ((line = reader.readLine()) != null) {
                result.append(line);
            }
            Log.e("TTTT", result.toString());
        }


    2、客户端信任所有https,免证书验证

    public void initSSLALL() throws KeyManagementException, NoSuchAlgorithmException, IOException {
    //        URL url = new URL("https://certs.cac.washington.edu/CAtest/");
            URL url = new URL("https://github.com");
            SSLContext context = SSLContext.getInstance("TLS");
            context.init(null, new TrustManager[]{new TrustAllManager()}, null);
            HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
            HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
    
                @Override
                public boolean verify(String arg0, SSLSession arg1) {
                    return true;
                }
            });
            HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.setDoOutput(false);
            connection.setRequestMethod("GET");
            connection.connect();
            InputStream in = connection.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            String line = "";
            StringBuffer result = new StringBuffer();
            while ((line = reader.readLine()) != null) {
                result.append(line);
            }
            Log.e("TTTT", result.toString());
        }



    展开全文
  • android https遇到自签名证书/信任证书
  • 前言 在Android开发项目中难免要进行https请求,如果你也遇到这样的问题,那么我想这片博客能对你有些帮助。... 这个异常指的是找不到指定的信任证书。为了避免本地一个一个添加证书的麻烦,尤其是在测试情...
  • Android证书信任问题与大表哥 0x00 起因 1、近期icloud.com、yahoo.com、apple.com遭遇到大规模劫持 WooYun: Yahoo雅虎在国内访问遭遇SSL中间人攻击(被替换为自签名证书) 2、乌云平台、CVE都收到大量有关...
  • 我们经常会遇到在开发的开始的时候或者开发过程中,服务端开发人员都会配置https证书,这些证书一般都是自建的,那么问题就来了,服务端开发人员配置了https证书,那在Android端也是需要配置相对应的证书的,不然的...
  • android系统已经预置了150多个证书,服务端用的证书是从android认可的证书颁发机构购买的证书,默认情况下,是信任它们的,因此可以直接访问而无需在客户端设置什么。 购买证书毕竟是花钱的,使用自签名证书就是...
  • 但是在大多数情况下,服务器所使用的根证书是自签名的,或者签名机构不在设备的信任证书列表中,这样使用httpclient进行https连接就会失败。解决这个问题的办法有两种,一是在发起https连接之前将服务器
  • Volley 框架信任所有https证书 基于Okhttpclient信任https所有证书 前言 在Android开发项目中难免要进行https请求,如果你也遇到这样的问题,那么我想这片博客能对你有些帮助。 java.security.cert....
  • 介绍 网络安全已成为大家最关心的问题. 如果你利用服务器存储客户资料, 那你应该考虑使用 SSL 加密客户跟服务器之间的通讯. 随着这几年手机应用迅速崛起.... ...更严重的是, 通过手机应用, 黑客可以得到手机用户的隐私...
  • Android添加https证书 2016-05-23 14:04:59
    #1 Android只支持.bks格式的证书,要生成.bks证书,可以通过keytools的adb命令将.cer格式的数字证书导入到.bak文件中 #2 预备工具“bcprov-jdk16-145.jar”(下载地址(放了两个jdk版本的jar文件):...
  • Android信任自签名证书前言问题描述环境准备生成自签名证书搭建tomcat服务器tomcat配置证书代码实现信任所有证书(不推荐)信任指定证书导入自签名证书信任自签名证书代码总结示例代码地址 前言 在上一篇 一文读懂...
  • 1.Https相关知识 1.1 http与https的区别 HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets ...
  • Android7.0及以后的系统中,安装证书,并且让APP信任我们手工导入的CA证书 Android 6.0 (API level 23)以后,APP默认只信任系统自带的CA证书,对于用户导入的不在信任 以小米手机为例: [1] 在你的Android项目的...
  • android获取https证书 2019-07-05 20:32:33
    最近碰到一个问题, 有朋友问android这边能不能拿到服务器下发的证书,意思就是 自签名证书的https接口,在请求的时候,也没有添加自签名证书信任列表,直接去发https请求,按照正常https步骤去理解,服务器会返回...
1 2 3 4 5 ... 20
收藏数 5,294
精华内容 2,117