0.HTTPS简介
HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。
SSL:Secure Socket Layer,安全套接字层。用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取。
TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。
SSL/TLS协议提供的服务主要有:
1. 认证用户和服务器,确保数据发送到正确的客户机和服务器;
2. 加密数据以防止数据中途被窃取;
3. 维护数据的完整性,确保数据在传输过程中不被改变。
1.HTTPS和HTTP的区别
1)https协议需要到CA申请证书,一般免费证书很少,需要交费。
2)http是超文本传输协议,信息是明文传输,https则是具有安全性的SSL加密传输协议。
3)http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4)http的连接很简单,是无状态的;HTTPS协议是由SSL(Secure Sockets Layer)+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
2.http为什么不安全
http协议没有任何的加密以及身份验证的机制,非常容易遭遇窃听、劫持、篡改,因此会造成个人隐私泄露,恶意的流量劫持等严重的安全问题。
就像寄信一样,我给你寄信,中间可能会经过很多的邮递员,他们可以拆开信读取里面的内容,因为是明文的。如果你的信里涉及到了你们银行账号等敏感信息,可能就会被窃取。除此之外,邮递员们还可以给你伪造信的内容,导致你遭到欺骗。
3.HTTPS的加密原理
首先服务器端用非对称加密(RSA)产生公钥和私钥。然后把公钥发给客 户端,路径或许有人会截取,但是没有用,因为用公钥加密的文件只有私钥可以解密,而私钥永远都不会离开服务器的。当公钥到达客户端之后,客户端会用对称加密产生一个秘钥并且用公钥来加密发送给服务器端,这个秘钥就是以后用来通信的钥匙。这样服务器端收到公钥加密的秘钥时就可以用私钥来解公钥从而获得秘钥。这样的话客户端和服务器端都获得了秘钥,信息交流相对是安全的。
============= 测试用 =================
//https测试地址
https://kyfw.12306.cn/otn/leftTicket/init
为了进行认证,程序需要使用服务端期望的认证信息创建一个NSURLCredential对象。我们可以调用authenticationMethod来确定服务端的认证方法,这个认证方法是在提供的认证请求的保护空间中。NSURLCredential支持一些方法:
1. HTTP基本认证(NSURLAuthenticationMethodHTTPBasic):需要用户名和密码。提示用户输入必要信息并使用credentialWithUser:password:persistence:方法创建一个NSURLCredential对象。
2. HTTP数字认证(NSURLAuthenticationMethodHTTPDigest):类似于基本认证,需要用户名和密码。提示用户输入必要信息并使用credentialWithUser:password:persistence:方法创建一个NSURLCredential对象。
3. 客户端证书认证(NSURLAuthenticationMethodClientCertificate): 需要系统标识和所有服务端认证所需要的证书。然后使用credentialWithIdentity:certificates:persistence:来创建一个NSURLCredential对象。
4. 服务端信任认证(NSURLAuthenticationMethodServerTrust)需要一个由认证请求的保护空间提供的信任。使用credentialForTrust:来创建一个NSURLCredential对象
![Uploading https的数据加密流程_957458.png . . .]