SSL证书认证过程

SSL证书生成及信任过程:

1、SSL Server 自己生成一个 私钥 / 公钥对。server.key/server.pub 

2、然后确认申请信息(域名、申请者信息、公钥),最后封装为一个.csr文件(文件内不包含私钥,私钥只在服务端存在)。

3、服务端将申请信息发送到CA,CA通过线上、线下多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法、该组织是否拥有本域名的所有权等。

4、如果信息审核通过,将用 ca.key(CA私钥) 和请求文件加密生成 server.crt(服务器证书)  ,签发给申请者(服务端)。

   证书包含以下信息:申请者公钥、申请者组织信息、签发机构CA信息、有效时间、证书序列号等信息的明文,同时还会包含一个签名和签名产生的算法:首先使用散列函数计算公开的明文信息的信息摘要,然后采用CA的私钥对信息摘要进行加密,密文即为签名。所以服务器证书就是个用CA私钥签名的数字签名

5、客户端需要信任该网站的话,需要保存该服务的CA证书ca.crt(注意CA证书不是服务器证书,ca.crt与步骤四的ca.key是一对,ca.crt保存了CA的公钥)

6、客户端向服务端发送请求时,服务端回返回服务器证书给客户端,客户端使用ca证书的公钥对数字签名进行解密,得到服务的信息摘要,再与从服务端返回的证书明文信息使用相同算法计算出来的信息摘要对比,如果一致则认证证书合法

7、客户端还会验证证书相关的其他信息,如域名信息、有效时间等。

 

认证成功后具体的交易流程:

单向认证:

1、客户端发送请求给服务端,服务端返回服务器证书。

2、客户端验证证书通过后,生成一个随机密钥(对称密钥),并用该密钥对需要发送的数据进行加密,生成密文;

3、再用服务器的公钥对上面的随机密钥加密,将密钥的加密串与数据密文一起发送给服务器。

4、服务器接收数据后,先用私钥解密密钥加密串获取随机密钥明文,再用密钥对密文进行解密得到明文报文。

 

双向认证(与单向的主要区别是请求报文多了数字签名):

1、客户端发送请求给服务端,服务端返回服务器证书。

2、客户端校验证书通过后,将客户端的服务器证书发送给服务端

3、服务器校验证书通过后,获取客户端的公钥

4、客户端对报文进行哈希算法生成信息摘要

5、客户端用自己的私钥对信息摘要进行加密生成数字签名,并添加到报文里

6、客户端生成一个随机密钥(对称密钥),并用该密钥对需要发送的数据进行加密,生成密文;

7、再用服务器的公钥对上面的随机密钥加密,将密钥的加密串与数据密文一起发送给服务器。

8、服务器接收数据后,先用私钥解密密钥加密串获取随机密钥明文,再用密钥对密文进行解密得到明文报文。

9、服务的获取数字签名,用客户端的公钥继续解密,得到信息摘要

10、服务器将收到的信息摘要和根据收到的明文报文新产生的信息摘要进行比较,如果一致,说明收到的信息没有被修改过。 

 

HTTP证书验证使用:

keystore和truststore的概念:

keystore可以看成一个放key的库,key就是公钥,私钥,数字签名等组成的一个信息。

truststore是放信任的证书的一个store
 

truststore和keystore的性质是一样的,都是存放key的一个仓库,区别在于,truststore里存放的是只包含公钥的数字证书,代表了可以信任的证书,而keystore是包含私钥的。

使用过程:

如果我们作为客户端访问HTTPS服务端:

1、使用单向认证的方式

客户端需先将服务端的CA证书的证书链里的公钥都保存到truststore里,提供给https使用。

2、双向认证方式:

客户端需先将服务端的CA证书的证书链里的公钥都保存到truststore里,提供给https使用。

需要将自己的服务器证书(公钥及数字签名)及私钥存放在keystore里。

如果我们作为服务端提供HTTPS服务:

需要将自己的服务器证书(公钥及数字签名)及私钥存放在keystore里。

 

 

 

你可能感兴趣的:(SSL)