换个详细点的捋一捋

首先,用户的操作系统会内置一些CA机构的CA证书

CA证书:CA机构颁发给自己的证书

组成:

  • CA的公钥
  • 颁发者
  • 颁发机构
  • 有效期
  • 其他内容
  • 签名(CA私钥加密过):
    • 对以上内容进行hash=>hash值
    • hash的算法

这里签名是CA私钥加密过的,如果黑客用公钥解开签名,然后篡改信息再Hash,带上hash算法,就没办法加密回去,因为没CA私钥。

如果篡改成自己的公钥,再hash,带上hash算法,用自己的私钥加密(签名),这就是伪造CA证书,这样等于白干,因为操作系统会提示这个证书不可信,不过CA证书一般都是操作系统内置的,不需要网络请求,所以没机会拦截篡改。一般问题都出在CA机构内部。

那一个网站,它首先要找CA机构认证,认证完CA机构会给一张证书,这个就是网站证书了

网站证书:CA机构给网站颁发的证书

组成:

  • 网站的公钥
  • 颁发者(CA机构)
  • 颁发机构(网站)
  • 有效期
  • 其他内容
  • CA签名,也就是指纹(CA私钥加密过的):
    • 对以上内容进行hash=>hash值
    • hash的算法

这里的CA签名也是用CA私钥加密过的,如果黑客用CA公钥解开签名,然后篡改网站的公钥再hash,带上hash算法,就没法加密回去,因为没CA私钥。用黑客自己的私钥加密回去的话,用户拿到证书,根据颁发者(CA机构)拿出CA公钥,它解不开黑客的私钥。那就通信终止了。

场景:

  • 首先用户请求网站给个证书看看
  • 网站给了网站证书
  • 用户就根据证书的颁发者去操作系统找颁发者的证书(也就是操作系统中的CA证书),去拿到CA公钥出来
  • 然后用CA公钥解开CA签名拿到hash值1和hash算法
  • 然后用hash算法自己计算整个证书的内容得到hash值2
  • 对比hash值1和hash值2来验证网站证书有没有被篡改
  • 验证通过后会生成一串随机字符串,自己保留一份,然后发一份让网站用网站的私钥加密这串随机字符串
  • 网站把这串随机字符串用网站的私钥加密,发回给客户
  • 用户再用证书上的网站的公钥去解,能解开,解开后对比回来的随机字符串和自己保留的那份随机字符串是不是一致
  • 一致则说明对方就是服务器,而不是黑客瞎搞

为了服务器安全所以用户先hash一下再发,服务器加密就行了。用户解密完对比回来的hash跟自己留着的hash是不是一直就行了。hash过才能防止黑客发送一些有规律的字符串给服务器,从而寻找加密的规律。以此保护服务器私钥的安全

如果证书没问题,对方却是黑客,那字符串用黑客的私钥加密,用户用网站的公钥是解不开的。 除非黑客能弄到网站的私钥,才能在这插一脚,像上面说的黑客发送有规律的字符串 不过被hash解决了,接下来就要传输密钥了。


用户验证了一直,就用自己生成一串密钥,然后用网站的公钥加密,发给网站 网站用网站的私钥解密,得到密钥。 然后双方开始用密钥加密信息通信。


通信的时候用户的数据写完,会先把内容hash一下生成摘要,再用密钥加密 网站收到之后会先用密钥解密,然后网站自己hash一下内容生成摘要,对比传过来的摘要看看是否一致 就没问题,不一致则说明黑客在中间捣乱。则断开连接

所以用密钥的时候,其实是 信息内容本身+hash出来的信息摘要,然后才加密

总结