按关键词阅读:
1990年互联网诞生之初 , 就已经开始用超文本传输协议 HTTP 传输数据 , 这也是为什么现在网页地址都是以 http 开头的原因 。 但是HTTP协议传输数据是明文传输 , 任意的人抓包就能看到传输的数据 , 这显然不安全 。 1994年 , Netscape 公司用加密协议增加了 HTTP , 开始在 HTTP 的基础上加入 SSL 即安全套接层(Secure Socket Layer) 。 称为 "HTTP over SSL" 或者 "HTTP Secure" , 也就是我们现在熟知的 HTTPS 。
HTTPS 其实是一个“非常简单”的协议 , RFC 文档很小 , 只有短短的 7 页 , 里面规定了新的协议名“https” , 默认端口号 443 , 至于其他的什么请求 - 应答模式、报文结构、请求方法、URI、头字段、连接管理等等都完全沿用 HTTP , 没有任何新的东西 。
也就是说 , 除了协议名“http”和端口号 80 这两点不同 , HTTPS 协议在语法、语义上和 HTTP 完全一样 , 优缺点也“照单全收”(当然要除去“明文”和“不安全”) 。
SSL/TLSSSL/TLS是位于TCP/IP 7层协议中的会话层 , 用于认证用户和服务器 , 加解密数据以及维护数据的完整性 , 确保数据在传输过程中不会被修改 。
文章插图
SSL 有 v2 和 v3 两个版本 , 而 v1 因为有严重的缺陷从未公开过 。 SSL 发展到 v3 时已经证明了它自身是一个非常好的安全通信协议 , 于是互联网工程组 IETF 在 1999 年把它改名为 TLS(传输层安全 , Transport Layer Security) , 正式标准化 , 版本号从 1.0 重新算起 , 所以 TLS1.0 实际上就是 SSLv3.1 。
到今天 TLS 已经发展出了三个版本 , 分别是 2006 年的 1.1、2008 年的 1.2 和去年(2018)的 1.3 , 每个新版本都紧跟密码学的发展和互联网的现状 , 持续强化安全和性能 , 已经成为了信息安全领域中的权威标准 。
目前应用的最广泛的 TLS 是 1.2 , 而之前的协议(TLS1.1/1.0、SSLv3/v2)都已经被认为是不安全的 , 各大浏览器即将在 2020 年左右停止支持 , 所以接下来的讲解都针对的是 TLS1.2 。
【深入浅出 HTTPS (详解版)】TLS 由记录协议、握手协议、警告协议、变更密码规范协议、扩展协议等几个子协议组成 , 综合使用了对称加密、非对称加密、身份认证等许多密码学前沿技术 。 浏览器和服务器在使用 TLS 建立连接时需要选择一组恰当的加密算法来实现安全通信 , 这些算法的组合被称为“密码套件”(cipher suite , 也叫加密套件) 。
SSL/TLS分为对称加密和非对称加密两种方式 。
对称加密 对称加密是指加密和解密都用同一份密钥 。 如下图所示:
文章插图
AES 的意思是“高级加密标准”(Advanced Encryption Standard) , 密钥长度可以是 128、192 或 256 。 它是 DES 算法的替代者 , 安全强度很高 , 性能也很好 , 而且有的硬件还会做特殊优化 , 所以非常流行 , 是应用最广泛的对称加密算法 。
ChaCha20 是 Google 设计的另一种加密算法 , 密钥长度固定为 256 位 , 纯软件运行性能要超过 AES , 曾经在移动客户端上比较流行 , 但 ARMv8 之后也加入了 AES 硬件优化 , 所以现在不再具有明显的优势 , 但仍然算得上是一个不错算法 。
非对称加密非对称加密对应于一对密钥 , 称为私钥和公钥 , 用私钥加密后需要用公钥解密 , 用公钥加密后需要用私钥解密 。 如下图所示:
文章插图
对称加密看上去好像完美地实现了机密性 , 但其中有一个很大的问题:如何把密钥安全地传递给对方 , 术语叫“密钥交换” 。
因为在对称加密算法中只要持有密钥就可以解密 。 如果你和网站约定的密钥在传递途中被黑客窃取 , 那他就可以在之后随意解密收发的数据 , 通信过程也就没有机密性可言了 。
这个问题该怎么解决呢?
你或许会说:“把密钥再加密一下发过去就好了” , 但传输“加密密钥的密钥”又成了新问题 。 这就像是“鸡生蛋、蛋生鸡” , 可以无限递归下去 。 只用对称加密算法 , 是绝对无法解决密钥交换的问题的 。
所以 , 就出现了非对称加密(也叫公钥加密算法) 。
它有两个密钥 , 一个叫“公钥”(public key) , 一个叫“私钥”(private key) 。 两个密钥是不同的 , “不对称” , 公钥可以公开给任何人使用 , 而私钥必须严格保密 。
公钥和私钥有个特别的“单向”性 , 虽然都可以用来加密解密 , 但公钥加密后只能用私钥解密 , 反过来 , 私钥加密后也只能用公钥解密 。
稿源:(未知)
【傻大方】网址:http://www.shadafang.com/c/111J2Hc2020.html
标题:深入浅出 HTTPS (详解版)