SSL 工作原理

article/2025/11/3 23:40:47

博客引用处(以下内容在原有博客基础上进行补充或更改,谢谢这些大牛的博客指导):
SSL工作原理

首先说明下SSL工作原理:
1.1 产生背景
基于万维网的电子商务和网上银行等新兴应用,极大地方便了人们的日常生活。受到人们的青睐。

因为这些应用都须要在网络上进行在线交易,它们对网络通信的安全性提出了更高的要求。传统的万维网协议HTTP不具备安全机制——採用明文的形式数据传输、不能验证通信两方的身份、无法防止传输的数据被篡改等,导致HTTP无法满足电子商务和网上银行等应用的安全性要求。

Netscape公司提出的安全协议SSL,利用数据加密、身份验证和消息完整性验证机制,为网络上数据的传输提供安全性保证。SSL能够为HTTP提供安全连接,从而非常大程度上改善了万维网的安全性问题。

1.2 技术长处
SSL具有例如以下长处:

l 提供较高的安全性保证。

SSL利用数据加密、身份验证和消息完整性验证机制。保证网络上传输数据的安全性。

l 支持各种应用层协议。

尽管SSL设计的初衷是为了解决万维网安全性问题,可是因为SSL位于应用层和传输层之间。它能够为不论什么基于TCP等可靠连接的应用层协议提供安全性保证。

l 部署简单。眼下SSL已经成为网络中用来鉴别站点和网页浏览者身份,在浏览器使用者及Webserver之间进行加密通信的全球化标准。SSL协议已被集成到大部分的浏览器中,如IE、Netscape、Firefox等。这就意味着差点儿随意一台装有浏览器的计算机都支持SSL连接。不须要安装额外的client软件。

2 协议安全机制
SSL协议实现的安全机制包含:

l 传输数据的机密性:利用对称密钥算法对传输的数据进行加密。

l 身份验证机制:基于证书利用数字签名方法对server和client进行身份验证,当中client的身份验证是可选的。

l 消息完整性验证:消息传输过程中使用MAC算法来检验消息的完整性。

2.1 传输数据的机密性
网络上传输的数据非常easy被非法用户窃取,SSL採用在通信两方之间建立加密通道的方法保证传输数据的机密性。

所谓加密通道,是指发送方在发送数据前,使用加密算法和加密密钥对数据进行加密,然后将数据发送给对方。接收方接收到数据后,利用解密算法和解密密钥从密文中获取明文。没有解密密钥的第三方,无法将密文恢复为明文,从而保证传输数据的机密性。

加解密算法分为两类:

l 对称密钥算法:数据加密和解密时使用同样的密钥。

l 非对称密钥算法:数据加密和解密时使用不同的密钥,一个是公开的公钥,一个是由用户秘密保存的私钥。

利用公钥(或私钥)加密的数据仅仅能用对应的私钥(或公钥)才干解密。

与非对称密钥算法相比。对称密钥算法具有计算速度快的长处,通经常使用于对大量信息进行加密(如对全部报文加密);而非对称密钥算法,一般用于数字签名和对较少的信息进行加密。

SSL加密通道上的数据加解密使用对称密钥算法。眼下主要支持的算法有DES、3DES、AES等,这些算法都能够有效地防止交互数据被窃听。

对称密钥算法要求解密密钥和加密密钥全然一致。因此,利用对称密钥算法加密数据传输之前。须要在通信两端部署同样的密钥。对称密钥的部署方法请參见“2.4 利用非对称密钥算法保证密钥本身的安全”。

2.2 身份验证机制
电子商务和网上银行等应用中必须保证要登录的Webserver是真实的,以免重要信息被非法窃取。SSL利用数字签名来验证通信对端的身份。

非对称密钥算法能够用来实现数字签名。因为通过私钥加密后的数据仅仅能利用相应的公钥进行解密,因此依据解密是否成功,就能够推断发送者的身份。如同发送者对数据进行了“签名”。比如。Alice使用自己的私钥对一段固定的信息加密后发给Bob,Bob利用Alice的公钥解密,假设解密结果与固定信息同样。那么就能够确认信息的发送者为Alice,这个过程就称为数字签名。

SSLclient必须验证SSLserver的身份,SSLserver是否验证SSLclient的身份。则由SSLserver决定。SSLclient和SSLserver的身份验证过程。请參见SSL握手过程。

