草庐IT

SSL/TLS协议

星河如雨落 2023-10-12 原文

SSL/TLS协议

文章目录

1 协议历史

  • 1994年Netscape开发了SSL(Secure Socket Layer)安全套接层协议,专门用于保护Web通讯
  • 版本和历史
    • 1.0,不成熟
    • 2.0,基本上解决了Web通讯的安全问题Microsoft公司发布了PCT(Private Communication Technology),并在IE中支持
    • 3.0,1996年发布,增加了一些算法,修改了一些缺陷
    • TLS 1.0(Transport Layer Security传输层安全协议, 也被称为SSL 3.1),1997年IETF发布了Draft,同时,Microsoft宣布放弃PCT,与Netscape一起支持TLS 1.0
    • 1999年,发布RFC 2246(The TLS Protocol v1.0)

2 协议的目标

目标:

​ SSL被设计用来使用TCP提供一个可靠的端到端安全服务,为两个通讯个体之间提供保密性和完整性(身份鉴别)

3 SSL体系结构

协议分为两层

  • 底层:SSL记录协议

  • 上层:SSL握手协议、SSL改变加密规格协议、SSL报警协议

4 两个主要的协议

  • SSL记录协议
    • 建立在可靠的传输协议(如TCP)之上
    • 它提供连接安全性,有两个特点
      • 保密性,使用了对称加密算法
      • 完整性,使用HMAC算法
    • 用来封装高层的协议
  • SSL握手协议
    • 客户和服务器之间相互鉴别
    • 协商加密算法和密钥
    • 它提供连接安全性,有三个特点身份
      • 鉴别,至少对一方实现鉴别,也可以是双向鉴别
      • 协商得到的共享密钥是安全的,中间人不能够知道
      • 协商过程是可靠的

5 SSL的两个重要概念

  • SSL连接(connection)
    • 一个连接是一个提供一种合适类型服务的传输(OSI 分层的定义)。
    • SSL的连接是点对点的关系。
    • 连接是暂时的,每一个连接和一个会话关联。
  • SSL会话(session)
    • 一个SSL会话是在客户与服务器之间的一个关联。会话由Handshake Protocol创建。会话定义了一组可供多个连接共享的密码安全参数。
    • 会话用以避免为每一个连接提供新的安全参数所需昂贵的协商代价。

6 会话状态参数

  • Session identifier: 会话标识,服务器选择的一个任意字节序列, 用以标识一个活动的或可激活的会话状态。
  • Peer Certificate: 对等证书,标识服务器的X.509.v3证书。可为空。
  • Compression method: 压缩方法,加密前进行数据压缩的算法。
  • Cipher spec: 加密规格,指明数据体加密的算法(无,或DES等) 以及散列算法(如MD5或SHA-1)用以计算MAC。还包括其它参数,如散列长度。
  • Master secret:主密钥, 48位秘钥,在client与server之间共享。
  • Is resumable:可恢复标志,一个标志,指明该会话是否能用于产生 一个新连接。

7 连接状态参数

  • Server and client random:服务器与客户机随机数, server 和 client 为每一个连接所选择的字节序号。
  • Server write MAC secret:服务器写MAC密钥, 一个密钥,用来对server 送出的数据进行MAC操作。
  • Client write MAC secret:客户机写MAC密钥, 一个密钥,用来对client送出的数据进行MAC操作。
  • Server write key: 服务器写密钥,用于server 进行数据加密,client进行数据解密的对 称保密密钥;
  • Client write key:客户机写密钥,用于client 进行数据加密,server进行数据解密的对 称保密密钥;
  • Initialization vectors: 初始化向量,当数据加密采用CBC方式时,每一个密钥保持 一个IV。该字段首先由SSL Handshake Protocol,以后保留每次最后 的密文数据块作为IV。
  • Sequence number: 序号,每一方为每一个连接的数据发送与接收维护单独的顺序号。当一方发送或接收一个改变的cipher spec message时,序号置为0, 最大264-1。

8 SSL Record Protocol

  • SSL Record Protocol为SSL连接提供两种服务
    • 保密性。Handshake Protocol定义一个共享的保密密钥用于对SSL有效载荷加密。
    • 消息完整性。Handshake Protocol定义一个共享的保密密钥用于形成MAC。

