即使被加密处理的通信,也会被窥视到通信内容,这点和未加密的数据道理是一样的,只不过就是加密之后的数据无法破解报文的含义,但是加密的报文信息本身也是能被看见的。
HTTP协议中没有加密机制,但可以通过SSL(Secure Socket layer 安全套接层)或者TLS (Transport layer Security 安全传输层协议)的组合使用,加密HTTP的通信内容。与SSL组合使用的HTTP被称为HTTPS(HTTP secure 超文本传输协议)。
HTTP + 加密 + 认证 + 完整性保护 = HTTPS
1:加密方式
-
1 :对称加密(使用相同的密钥进行加密解密)
密钥发送问题:发送密钥就有被窃听的风险,但不发送,对方就无法解密。再说,密钥若能够安全发送,那数据也应该能安全送达。
但是对称加密效率高。
AES加密:
AES加密内部其实不只执行一轮加密,而是一共会执行11轮加密,所以AES会通过一个简单快速的混合操作,根据初始密钥依次生成后面10轮的密钥,每一轮的密钥都是依据上一轮生成的,所以每一轮的密钥都是不同的。尽管很多人抱怨说这种方式太简单了,但其实已经足够安全了
具体可以看看这篇文章写的挺有意思的:第二篇:对称加密及AES加密算法 -
2 :非对称加密(使用非对称的密钥一把公钥一把私钥)
使用公开密钥加密方式,发送密文的一方使用对方公开的密钥进行加密处理。对方收到被加密的信息后,再使用自己的私钥进行解密。 -
3 :HTTPS混合加密
HTTPS使用共享密钥加密方式和公开密钥加密方式进行加密。
使用公开密钥加密方式加密以后要使用的密钥,使用共享密钥的方式进行通信。
2: Alamofire安全认证
public enum ServerTrustPolicy
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler;
认证核心逻辑
if let sessionDidReceiveChallenge = sessionDidReceiveChallenge {
(disposition, credential) = sessionDidReceiveChallenge(session, challenge)
} else if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {
let host = challenge.protectionSpace.host
if
let serverTrustPolicy = session.serverTrustPolicyManager?.serverTrustPolicy(forHost: host),
let serverTrust = challenge.protectionSpace.serverTrust
{
if serverTrustPolicy.evaluate(serverTrust, forHost: host) {
disposition = .useCredential
credential = URLCredential(trust: serverTrust)
} else {
disposition = .cancelAuthenticationChallenge
}
}
}
completionHandler(disposition, credential)
![](https://img.haomeiwen.com/i9278567/4ed64de2f684e57b.jpg)
认证过程参考Alamofire进行Https网络请求自签名证书
网友评论