TLS
TLS(前身 SSL)是通讯链路的附加层,可以基于它修改现有的应用使之安全,作用是:
- 建立一个安全的连接:对其中传输的数据提供加密保护,防止被中间人嗅探到可见明文;对数据提供完整性校验,防止传输的数据被中间人修改。
- 建立一个可信的连接:对连接双方的实体提供身份认证。
TLS 协商(RSA)(浏览器中的证书只是用来认证服务器):
- 当客户端连接到支持 TLS 协议的服务器要求建立安全连接并列出了受支持的密码组合(加密密码算法和加密哈希函数)。
- 服务器从该列表中决定加密和散列函数,并通知客户端。发回其数字证书,此证书通常包含服务器的名称、受信任的证书颁发机构(CA)和服务器的公钥。(未加密)(非对称加密算法)
- 客户端确认其颁发的证书的有效性。(nodejs http 请求选项中的 cert 字段就是用于自签证书的服务器,即 CA 证书。nodejs 发起的普通 https 请求使用了系统证书认证系统)
- 为了生成会话密钥用于安全连接,客户端使用服务器的公钥加密(非对称密钥加密)随机生成的密钥(SHA签名算法,对称密钥加密),并将其发送到服务器,只有服务器才能使用自己的私钥解密。
- 双方有了用于加密和解密的对称密钥(这个私钥的生命周期为这次会话)。
另一种(DH):Diffie-Hellman key agreement
TLS 默认使用443端口
使用 SSL 或者 TLS,TCP 层以上的 Payload 数据都是加密的,包括HTTP头。
TLS 证书(文本文件)
- 填写信息生产证书请求文件(CSR)
- 将请求文件提交给证书颁发机构获得私钥(key)导入自己服务器
- 或者用自己的key来获得公钥(CRT),将其发给客户端,私钥自己部署。
1.带有私钥的证书
由 Public Key Cryptography Standards #12,PKCS#12标准定义,包含了公钥和私钥的二进制格式的证书形式,以pfx作为证书文件后缀名。
2.二进制编码的证书
证书中没有私钥,DER 编码二进制格式的证书文件,以cer作为证书文件后缀名。
3.Base64编码的证书
证书中没有私钥,BASE64 编码格式的证书文件,也是以cer作为证书文件后缀名。