9 SSL记录协议中的操作

  • 第一步,fragmentation

    • 上层消息的数据被分片成214(16384)字节大小的块,或者更小
  • 第二步,compression(可选)

    • 必须是无损压缩,如果数据增加的话,则增加部分的长度不超过1024字节
  • 第三步,MAC 计算:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 第四步, 加密, 可供选择的加密算法[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    • 采用CBC模式,算法由cipher spec指定
    • 数据长度不超过214+2048字节

10 SSL握手协议使用的消息

11 SSL握手协议的流程

(1)建立起安全协商:

​ 交换Hello消息,包括协议版本、会话ID、密码套件、压缩算法、初始随机数等;

(2)服务器鉴别和密钥交换:

​ 服务器发送证书,交换密钥并请求证书;然后发送信号结束hello消息阶段;

(3)客户鉴别和密钥交换:

​ 如果服务器请求了证书,则客户发送证书。密户发送密钥交换,客户可以发送证书验证结果 ;

(4)结束:

​ 交换密码套件并结束握手协议

有关SSL/TLS协议的更多相关文章

  1. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  2. Ruby SSL 错误 - sslv3 警报意外消息 - 2

    我正在尝试在ruby​​脚本中连接到服务器https://www.xpiron.com/schedule。但是,当我尝试连接时:require'open-uri'doc=open('https://www.xpiron.com/schedule')我收到以下错误消息:OpenSSL::SSL::SSLError:SSL_connectreturned=1errno=0state=SSLv2/v3readserverhelloA:sslv3alertunexpectedmessagefrom/usr/local/lib/ruby/1.9.1/net/http.rb:678:in`conn

  3. ruby - 如何在非 SSL 或 http 网站上使用 Stripe? - 2

    我正在使用Rails3.2.6和Stipe进行支付。是否有可能在不购买ssl证书的情况下进行付款。我可以使用Stripe页面作为我的支付页面吗? 最佳答案 您可以使用stripe.js在技术上跳过SSL但我强烈建议您设置SSL。它所做的是将信用卡信息直接传递给stripe,然后stripe会给你一个token,用于实际进行收费。这样做意味着信用卡信息永远不会接触您的服务器,您不必担心PCI合规性。但是,您仍应设置SSL以防止中间人攻击。您可以在https://stripe.com/docs/tutorials/forms找到有关如何

  4. ruby - HTTP POST 上的 SSL 错误(未知协议(protocol)) - 2

    尝试通过SSL连接到ImgurAPI时出现错误。这是代码和错误:API_URI=URI.parse('https://api.imgur.com')API_PUBLIC_KEY='Client-ID--'ENDPOINTS={:image=>'/3/image',:gallery=>'/3/gallery'}#Public:Uploadanimage##args-Theimagepathfortheimagetoupload#defupload(image_path)http=Net::HTTP.new(API_URI.host)http.use_ssl=truehttp.verify

  5. 物联网MQTT协议详解 - 2

    一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su

  6. ruby - ssl`sysread_nonblock' : end of file reached (EOFError) - 2

    我编写了一个使用ruby​​线程的代码。require'rubygems'require'net/http'require'uri'defget_response()uri=URI.parse('https://..........')http=Net::HTTP.new(uri.host,uri.port)http.use_ssl=true----------endt1=[]15.timesdo|i|t1[i]=Thread.new{hit_mdm(i)sleep(rand(0)/10.0)}endt1.each{|t|t.join}代码工作正常,但是当程序执行到最后时它会抛出以下错

  7. ruby - 使用 Ruby/Puma 的本地 SSL - 2

    我正在运行本地puma服务器,但无法在SSL下加载资源。我有一个本地签名的证书。我正在尝试使用以下配置运行服务器:puma-b'ssl://127.0.0.1:9292?key=/path/to/certs/localhost.unecrypted.key&cert=/path/to/certs/localhost.crt'现在,当我访问https://localhost:9292或https://127.0.0.1:9292时,浏览器只是旋转并且没有来自服务器的响应。不返回任何资源。它两次向我显示HTML标题标签,但几乎总是什么也得不到。有什么想法吗?其他想法?确实需要在本地运行此应

  8. ruby-on-rails - ruby open ssl api for encrypted key (without nodes option) - 2

    在安装了openssllib的linux机器上,当您执行带有“-nodes”选项的“opensslpkcs12”时,您将获得带有未加密私钥的输出,但如果您跳过–nodes选项,则输出将具有加密的私钥。e.g.opensslpkcs12-intest.pfx-outtest.pem你应该看到像下面这样加密的私钥-----BEGINENCRYPTEDPRIVATEKEY-----MIIFDjBABgkqhkiGG7s=-----ENDENCRYPTEDPRIVATEKEY-----如何使用ruby​​的开放ssl库实现上述目标?这就是我用ruby​​生成私钥的方式:@private_key

  9. ruby - 如何获得带有 SSL 客户端证书的 HTTPS 请求以与 Ruby EventMachine 一起使用? - 2

    我正在尝试使用RubyEventMachine访问使用SSL证书身份验证的HTTPSWeb服务,但我没有让它工作。我编写了以下简单代码块来对其进行端到端测试:require'rubygems'require'em-http'EventMachine.rundourl='https://foobar.com/'ssl_opts={:private_key_file=>'/tmp/private.key',:cert_chain_file=>'/tmp/ca.pem',:verify_peer=>false}http=EventMachine::HttpRequest.new(url).g

  10. ruby-on-rails - 萨翁 SSL 问题 - 2

    我正在努力让Savongem连接到我们的一台服务器。我不断收到一条错误消息,指出我无法通过ssl。我已经阅读了许多教程和修复程序,但似乎都没有用。感谢任何帮助-如果我能度过它,这将成为我的星期一:-)。错误:D,[2011-06-20T09:43:02.002993#10328]DEBUG--:RetrievingWSDLfrom:http://path_to_wsdl:4443/sm/services/mailing/2009/03/02?wsdlD,[2011-06-20T09:43:02.129057#10328]DEBUG--:HTTPIexecutesHTTPGETusing

随机推荐