使用数字签名验证身份时。须要确保被验证者的公钥是真实的,否则。非法用户可能会冒充被验证者与验证者通信。如图1所看到的。Cindy冒充Bob,将自己的公钥发给Alice,并利用自己的私钥计算出签名发送给Alice,Alice利用“Bob”的公钥(实际上为Cindy的公钥)成功验证该签名,则Alice觉得Bob的身份验证成功,而实际上与Alice通信的是冒充Bob的Cindy。SSL利用PKI提供的机制保证公钥的真实性。
在这里插入图片描述
图1 伪造公钥

2.3 消息完整性验证
为了避免网络中传输的数据被非法篡改,SSL利用基于MD5或SHA的MAC算法来保证消息的完整性。

MAC算法是在密钥參与下的数据摘要算法,能将密钥和随意长度的数据转换为固定长度的数据。利用MAC算法验证消息完整性的过程如图2所看到的。

发送者在密钥的參与下,利用MAC算法计算出消息的MAC值。并将其加在消息之后发送给接收者。接收者利用相同的密钥和MAC算法计算出消息的MAC值。并与接收到的MAC值比較。假设二者相同。则报文没有改变;否则,报文在传输过程中被改动,接收者将丢弃该报文。
在这里插入图片描述
图2 MAC算法示意图

MAC算法具有例如以下特征,使其可以用来验证消息的完整性:

l 消息的不论什么改变,都会引起输出的固定长度数据产生变化。通过比較MAC值,可以保证接收者可以发现消息的改变。

l MAC算法须要密钥的參与。因此没有密钥的非法用户在改变消息的内容后,无法加入正确的MAC值。从而保证非法用户无法任意改动消息内容。

MAC算法要求通信两方具有同样的密钥,否则MAC值验证将会失败。因此,利用MAC算法验证消息完整性之前,须要在通信两端部署同样的密钥。MAC密钥的部署方法请參见“2.4 利用非对称密钥算法保证密钥本身的安全”。

2.4 利用非对称密钥算法保证密钥本身的安全
对称密钥算法和MAC算法要求通信两方具有同样的密钥。否则解密或MAC值验证将失败。因此。要建立加密通道或验证消息完整性,必须先在通信两方部署一致的密钥。

SSL利用非对称密钥算法加密密钥的方法实现密钥交换,保证第三方无法获取该密钥。如图3所看到的,SSLclient(如Web浏览器)利用SSLserver(如Webserver)的公钥加密密钥,将加密后的密钥发送给SSLserver。仅仅有拥有相应私钥的SSLserver才干从密文中获取原始的密钥。SSL通常採用RSA算法加密传输密钥。
在这里插入图片描述

图3 密钥交换示意图

l 实际上,SSLclient发送给SSLserver的密钥不能直接用来加密数据或计算MAC值。该密钥是用来计算对称密钥和MAC密钥的信息,称为premaster secret。SSLclient和SSLserver利用premaster secret计算出同样的主密钥(master secret)。再利用master secret生成用于对称密钥算法、MAC算法等的密钥。

premaster secret是计算对称密钥、MAC算法密钥的关键。

l 用来实现密钥交换的算法称为密钥交换算法。非对称密钥算法RSA用于密钥交换时,也能够称之为密钥交换算法。

利用非对称密钥算法加密密钥之前,发送者须要获取接收者的公钥,并保证该公钥确实属于接收者。否则。密钥可能会被非法用户窃取。如图1所看到的。Cindy冒充Bob,将自己的公钥发给Alice。Alice利用Cindy的公钥加密发送给Bob的数据。Bob因为没有相应的私钥无法解密该数据,而Cindy截取数据后,能够利用自己的私钥解密该数据。SSL利用PKI提供的机制保证公钥的真实性。

2.5 利用PKI保证公钥的真实性
PKI通过数字证书来公布用户的公钥,并提供了验证公钥真实性的机制。数字证书(简称证书)是一个包括用户的公钥及其身份信息的文件,证明了用户与公钥的关联。

数字证书由权威机构——CA签发,并由CA保证数字证书的真实性。

SSLclient把密钥加密传递给SSLserver之前,SSLserver须要将从CA获取的证书发送给SSLclient,SSLclient通过PKI推断该证书的真实性。假设该证书确实属于SSLserver,则利用该证书中的公钥加密密钥,发送给SSLserver。

验证SSLserver/SSLclient的身份之前,SSLserver/SSLclient须要将从CA获取的证书发送给对端。对端通过PKI推断该证书的真实性。

假设该证书确实属于SSLserver/SSLclient,则对端利用该证书中的公钥验证SSLserver/SSLclient的身份。

3 协议工作过程
3.1 SSL的分层结构

