1.HTTP 和 HTTPS 有什么区别?
HTTPS 和 HTTP 的关系
- 协议
- 明文/安全
HTTPS 它把 HTTP 下层的传输协议由 TCP/IP 换成了 SSL/TLS,由 「“HTTP over TCP/IP”」 变成了 「“HTTP over SSL/TLS”」,让 HTTP 运行在了安全的 SSL/TLS 协议上,收发报文不再使用 「Socket API」,而是调用专门的「安全接口」。
HTTPS 是 为 HTTP 增加了「四大安全特性」;本身一个“非常简单”的协议,RFC 文档很小,只有短短的 7 页,里面规定了新的协议名“https”默认端口号 443,至于其他的什么请求 - 应答模式、报文结构、请求方法、URI、头字段、连接管理等等都完全沿用 HTTP,没有任何新的东西。
HTTPS 和 HTTP
四大安全特性
「机密性」:是指对数据的“保密”,只能由可信的人访问,对其他人是不可见的“秘密”,简单来说就是不能让不相关的人看到不该看的东西。
❝
对称加密和非对称加密算法
❞
「完整性」:是指数据在传输过程中没有被篡改,不多也不少,“完完整整”地保持着原状。
❝
摘要算法
❞
「身份认证」:是指确认对方的真实身份,也就是“证明你真的是你”,保证消息只能发送给可信的人。
❝
数字签名 和 CA 认证
❞
「不可否认」:也叫不可抵赖,意思是不能否认已经发生过的行为,不能“说话不算数”“耍赖皮”。
❝
数字签名
❞
提炼
- 因为 HTTP 是明文传输,所以不安全,容易被黑客窃听或篡改;
- 通信安全必须同时具备机密性、完整性、身份认证和不可否认这四个特性;
- HTTPS 的语法、语义仍然是 HTTP,但把下层的协议由 TCP/IP 换成了 SSL/TLS;
- SSL/TLS 是信息安全领域中的权威标准,采用多种先进的加密技术保证通信安全;
- OpenSSL 是著名的开源密码学工具包,是 SSL/TLS 加密算法的具体实现(NodeJs 实现 https 安全层面也是使用的 OpenSSL,实现 http 使用的 http-parser);
2.说说对称加密和非对称加密的理解?
- 加密含义
- 对称加密:相同秘钥(快)
- 非对称加密:公钥和私钥(慢)
- 混合加密: TLS 通信采用的方式
加密含义
实现机密性最常用的手段是“加密”(encrypt),把消息用某种方式转换成谁也看不懂的乱码,只有掌握特殊“钥匙”的人才能再转换出原始文本。这里的“钥匙”就叫做“密钥”(key),加密前的消息叫“明文”(plain text/clear text),加密后的乱码叫“密文”(cipher text),使用密钥还原明文的过程叫“解密”(decrypt),是加密的反操作,加密解密的操作过程就是“加密算法”。
按照密钥的使用方式,加密可以分为两大类:对称加密和非对称加密。
对称加密算法
“对称加密”很好理解,就是指加密和解密时使用的密钥都是同一个,是“对称”的。只要保证了密钥的安全,那整个通信过程就可以说具有了机密性。
对称加密
TLS 里有非常多的对称加密算法可供选择,比如 RC4、DES、3DES、「AES」、ChaCha20 等,但前三种算法都被认为是不安全的,通常都禁止使用,目前常用的只有 AES 和 ChaCha20。
❝
AES 的意思是“高级加密标准”(Advanced Encryption Standard)