HTTPS认证过程备忘

信息摘要message digest = hash之后的内容
签名 = 利用私钥对信息摘要进行加密后的内容

数字签名是个加密的过程,数字签名验证是个解密的过程
数字签名: 利用私钥对信息摘要进行加密,发送给对方
数字签名验证: 利用公钥解密出摘要,hash内容后对比hash值

数字证书

一个 Certificate 由 Data 和 Signature 两部分组成。

其中 Data 包含的内容有:
证书版本号:X.509v3
序列号:一个 CA 机构内是唯一的,但不是全局唯一
签名算法:签名的计算公式为RSA(sha256(Data), IssuerPrivateKey)
签发者:DN(Distinguished Name)
有效期:证书的有效期间 [Not Before, Not After]
证书拥有者:也是一个 DN公钥长度一般是 2048bit,1024bit已经被证明不安全
扩展字段:证书所携带的域名信息会配置在 SAN 中(X509v3 Subject Alternative Name)

Signature 位于证书最末尾,签名算法 sha256WithRSAEncryption 在 Data 域内已经指明 ,而 RSA 进行非对称加密所需的私钥(Private Key)则是由 Issuer 提供,Issuer 是一个可以签发证书的证书,由证书权威 CA 提供,CA 需要保证证书的有效性,而且 CA 的私钥需要绝密保存,一旦泄露出去,证书可能会被随意签发,也就意味 CA 机构要赔很多钱,跟保险理赔类似。

身份校验过程

以浏览器为例说明如下整个的校验过程:

(1)首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验

(2)浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发

(3)如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。

(4)如果找到,那么浏览器就会从操作系统中取出 颁发者CA 的公钥,然后对服务器发来的证书里面的签名进行解密

(5)浏览器使用相同的hash算法计算出服务器发来的证书Data部分的hash值,将这个计算的hash值与证书中签名进行解密出来的hash值做对比

(6)对比结果一致,则证明服务器发来的证书合法,没有被冒充

(7)此时浏览器就可以读取证书中的公钥,用于后续加密了

HTTPS认证全过程:

C发起请求到S;

S收到后将证书发送给C;

然后执行上述的身份校验过程

之后C随机生成一个字串并计算其hash值,然后只将字串明文发送给S;

S收到后,计算字串的hash值并以自己的私钥对该hash值进行加密,然后将其发回给C;

C收到后以公钥进行解密得到一个hash值,和第四步得到的hash值比较,相同则表明该公司确实是证书中所提到的公司;

确认完后C会生成一个密钥和一个对称加密算法,将其以证书中的公钥加密后发送给S;

S收到后用自己的私钥解密得到该加密算法和密钥,以后S和C的通信就靠这个密钥和加密算法完成。至此HTTPS通信过程完成。

总结一下:

HTTPS要使客户端与服务器端的通信过程得到安全保证,必须使用的对称加密算法,但是协商对称加密算法的过程,需要使用非对称加密算法来保证安全,然而直接使用非对称加密的过程本身也不安全,会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用数字证书签发机构颁发的证书来保证非对称加密过程本身的安全。这样通过这些机制协商出一个对称加密算法,就此双方使用该算法进行加密解密。从而解决了客户端与服务器端之间的通信安全问题。

web安全