Https、数字证书、SSL连接、中间人攻击

证书的签发原理

数字证书信息可以由申请者提供,包含域名等信息,CA机构签名后,这个证书就有效了,这个签名是数字签名,有效性来自RSA非对称加密

数字证书 = 域名数据(域名自己的公钥+域名等)+ 数据摘要(对域名的原始数据进行hash )+数字签名(对数据摘要使用CA机构自己的私钥加密的结果)

根证书:无条件信任的由系统内置的各大CA机构的证书,包含对应CA机构的公钥等

证书的验证原理

1.使用受信任的颁发者的公钥校验证书

使用本地的受信任的证书中的公钥(待验证的证书里指定了颁发者Issuer,因此可以快速找到它的公钥)来解密ssl链接中下发的的数字证书的数字签名,得到数据摘要S1,然后按相同的摘要算法对证书内容进行计算得到数据摘要S2,读取证书中的数据摘要S3,当S1=S2=S3说明证书确定是由正规机构颁发,并且内容完全正确

一般正规的官方网站,在https中所下发的证书的颁发者都是权威机构的证书,内置在系统当中,无条件信任的.

但在某些情况,可能需要校验颁发者证书是否可信,这就涉及到证书链的验证

2.证书链的验证

其中DN为 Dns Name 也就是域名,验证证书主要分为两步:

1.根据DN一级一级寻找root CA

当服务器下发域名为Owner’sDN的证书时(第一级),客户端根据下发的证书带的Issuer’s DN寻找本地的 Issuer’s DN证书,根据DN找到对应 issuer’s DN证书 (第二级)后继续寻找上一级,如果找到了根证书Root CA进行下一步

2.根据root CA 一级一级验证子证书

使用根证书的公钥去解密前一级证书的签名,得到解密后的数字摘要,然后使用相同算法对证书的其他数据进行数据摘要计算,如果数据一致则校验通过,然后再拿该证书的公钥去解密前一级的数字签名直到最开始的 Owner’sDN的证书 得到验证。

在ssl握手中:

Owner’sDN 证书由服务端下发,其公钥作用是对ssl传输握手过程的数据进行加密

Issuer’s DN 证书一般系统内置或者用户安装,其公钥作用是验证服务端下发的 Owner’sDN 证书是否合法

Root’s DN 证书一般是内置系统中,用于验证安装的证书是否合法

因此:各家网站有各家的私钥,不需要给CA机构,只需给CA机构公钥让他签名即可

Https原理

htpps是建立在安全的传输层( SSL/TSL( SSL (Secure Socket Layer),TLS (Transport Layer Security) ) )的http协议

SSL连接过程

地址

客户方发起hello+随机数+支持的对称加密算法

服务端回应随机数+数字证书

客户端使用根证书解数字证书的签名,对比数据摘要是否一致,一致则合法

对比一致后,根据本地+服务端随机数生成对称加密的算法秘钥然后使用下发的公钥加密

服务端收到对称加密算法秘钥以及加密算法

SSL随机数的用处:

防止找到规律,防止重放攻击(以复制一份完全一样的数据,达到成功连接的效果)

证书链相关参考:https://www.jianshu.com/p/fcd0572c4765

https明文抓包(中间人攻击)

前提是需要你安装抓包工具生成的根证书,每次发给服务端的数据,先由抓包工具用私钥解密,然后用服务器的公钥加密,二次打包发给服务端,

下行道理同上