基于SSL/TSL证书实现HTTPS双向认证1-原理介绍

本文主要讲述了以下内容:

  1. 介绍了SSL和TSL的关系,
  2. 服务端server申请CA数字证书,
  3. HTTPS认证的过程和原理。

SSL和TSL的关系

由于HTTPS的推出受到了很多人的欢迎,在SSL更新到3.0时,IETF对SSL3.0进行了标准化,并添加了少数机制(但是几乎和SSL3.0无差异),标准化后的IETF更名为TLS1.0(Transport Layer Security 安全传输层协议),可以说TLS就是SSL的新版本3.1,并同时发布“RFC2246-TLS加密协议详解”。

  • SSL(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。

  • TLS(Transport Layer Security,传输层安全):其前身是 SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发,1999年从 3.1 开始被 IETF 标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2。

  • HTTPS:HTTP + TLS (在HTTP上套了TLS)

    HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer)

服务端申请证书

HTTPS认证需要服务端首先申请一份证书,这里介绍一下如何申请证书。

名词解释

  • CA机构:国家所认可的具有权威、公平公正的第三方机构,其作用是验证数字证书拥有者是否合法,并以此签发证书。
  • CA数字证书:由CA机构发行的数字证书,其中包括两把密钥:一把公钥和一把私钥。服务端可以利用相关的工具来生成CA数字证书,以此加密自己的文件或是保护自己的网址。

证书文件格式

证书相关文件有多种格式,常见格式:.crt.key.req.csr.pem.der

xx.crt:证书文件
xx.key:私钥文件
xx.req:请求文件
xx.csr:请求文件
xx.pem:证书文件为 pem 格式(文本文件)
xx.der:证书文件为 der 格式(二进制文件)

实际上,上述文件的扩展名可以随意命名。只是为了容易理解文件的功能而选择大家都认识的命名方式。但是,上述文件是有格式的,只能是 .pem 格式或者 .der 格式。使用什么格式的文件取决于需求。

服务端申请证书过程

  1. 服务端server生成.crt证书文件,其中包括公钥申请者信息域名
  2. server把证书文件发给CA机构:
    (1) CA机构根据crt文件生成一段Hash摘要,
    (2) 用CA私钥加密,生成签名。
  3. CA机构把证书发给server,其中包括.crt文件、 签名

HTTPS认证过程

主角:客户端client、服务端server。

  1. 客户端client –〉 服务端server:
    client发起访问,携带cipher suit(密码套件,包括自己可用的加密方案)随机数1(用于后续对称密钥)。

  2. 客户端client 〈– 服务端server:
    server发送 确认好双方的加密方案随机数2

  3. 客户端client 〈– 服务端server:
    (1)server发送数字证书
    (2)client验证证书:拿CA机构的公钥去验证该证书,若成功,则获得server公钥,生成随机数3,用服务端公钥加密随机数3作为pre-key

    数字证书用处
    若黑客中途篡改,则签名验证不会通过;
    若黑客修改证书信息后再重新计算签名?不可能,因为黑客拿不到CA机构的私钥。

  4. 客户端client –〉 服务端server:
    (1)client发送pre-key
    (2)server用服务端私钥解密pre-key,得出随机数3

  5. 客户端client <–> 服务端server:
    双方用随机数1、2、3生成对称密钥master-key,之后用master-key传输数据。