在这里插入图片描述
图4 SSL协议分

如图4所看到的,SSL位于应用层和传输层之间,它能够为不论什么基于TCP等可靠连接的应用层协议提供安全性保证。SSL协议本身分为两层:

l 上层为SSL握手协议(SSL handshake protocol)、SSLpassword变化协议(SSL change cipher spec protocol)和SSL警告协议(SSL alert protocol)。

l 底层为SSL记录协议(SSL record protocol)。

当中:

l SSL握手协议:是SSL协议很重要的组成部分。用来协商通信过程中使用的加密套件(加密算法、密钥交换算法和MAC算法等)、在server和client之间安全地交换密钥、实现server和client的身份验证。

l SSLpassword变化协议:client和server端通过password变化协议通知对端。随后的报文都将使用新协商的加密套件和密钥进行保护和传输。

l SSL警告协议:用来向通信对端报告告警信息,消息中包括告警的严重级别和描写叙述。

l SSL记录协议:主要负责对上层的数据(SSL握手协议、SSLpassword变化协议、SSL警告协议和应用层协议报文)进行分块、计算并加入MAC值、加密。并把处理后的记录块传输给对端。

3.2 SSL握手过程
SSL通过握手过程在client和server之间协商会话參数,并建立会话。会话包括的主要參数有会话ID、对方的证书、加密套件(密钥交换算法、数据加密算法和MAC算法等)以及主密钥(master secret)。通过SSL会话传输的数据,都将採用该会话的主密钥和加密套件进行加密、计算MAC等处理。

不同情况下,SSL握手过程存在差异。

以下将分别描写叙述以下三种情况下的握手过程:

l 仅仅验证server的SSL握手过程

l 验证server和client的SSL握手过程

l 恢复原有会话的SSL握手过程

3.2.1 仅仅验证server的SSL握手过程
在这里插入图片描述

图5 仅仅验证server的SSL握手过程

如图5所看到的,仅仅须要验证SSLserver身份,不须要验证SSLclient身份时,SSL的握手过程为:

(1) SSLclient通过Client Hello消息将它支持的SSL版本号、加密算法、密钥交换算法、MAC算法等信息发送给SSLserver。

(2) SSLserver确定本次通信採用的SSL版本号和加密套件,并通过Server Hello消息通知给SSLclient。假设SSLserver同意SSLclient在以后的通信中重用本次会话,则SSLserver会为本次会话分配会话ID。并通过Server Hello消息发送给SSLclient。

(3) SSLserver将携带自己公钥信息的数字证书通过Certificate消息发送给SSLclient。

(4) SSLserver发送Server Hello Done消息。通知SSLclient版本号和加密套件协商结束。開始进行密钥交换。

(5) SSLclient验证SSLserver的证书合法后,利用证书中的公钥加密SSLclient随机生成的premaster secret,并通过Client Key Exchange消息发送给SSLserver。

(6) SSLclient发送Change Cipher Spec消息,通知SSLserver兴许报文将採用协商好的密钥和加密套件进行加密和MAC计算。

(7) SSLclient计算已交互的握手消息(除Change Cipher Spec消息外全部已交互的消息)的Hash值,利用协商好的密钥和加密套件处理Hash值(计算并加入MAC值、加密等),并通过Finished消息发送给SSLserver。SSLserver利用相同的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比較,假设二者相同,且MAC值验证成功,则证明密钥和加密套件协商成功。

(8) 相同地。SSLserver发送Change Cipher Spec消息,通知SSLclient兴许报文将採用协商好的密钥和加密套件进行加密和MAC计算。

(9) SSLserver计算已交互的握手消息的Hash值,利用协商好的密钥和加密套件处理Hash值(计算并加入MAC值、加密等),并通过Finished消息发送给SSLclient。SSLclient利用相同的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比較,假设二者相同。且MAC值验证成功。则证明密钥和加密套件协商成功。

SSLclient接收到SSLserver发送的Finished消息后。假设解密成功,则能够推断SSLserver是数字证书的拥有者,即SSLserver身份验证成功,由于仅仅有拥有私钥的SSLserver才干从Client Key Exchange消息中解密得到premaster secret,从而间接地实现了SSLclient对SSLserver的身份验证。

& 说明:

l Change Cipher Spec消息属于SSLpassword变化协议,其它握手过程交互的消息均属于SSL握手协议,统称为SSL握手消息。

l 计算Hash值。指的是利用Hash算法(MD5或SHA)将随意长度的数据转换为固定长度的数据。

