• SSL/TLS协议通讯过程


    数字证书

    数字证书也称SSL服务器证书,SSL证书就是遵循SSL协议,由受信任的数字证书颁发机构CA所颁发。具有服务器身份验证和数据传输加密功能

    CA:即证书授权中心(CA,Certificate Authority)。CA是负责签发证书,认证证书,管理已颁发证书机构,用户向CA提出申请后,CA负责审核用户信息,然后对关键信息利用私钥进行“签名”,并公开对应的公钥,客户端可以利用公钥验证签名

    CSR: CSR(Certificate Signing Request) 即证书请求文件,也就是证书申请者在申请数字证书时由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件,证书申请者只要把CSR文件提交给CA机构,CA使用其根证书私钥签名生产了证书公钥文件,也就是办法给用户的证书

    SSL/TLS协议通讯过程

    1. 客户端向服务器端索要并验证公钥
    2. 双方协商生产“对话密钥”(对称密钥)
    3. 双方采用“对话密钥”进行加密通讯

    详细通讯过程如下:

    1、客户端向服务端发送请求(clientHello)

    提供信息:

    • 客户端支持协议版本,比如tls1.0版
    • 一个客户生产的随机数,用于生成“对话密钥”
    • 支持的加密算法,比如RSA公钥加密
    • 支持的压缩方法

    2、服务器响应(ServerHello)

    • 确认使用的加密通信协议版本,比如TLS1.0版本,如果浏览器和服务器支持的版本不一致,服务器关闭加密通信
    • 一个服务器生成的随机数,用于生成“对话密钥”
    • 确认使用的加密算法
    • 服务器证书(SSL证书)

    除了上面这些信息,如果服务器需要确认客户端的身份,就会再包含一项请求,要求客户端提供"客户端证书"。比如,金融机构往往只允许认证客户连入自己的网络,就会向正式客户提供USB密钥,里面就包含了一张客户端证书。

    3、客户端回应

    客户端收到服务器的响应中服务器证书,首先向CA机构验证服务器证书。如果证书不是可信机构颁发,或者证书中的域名与实际域名不一致,或者证书已经过期,就会向访问者显示警告信息,有其选择是否继续通信。

    • 如果证书没有问题(验证SSL证书)。客户端会从证书中提取出服务器的公钥,然后向服务器发送以下信息
    • 一个随机数。该随机数用于服务器公钥加密,防止被窃听。
    • 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
    • 客户端握手结束通知,表示客户端的握手阶段已经结束。 这一项同时也是前面发送的所有内容的bash值,用来供服务器校验。--------(消息内容即bash值 +随机数)使用公钥加密 发送给服务器端--服务器端私钥解密

    上面第一项的随机数,是整个握手阶段出现的第三个随机数,又称"pre-master key"。有了它以后,客户端和服务器就同时有了三个随机数,接着双方就用事先商定的加密方法,各自生成本次会话所用的同一把"会话密钥"

    4、服务器的响应

    服务器收到客户端的第三个随机数之后,计算生成本次会话所用的“会话密钥”,然后,想客户端发送以下信息。

    • 编码改变通知,表示随后的信息都将使用双方商定的加密方法和密钥发送
    • 服务器握手结束通知,表示服务器的握手结束,这一项同时也发送前面所有内容的bash值,用来供客户端校验。
  • 相关阅读:
    MySQL 5.7 解压版 安装教程(图文详细)[Windows]
    Markdown测试
    Iterator-Java
    设计模式-Iterator
    【转载】图解Java常用数据结构(一)
    SpringBoot项目打包成jar后,启动脚本
    spring boot 中文乱码问题
    Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster
    Caused by: java.lang.NoClassDefFoundError: javax/el/ELManager
    javax.crypto.BadPaddingException: Given final block not properly padded
  • 原文地址:https://www.cnblogs.com/gavin11/p/13112014.html
Copyright © 2020-2023  润新知