https遇到自签名证书/信任证书
对于CA机构颁发的证书Okhttp默认支持 可以直接访问
但是对于自定义的证书就不可以了(如:https ://kyfw.12306.cn/otn/), 需要加入Trust
下面分两部分来写,一是信任所有证书,二是信任指定证书,访问自签名的网站
一、信任所有证书
1. 在你的module 下 build.gradule里添加
1
2
3
4
|
dependencies {
、、、
compile 'com.zhy:okhttputils:2.6.2'
、、、}
|
2.新建MyApplication
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 这就是信任所有证书
HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory( null , null , null );
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(10000L, TimeUnit.MILLISECONDS)
.readTimeout(10000L, TimeUnit.MILLISECONDS)
.addInterceptor( new LoggerInterceptor( "TAG" ))
.hostnameVerifier( new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true ;
}
})
.sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)
.build();
OkHttpUtils.initClient(okHttpClient);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
|
3.AndroidMainfest.xml
1
2
3
4
5
6
7
8
|
//添加权限
<uses-permission android:name= "android.permission.INTERNET" ></uses-permission>
<uses-permission android:name= "android.permission.WRITE_EXTERNAL_STORAGE" ></uses-permission>
<application
//将新建的MyApplication name添加进来
android:name= ".MyApplication"
.....
|
4.然后在需要请求网络的地方
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public void getHttps(View view) {
String url = "https://kyfw.12306.cn/otn/" ;
OkHttpUtils
. get ()
.url(url)
.build()
.execute( new StringCallback() {
@Override
public void onError(Call call, Exception e, int id) {
Log.e( "TAG" , "onError: " + e.toString());
}
@Override
public void onResponse(String response, int id) {
Log.e( "TAG" , "onResponse: " + response.toString());
}
});
}
|
二、自定义的证书 自签名网站
分两种:1.直接使用网站证书;2.将证书转为字符串
1、直接使用网站证书####
1.导出网站证书
-- chrome浏览器方法:(其他浏览器请百度)
--访问 https://kyfw.12306.cn/otn/
按F12
--
-- 详细信息--复制到文件--下一步
-- 选
--下一步
--选择保存位置 填入文件名
--下一步 --完成--确定
2、将导出的证书 放在assets文件夹下,没有就自己创建一个
1
2
|
//使用 在Application里
HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory( new InputStream[]{getAssets().open( "srca.cer" )}, null , null );
|
==========
也可以不用证书 直接将证书转为字符串 ,使用字符串
2、将证书转为字符串####
两种方式任选一种 直接使用证书 就不用这一步了
代码 http://download.csdn.net/download/eryhytkmgfhnghnjfghn/9834086
1.在你的module 下 build.gradule里添加
1
2
3
4
|
dependencies {
、、、
compile 'com.zhy:okhttputils:2.6.2'
、、、}
|
2.新建MyApplication
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
public class MyApplication extends Application {
//获取12306网站证书,将证书中的内容提取出来,写成字符串常量
//不会提取内容 请百度
//我的在asli是可以直接看到内容的
private String CER_12306 = "-----BEGIN CERTIFICATE-----\n" +
"MIICmjCCAgOgAwIBAgIIbyZr5/jKH6QwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ04xKTAn\n" +
"BgNVBAoTIFNpbm9yYWlsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRTUkNBMB4X\n" +
"DTA5MDUyNTA2NTYwMFoXDTI5MDUyMDA2NTYwMFowRzELMAkGA1UEBhMCQ04xKTAnBgNVBAoTIFNp\n" +
"bm9yYWlsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRTUkNBMIGfMA0GCSqGSIb3\n" +
"DQEBAQUAA4GNADCBiQKBgQDMpbNeb34p0GvLkZ6t72/OOba4mX2K/eZRWFfnuk8e5jKDH+9BgCb2\n" +
"9bSotqPqTbxXWPxIOz8EjyUO3bfR5pQ8ovNTOlks2rS5BdMhoi4sUjCKi5ELiqtyww/XgY5iFqv6\n" +
"D4Pw9QvOUcdRVSbPWo1DwMmH75It6pk/rARIFHEjWwIDAQABo4GOMIGLMB8GA1UdIwQYMBaAFHle\n" +
"tne34lKDQ+3HUYhMY4UsAENYMAwGA1UdEwQFMAMBAf8wLgYDVR0fBCcwJTAjoCGgH4YdaHR0cDov\n" +
"LzE5Mi4xNjguOS4xNDkvY3JsMS5jcmwwCwYDVR0PBAQDAgH+MB0GA1UdDgQWBBR5XrZ3t+JSg0Pt\n" +
"x1GITGOFLABDWDANBgkqhkiG9w0BAQUFAAOBgQDGrAm2U/of1LbOnG2bnnQtgcVaBXiVJF8LKPaV\n" +
"23XQ96HU8xfgSZMJS6U00WHAI7zp0q208RSUft9wDq9ee///VOhzR6Tebg9QfyPSohkBrhXQenvQ\n" +
"og555S+C3eJAAVeNCTeMS3N/M5hzBRJAoffn3qoYdAO1Q8bTguOi+2849A==\n" +
"-----END CERTIFICATE-----" ;
@Override
public void onCreate() {
super.onCreate();
// 这就是信任所有证书 **和 一 的区别在这里**
//这里 import okio.Buffer;
HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory( new InputStream[]{ new Buffer().writeUtf8(CER_12306).inputStream()}, null , null );
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(10000L, TimeUnit.MILLISECONDS)
.readTimeout(10000L, TimeUnit.MILLISECONDS)
.addInterceptor( new LoggerInterceptor( "TAG" ))
.hostnameVerifier( new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true ;
}
})
.sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)
.build();
OkHttpUtils.initClient(okHttpClient);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
|
然后同一的34
代码 https://github.com/DeadLine837/TestHttps
參考 https://github.com/hongyangAndroid/okhttputils
https遇到自签名证书/信任证书相关推荐
- Android https 自签名和CA证书验证(基于OkHttp)
Android HTTPS自签名和CA证书验证(基于OkHttp) HTTPS介绍 CA证书 自签名证书 问题描述 域名校验 OkHttp设置 总结 HTTPS介绍 HTTPS是一种通过计算机网络进行 ...
- iOS: HTTPS 与自签名证书
不是每个公司都会以数百美金一年的代价向CA购买SSL证书.在企业应用中,付费的SSL证书经常被自签名证书所替代.当然,对于自签名证书iOS是没有能力验证的.Safari遇到这种无法验证的自签名证书的唯 ...
- jodd忽略ssl证书_关于java访问https资源时,忽略证书信任问题
java程序在访问https资源时,出现报错 sun.security.validator.ValidatorException: PKIX path building failed: sun.sec ...
- https信任证书的三种方式
苦逼的我调试AFNetworking发送https请求的bug ---------调试了一个上午,终于解决了 证书信任的过程: 证书的信任是通过代理的方式进行信任(NSURLConnection和NS ...
- java在访问https资源时,忽略证书信任问题
java程序在访问https资源时,出现报错 sun.security.validator.ValidatorException: PKIX path building failed: sun.sec ...
- 夜神模拟器Android7与Burpsuite配置抓包http/https均信任证书
菜鸡第一次写文章 目录 (1)进入正题,bp证书下载(下载证书至Win10): (2)云服务器安装宝塔(方便上传证书至云服务器): (3)上传刚下载的证书cacert.der至root目录下: (4) ...
- https信任证书的三种方
苦逼的我调试AFNetworking发送https请求的bug ---------调试了一个上午,终于解决了 证书信任的过程: 证书的信任是通过代理的方式进行信任(NSURLConnection和NS ...
- 请求https,X509证书信任管理器类,避免导证书
实现X509证书信任管理器类(避免导证书) package com.showlin.httpsDemo;import javax.net.ssl.X509TrustManager; import ja ...
- HTTPS|SSL笔记-SSL双向认证失败(客户端证书信任库不含服务端证书)握手过程(含wireshark分析)
这里我把客户端证书信任库里面清空,及没放服务端证书,Java报错不一样,但抓包是一样的,在此记录下过程. 1. 前3个包是TCP三次握手,在此不解析,对应的包如下: 2. 握手成功后,客户端发送自己支 ...
最新文章
- [转帖]ASP.NET中常用的优化性能的方法
- office文档、图片、音/视频格式转换工具
- u-boot-2012.07 for FL2440
- 关于无线的Idle Timeout和Session Timeout
- 良心之作----centos6.5下安装svn客户端报错
- 详解python3如何调用c语言代码
- POJ2251Dungeon Master
- java dataset redis,利用Spring-Data-Redis和Jedis操作Redis缓存
- apache性能调优
- (转)Managed DirectX +C# 开发(入门篇)(五)
- linux下三三维建模软件,SolidWorks是基于()原创的三维实体建模软件。A.UNIXB.WindowsC.LinuxD.Dos...
- hibernate环境搭建
- 数据分析:销售数据怎么分析?简单概述
- 基于激光雷达技术的3维虚拟校园建设与研究_爱学术—免费下载
- SQL学习笔记——数据更新update语句的使用
- Overlaps的压盖计数规则
- 【信息技术】【2002.04】基于局部分割的数字图像处理
- iOS App各种路径
- mysql即是主键又是外键怎么写_数据库 既是主键又是外键
- Python异常处理:ImportError: cannot import name 'XXX' from 'XXXX'