3.2.2 验证server和client的SSL握手过程
在这里插入图片描述

图6 验证server和client的SSL握手过程

SSLclient的身份验证是可选的,由SSLserver决定是否验证SSLclient的身份。

如图6中蓝色部分标识的内容所看到的,假设SSLserver验证SSLclient身份。则SSLserver和SSLclient除了交互“3.2.1 仅仅验证server的SSL握手过程”中的消息协商密钥和加密套件外,还须要进行下面操作:

(1) SSLserver发送Certificate Request消息。请求SSLclient将其证书发送给SSLserver。

(2) SSLclient通过Certificate消息将携带自己公钥的证书发送给SSLserver。SSLserver验证该证书的合法性。

(3) SSLclient计算已交互的握手消息、主密钥的Hash值。利用自己的私钥对其进行加密,并通过Certificate Verify消息发送给SSLserver。

(4) SSLserver计算已交互的握手消息、主密钥的Hash值。利用SSLclient证书中的公钥解密Certificate Verify消息,并将解密结果与计算出的Hash值比較。假设二者同样,则SSLclient身份验证成功。

3.2.3 恢复原有会话的SSL握手过程
在这里插入图片描述

图7 恢复原有会话的SSL握手过程

协商会话參数、建立会话的过程中。须要使用非对称密钥算法来加密密钥、验证通信对端的身份。计算量较大,占用了大量的系统资源。

为了简化SSL握手过程。SSL同意重用已经协商过的会话,详细过程为:

(1) SSLclient发送Client Hello消息,消息中的会话ID设置为计划重用的会话的ID。

(2) SSLserver假设同意重用该会话,则通过在Server Hello消息中设置同样的会话ID来应答。这样,SSLclient和SSLserver就能够利用原有会话的密钥和加密套件。不必又一次协商。

(3) SSLclient发送Change Cipher Spec消息,通知SSLserver兴许报文将採用原有会话的密钥和加密套件进行加密和MAC计算。

(4) SSLclient计算已交互的握手消息的Hash值,利用原有会话的密钥和加密套件处理Hash值,并通过Finished消息发送给SSLserver,以便SSLserver推断密钥和加密套件是否正确。

(5) 相同地。SSLserver发送Change Cipher Spec消息,通知SSLclient兴许报文将採用原有会话的密钥和加密套件进行加密和MAC计算。

(6) SSLserver计算已交互的握手消息的Hash值,利用原有会话的密钥和加密套件处理Hash值,并通过Finished消息发送给SSLclient。以便SSLclient推断密钥和加密套件是否正确。


http://chatgpt.dhexx.cn/article/hDNRxS63.shtml

相关文章

SSL原理介绍

SSL原理介绍 SSL——安全套接字层(Secure Sockers Layer)协议由著名的Netscape公司开发。为了保证通信双方建立安全可靠的传输隧道,SSL使用PKI中的数字证书技术对通信双方进行身份认证;使用对称加密来保证数据保密性;使…

ssl 原理和建立连接过程

ssl 与http关系 ssl (“Secure Sockets Layer”)加密原理 和https的关系 https http ssl ssl 位置: SSL握手 证书主要作用是在SSL握手中,我们来看一下SSL的握手过程 客户端提交https请求服务器响应客户,并把证书公钥发给客户端客户端验…

SSL/TLS 的工作原理

HTTPS 之所以能达到较高的安全性要求,就是结合了 SSL/TLS 和 TCP 协议,对通信数据进行加密,解决了 HTTP 数据透明的问题。接下来重点介绍一下 SSL/TLS 的工作原理。 SSL 和 TLS 的区别? SSL 和 TLS 没有太大的区别。 SSL 指安全套接字协议(Secure Sockets Layer),首次…

SSL工作原理

