Kikimo's blog

An occasional blog on programming

SSL/TLS 协议简介

SSL/TLS 是一套提供网络安全通信的协议, 它一般运行在 TCP 层上面. 概括而言, SSL/TLS 协议通过非对称加密算法来验证身份和交换对称加密算法的秘钥, 然后通过对称加密算法来加密和解密通信数据. 非对称加密算法的特点是加密的私钥可解密的公钥是不同的, 所以如果别人能用公钥解密你发送的加密数据, 那就说明你拥有对应的私钥, 这就可以证明你的身份了. 公钥在通信的时候要发送给客户端, 为了证明这个公钥是合法的, 它还必须经过第三方权威机构签名, 否则任何人都可以自己生成一对公钥/私钥来伪造身份. 权威机构的签名用的也是非对称加密算法, 不同的是, 权威机构的公钥一般会预装到客户端操作系统上. 这样用户就可以通过预装的 CA 的公钥来验证服务器发送过来的私钥.

cert 证书文件

cert 证书文件中包含着公钥密码, 它必须经过 Root CA 或者 intermediate CA 签名后才是有效的. cert 证书文件包含着给他签名的 CA 的信息. 客户端可以通过系统上预装的 CA 的证书来验证该证书文件的有效性. 如果找不到对应的 CA 那这就不是一个可信的证书文件.

csr 文件

csr 文件即证书签名请求文件(Certificate Signing Request), csr 文件一般包含着组织名称, 域名, 私钥密码等信息, 当你要请求 CA 机构给你的证书签名是便要向 CA 机构提交 csr 文件.

root CA

权威证书签名机构. 用户的证书文件经过 root CA 的私钥签名后就为一个可信证书. root CA 的证书一般会预装在操作系统或者其他设备上. 假设某服务器的证书文件是经过某 root CA 签名, 该 root CA 的证书被预装到用户浏览器的系统上, 当用户浏览器需要和这台服务器建立安全连接是, 系统上的预装的 root CA 的证书便可以用来验证服务器发过来的证书.

intermediate CA 和证书链

很多时候, 服务器端没法直接获得 root CA 的证书签名(太贵了?). 这个时候便可以通过 intermediate CA 来获得证书签名. intermediate CA 他们的拥有 root CA 或者其他 intermediate CA 的证书签名. 对于 intermediate CA, 往上一直追溯他们的签名机构, 最顶端的一定是一个 root CA. 这就构成了一个证书签名链. 客户端的机器上一般只装有少数的 root CA 证书, 所以如果一个服务器证书是通过 intermediate CA 签名的, 那么在 ssl 握手时必须把自己的签名证书和证书链一起发送给客户端.

comments powered by HyperComments