zoukankan      html  css  js  c++  java
  • 面试题-------SSL协议简介

    SSL协议简介

    SSL简介

    Secure Socket Layer,为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。只要3.0版本以上之I.E.或Netscape浏览器即可支持SSL。当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。

    SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。

    SSL协议提供的安全通道有以下三个特性:

    机密性:SSL协议使用密钥加密通信数据。

    可靠性:服务器和客户都会被认证,客户的认证是可选的。

    完整性:SSL协议会对传送的数据进行完整性检查。

    SSL的握手与密钥协商过程

    基于RSA握手和密钥交换的客户端验证服务器为示例详解TLS/SSL握手过程。

    TLS/SSL握手过程

    (1).client_hello

    客户端发起请求,以明文传输请求信息,包含:版本信息,加密套件候选列表,压缩算法候选列表,随机数,扩展字段等信息。

    ClientHello 客户发送CilentHello信息,包含如下内容:

    (1)客户端可以支持的SSL最高版本号

    (2)一个用于生成主秘密的32字节的随机数(random_C)。(用于生成主密钥)

    (3)一个确定会话的会话ID。

    (4)一个客户端可以支持的密码套件列表。

    (5)一个客户端可以支持的压缩算法列表。

    (2).server_hello+server_certificate+sever_hello_done

    l  server_hello
    服务端返回协商的信息结果,包括选择使用的协议版本 version,选择的加密套件,选择的压缩算法、随机数 random_S 等,其中随机数用于后续的密钥协商(用于产生主密钥);

    l  server_certificates
    服务器端配置对应的证书链(公钥放在证书中),用于身份验证与密钥交换;

    l  server_hello_done
    通知客户端 server_hello 信息发送结束;

    (3).证书校验

    客户端验证证书的合法性,如果验证通过才会进行后续通信,否则根据错误情况不同做出提示和操作,合法性验证包括如下:

    证书链的可信性、证书是否吊销、有效期 、域名

    (4).client_key_exchange+change_cipher_spec+encrypted_handshake_message

    l  client_key_exchange
    合法性验证通过之后,客户端计算产生随机数字 Pre-master,并用证书公钥加密,发送给服务器;

    l  此时客户端已经获取全部的计算协商密钥需要的信息:两个明文随机数 random_C 和 random_S 与自己计算产生的 Pre-master,计算得到协商密钥;enc_key=Fuc(random_C, random_S, Pre-Master)

    l  change_cipher_spec
    客户端通知服务器后续的通信都采用协商的通信密钥和加密算法进行加密通信;

    l  encrypted_handshake_message
    结合之前所有通信参数的 hash 值与其它相关信息生成一段数据,采用协商密钥 session secret 与算法进行加密,然后发送给服务器用于数据与握手验证;

    (5).change_cipher_spec+encrypted_handshake_message

    l  服务器用私钥解密加密的 Pre-master 数据,基于之前交换的两个明文随机数 random_C 和 random_S,计算得到协商密钥:enc_key=Fuc(random_C, random_S, Pre-Master);

    l  计算之前所有接收信息的 hash 值,然后解密客户端发送的 encrypted_handshake_message,验证数据和密钥正确性;

    l  change_cipher_spec
    验证通过之后,服务器同样发送 change_cipher_spec 以告知客户端后续的通信都采用协商的密钥与算法进行加密通信;

    l  encrypted_handshake_message
    服务器也结合所有当前的通信参数信息生成一段数据并采用协商密钥 session secret 与算法加密并发送到客户端;

    (6).握手结束

    客户端计算所有接收信息的 hash 值,并采用协商密钥解密 encrypted_handshake_message,验证服务器发送的数据和密钥,验证通过则握手完成;

    (7).加密通信

    开始使用协商密钥与算法进行加密通信。

    数字证书

    数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。数字证书还有一个重要的特征就是只在特定的时间段内有效。

  • 相关阅读:
    mysql函数
    maven 配置自动本地/线上不同配置自动打包
    maven clean后 编译报错
    htmlunit填坑
    java正则表达式移除网页中注释代码
    spark 计算结果写入mysql 案例及常见问题解决
    pychrome激活
    hadoop集群常见问题解决
    hadoop+spark集群搭建
    C++:构造函数2——拷贝构造函数
  • 原文地址:https://www.cnblogs.com/qingergege/p/7811705.html
Copyright © 2011-2022 走看看