公钥和私钥 一直以来对公钥和私钥都理解得不是很透彻,感觉到模棱两可。今天在网上找了半天,通过查看对这个密钥对的理解,总算弄清楚了。 公钥和私钥就是俗称的不对称加密方式,是从以前的对称加密(使用用户名与…

SSL技术原理

SSL详解 建议直接看这:https://cshihong.github.io/2019/05/11/SSL-VPN%E6%8A%80%E6%9C%AF%E5%8E%9F%E7%90%86/ SSL [虚拟专用网络]的技术主要用到了SSL技术。有关SSL具体技术,可以参考: SSL/TLS协议详解 SSL [虚拟专用网络]简介 SSL [虚拟专…

SSL协议原理详解

SSL 可参考:SSL技术原理 SSL简介 SSL和TLS: SSL (Secure Sockets Layer)安全套接层。是由Netscape公司于1990年开发,用于保障Word Wide Web(WWW)通讯的安全。主要任务是提供私密性,信息完整性…

SSL协议原理

文章目录 SSL协议原理SSL协议结构SSL原理(握手协议)SSL握手协议第一阶段客户端Client Hello数据包服务端server Hello数据包 SSL握手协议第二阶段**Certificate消息数据包**Server Key Exchange消息数据包ServerHello Done数据包 SSL握手协议第三阶段Cli…

关于SSL原理的详解

关于SSL原理的详解 SSL原理详解一、SSL是什么?二、建立SSL通道过程1.简化篇2.具体建立过程 总结 SSL原理详解 其实SSL从网上看到的资料很多了,但是发现还是没有将原理讲得特别清楚,尤其是对CA,433端口与80端口的数据传输原理&…

ExpandableListView--基本使用介绍

1 什么是ExpandableListView?有啥作用? 首先看一张ExpandableListView 的继承关系图: ExpandableListView的继承关系 根据上图可知,ExpandableListView是ListView的子类。而expandable 在英文中的意思是可扩展的,所以ExpandableL…

ExpandListview

土鳖程序员 【深入篇】自定义ExpandableListView,实现二级列表效果 先看效果图: 上图是我们要实现的效果,那么现在我们开始着手去做,主要分为以下几步: 一丶我们需要根据效果图去思考该如何动手,从上图分析…

ExpandListView总结

from 花葬_小吃一口 小白一位,本文仅一些自己在学习路上的一些总结,请各路大佬觉得不是,或有可补充的地方,请帮忙修正。学生感激不尽(耐心看完哦,代码有几百行,这是我对于可折叠列表学习所有的理…

ExpandableListView详细教程

既然大家能到这里来,相信已经对ExpandableListView用了初步的认识,废话不多说,直接给大家上干货。 源程序找不到了,下图是将ExpandableListView放在DrawerLayout(侧边栏)中的效果。 ExpandableListView就是大家平时在PC端见到的二…

ExpandableListActivity(一)

相关文章 ExpandableListView&#xff08;二&#xff09; 参考资料&#xff1a; 1.sakurakider的文章安卓的ExpandableListView的使用和优化 2. sunny.day的文章ExpandableListView(可扩展的listView) 效果图 首先是组布局和组子项布局 group_layout.xml <?xml versio…

ExpandableListView的简单例子

最近一段时间参考网上的例子&#xff0c;做了一下简单的 ExpandableListView&#xff0c;现在和大家共享一下&#xff1a; 1&#xff1a;main.xml的内容 <?xml version"1.0" encoding"utf-8"?><LinearLayout xmlns:android"http://sch…

android-ExpandableList可展开的list

ExpandableList可展开的list 老规矩。右键取得显示不出来的图片地址&#xff0c;利用下载工具下载这个图片。后缀改为rar即可得到源代码项目。 package zhang.EspandableListView;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.…

android 二级折叠列表,Android折叠列表 ExpandableList

ExpandableList 是折叠列表,通过继承ExpandableListActivity 类就可以非常简单的实现折叠列表。 效果图: 代码实现 package com.zhou.activity; import android.app.ExpandableListActivity; import android.os.Bundle; import android.view.ContextMenu; import android.vie…

ExpandableListView的使用

ExpandableListView的使用 效果图 布局 <ExpandableListViewandroid:id"id/expandableListView"android:layout_width"match_parent"android:layout_height"match_parent" /> 初始化 ExpandableListView expandableListView (Expanda…

ExpandableListView简介

学习笔记&#xff0c;欢迎指导。 最近做了一个项目&#xff0c;需要一个层级列表&#xff0c;完成之后&#xff0c;就顺便来做个博客简介一下。 △基本简介 →“ExpandableListView”是对“ListView”做的扩展&#xff0c;“ListView”是个列表&#xff0c;而“ExpandableLis…

浅析——ExpandableListView的使用

ExpandableListView&#xff08;可扩展的ListView&#xff09; ExpandableListVivew是ListView的子类&#xff0c;它在普通ListView的基础上进行了扩展&#xff0c;它把应用中的列表项分为几组&#xff0c;每组里又可包含多个列表项。ExpandableListVivew的用法与普通ListView的…

ExpandableListView的应用

使用ExpandableListView实现下拉菜单栏 xml布局 1.activity_main.xml <ExpandableListView xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tools"http://schemas.android.…