6
6
4 . [ Java安全加密:数字签名和数字证书] ( http://blog.csdn.net/axi295309066/article/details/52494832 )
7
7
5 . [ Java安全加密:Https编程] ( http://blog.csdn.net/axi295309066/article/details/52494902 )
8
8
9
- ## ** 概述 **
10
- ** SSL** (Secure Sockets Layer ** 安全套接层** ),为网景公司(Netscape)所研发,用以保障在Internet 上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。一般通用之规格为40 bit 之安全标准,美国则已推出128 bit 之更高安全标准,但限制出境。只要3.0 版本以上之I.E.或Netscape 浏览器即可支持SSL。
9
+ ## 概述
10
+ SSL(Secure Sockets Layer 安全套接层),为网景公司(Netscape)所研发,用以保障在Internet 上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。一般通用之规格为40 bit 之安全标准,美国则已推出128 bit 之更高安全标准,但限制出境。只要3.0 版本以上之I.E.或Netscape 浏览器即可支持SSL。
11
11
12
- ** TLS** (Transport Layer Security ** 传输层安全** ),用于在两个通信应用程序之间提供保密性和数据完整性。TLS 是SSL 的标准化后的产物,有1.0 ,1.1 ,1.2 三个版本,默认使用1.0。TLS1.0 和SSL3.0 几乎没有区别,事实上我们现在用的都是TLS,但因为历史上习惯了SSL 这个称呼。
12
+ TLS(Transport Layer Security 传输层安全),用于在两个通信应用程序之间提供保密性和数据完整性。TLS 是SSL 的标准化后的产物,有1.0 ,1.1 ,1.2 三个版本,默认使用1.0。TLS1.0 和SSL3.0 几乎没有区别,事实上我们现在用的都是TLS,但因为历史上习惯了SSL 这个称呼。
13
13
14
- ### ** SSL 通信简单图示: **
14
+ ### SSL 通信简单图示
15
15
16
16
![ ssl] ( http://img.blog.csdn.net/20160910142930760 )
17
17
18
- ### ** SSL 通信详细图示: **
18
+ ### SSL 通信详细图示
19
19
20
20
![ ssl] ( http://img.blog.csdn.net/20160910143017261 )
21
21
22
- 当请求使用自签名证书的网站数据时,例如请求12306 的客运服务页面:https://kyfw.12306.cn/otn/,则会报下面的错误,原因是客户端的根认证机构不能识别该证书错误信息:unable to find valid certification path to requested target
22
+ 当请求使用自签名证书的网站数据时,例如请求12306 的客运服务页面:https://kyfw.12306.cn/otn/ ,则会报下面的错误,原因是客户端的根认证机构不能识别该证书错误信息:unable to find valid certification path to requested target
23
23
24
- ## ** 解决方案1**
24
+ ## 解决方案1
25
25
一个证书可不可信,是由TrustManager 决定的,所以我们只需要自定义一个什么都不做的TrustManager即可,服务器出示的所有证书都不做校验,一律放行。
26
26
27
27
``` java
@@ -42,7 +42,7 @@ HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
42
42
System . out. println(Util . inputstream2String(in));
43
43
}
44
44
45
- /**
45
+ /
46
46
* 自定义一个什么都不做的信任管理器,所有证书都不做校验,一律放行
47
47
*/
48
48
private static class EmptyX509TrustManager implements X509TrustManager {
@@ -62,7 +62,7 @@ HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
62
62
}
63
63
}
64
64
```
65
- ## ** 解决方案2**
65
+ ## 解决方案2
66
66
12306 服务器出示的证书是中铁集团SRCA 给他颁发的,所以SRCA 的证书是能够识别12306 的证书的,所以只需要把SRCA 证书导入系统的KeyStore 里,之后交给TrustManagerFactory 进行初始化,则可把SRCA 添加至根证书认证机构,之后校验的时候,SRCA 对12306 证书校验时就能通过认证。
67
67
68
68
这种解决方案有两种使用方式:一是直接使用SRCA.cer 文件,二是使用改文件的RFC 格式数据,将其写在代码里。
@@ -116,7 +116,7 @@ InputStream in = conn.getInputStream();
116
116
System . out. println(Util . inputstream2String(in));
117
117
}
118
118
```
119
- ## ** Android 里的 https 请求**
119
+ ## Android 里的 https 请求
120
120
把scra.cer 文件考到assets 或raw 目录下,或者直接使用证书的RFC 格式,接下来的做法和java工程代码一样
121
121
122
122
``` java
@@ -150,7 +150,7 @@ InputStream in = urlConnection.getInputStream();
150
150
copyInputStreamToOutputStream(in, System . out);
151
151
152
152
```
153
- ## ** 双向证书验证**
153
+ ## 双向证书验证
154
154
155
155
``` java
156
156
CertificateFactory certificateFactory = CertificateFactory . getInstance(" X.509" );
@@ -172,10 +172,10 @@ keyManagerFactory.init(clientKeyStore, "123456".toCharArray());
172
172
sslContext. init(keyManagerFactory. getKeyManagers(), trustManagerFactory. getTrustManagers(), new SecureRandom ());
173
173
174
174
```
175
- ## ** Nogotofail**
175
+ ## Nogotofail
176
176
网络流量安全测试工具,Google的开源项目:https://github.com/google/nogotofail
177
177
178
- ## ** Android安全加密专题总结 **
178
+ ## 安全加密专题总结
179
179
180
180
以上学习所有内容,对称加密、非对称加密、消息摘要、数字签名等知识都是为了理解数字证书工作原理而作为一个预备知识。数字证书是密码学里的终极武器,是人类几千年历史总结的智慧的结晶,只有在明白了数字证书工作原理后,才能理解Https 协议的安全通讯机制。最终才能在SSL 开发过程中得心应手。
181
181
@@ -196,3 +196,5 @@ sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrust
196
196
- 知道对称加密、非对称加密、消息摘要、数字签名、数字证书是为了解决什么问题而出现的
197
197
- 了解SSL 通讯流程
198
198
- 实际开发里怎样请求Https 的接口
199
+
200
+ ![ ] ( img/安全加密.png )
0 commit comments