HTTP 是明文传输,非常不安全,数据可能被窃听、篡改,服务器身份也可能被冒充,而 HTTPS 是基于我们前面介绍的 SSL/TLS 协议,可实现安全加密连接。本文结合上一篇文章搭建的私有 CA 为 Nginx 服务器签署数字证书,Nginx 开启 HTTPS 功能
OpenSSL 是一个开源命令行工具,通常用于生成私钥、创建 CSR、生成 SSL/TLS 证书以及识别证书信息等,同时它也可以搭建本地用的私有 CA,从而可以签发数字证书。请先阅读本系列前两篇文章,更多详细用法可以参考本文末尾的附件 openssl-cookbook.pdf
要了解 SSL 或 TLS 协议的工作原理,您必须首先了解第 1 章的加密与解密等基本概念。SSL/TLS 的安全实现用到了多种加密算法的组合,用非对称加密实现身份认证和密钥交换,用对称加密实现数据的加密传输,用单向加密检查数据的完整性。本文图文并茂地讲述了 TLS v1.2 基于 RSA 或 Diffie-Hellman 两种不同的握手,最后简述了去年发布的 TLS 1.3 版本,它在安全性和性能方面都有了很大的改进,目前像 Google、Github 等都已经在使用 TLS 1.3 了
本文介绍了对称加密、公钥加密、单向加密的作用,比如公钥加密主要用于密钥交换和身份验证,对称加密用于会话数据的加密,单向加密的主要用途是验证消息和文件的完整性,我们只研究算法的用途,至于像 RSA、DH 算法的实现原理那是数学家的事。然后详细说明如何实现身份认证和密钥交换,并为了解决公钥的安全传输问题引入了数字证书和CA,最后用流程图解释了如何进行安全的加密和解密。要想理解下一篇文章 SSL/TLS 的原理,必须先完全理解本文的理论知识
本文演示了客户端和服务端建立了双向流之后,双方都可以不断地向对方发送或接收数据,如果客户端不想再连接了,它主动调用 cancel() 方法,将会取消 context 上下文,即关闭双向流,那么服务端会立即收到 codes.Canceled 错误状态码。同时,如果之后客户端再次想从双向流中发送或读取数据,都会收到 codes.Canceled 错误状态码