ssl工作流程

2023-10-27

1.ssl工作流程
请添加图片描述

SSL位于应用层和传输层之间,它能够为基于TCP等可靠连接的应用层协议提供安全性保证。SSL协议本身分为两层:

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

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

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

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

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

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

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

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

仅仅验证server的SSL握手过程

验证server和client的SSL握手过程

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

仅仅验证server的SSL握手过程

仅仅须要验证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的身份验证。

说明:

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

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

验证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身份验证成功。

2.配置不同的端口虚拟主机访问apache服务器

第一步,创建两个网页文件根目录,并定义网页内容
[root@localhost ~]# mkdir -pv /www/port/{80,10000}
[root@localhost ~]# echo the port is 80 > /www/port/80/index.html
[root@localhost ~]# echo the port is 10000 > /www/port/10000/index.html
第二步,定义基于不同端口来访问网站的配置文件

在这里插入图片描述

[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# curl 192.168.126.3
the port is 80
[root@localhost ~]# curl 192.168.126.3:10000
the port is 10000

3.配置用户控制和虚拟目录访问apache服务器

[root@localhost ~]# htpasswd -c /etc/httpd/mymima xiaoming(-c表示创建)
输入密码
[root@localhost ~]# htpasswd /etc/httpd/mymima xiaohong
输入密码
[root@localhost ~]# mkdir /usr/local/mysecret
[root@localhost ~]# echo this is my secret > /usr/local/mysecret/index.html
[root@localhost ~]# vim /etc/httpd/conf.d/vhosts.conf

AuthType Basic 基本认证类型(账号)
AuthName “Please login:” 提示信息,双引号必须有,可以更换为其它提示信息
AuthUserFile /etc/httpd/mymima 用户认证文件的用户名和密码指定的文件所在位置
Require user xiaoming xiaohong 指定这两个用户可以访问该服务器

[root@localhost ~]#systemctl restart httpd
[root@localhost ~]#curl 192.168.227.140/mimi/ -u xiaoming
在浏览器中输入:http://192.168.227.140/mimi
【登录成功后实际上访问的是/usr/local/mysecret/index.html的内容】
会弹出如下需要输入用户名和密码的窗口:

如果显示类似如下提示:
Unauthorized
This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn’t understand how to supply the credentials required.

来自 http://192.168.227.140/mimi
将下图中的“启用弹出窗口阻止程序”的勾去掉

4.配置使用ssl完成https访问apache服务器
[root@localhost ~]# yum install mod_ssl -y
[root@localhost ~]# cd /etc/pki/tls/certs/
[root@localhost certs]# make jiami.crt

/etc/httpd/conf.d/ssl.conf
[root@localhost ~]# vim /etc/httpd/conf.d/host.conf
<VirtualHost 192.168.126.140:443>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA密码套件,列出允许客户端协商的密码。
SSLCertificateFile /etc/pki/tls/certs/jiami.crt指定证书路径
SSLCertificateKeyFile /etc/pki/tls/certs/jiami.key指定密钥文件路径
DocumentRoot /www/jiami
ServerName 192.168.126.140

[root@localhost ~]# systemctl restart httpd

5.配置访问apache的cgi程序
[root@localhost ~]# yum install mod_wsgi -y
[root@localhost ~]#mkdir /var/www/alt
[root@localhost ~]# vim /etc/httpd/conf.d/host.conf
<Directory “/var/www/alt”>
AllowOverride None
Require all granted

<VirtualHost 192.168.126.222:80>
WSGIScriptAlias / /var/www/alt/webinfo.wsgi

python脚本内容[root@localhost ~]# vim /var/www/alt/webinfo.wsgi
def application(environ, start_response):
status = ‘200 OK’
output = ‘Hello World’
response_headers = [(‘Content-type’, ‘text/plain’),
(‘Content-Length’, str(len(output)))]
start_response(status, response_headers)
return [output]

在浏览器中输入地址测试
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ssl工作流程 的相关文章

  • 有没有办法强制 svcutil.exe 忽略 SSL 证书问题?

    我需要 svcutil exe 为我生成代理类 但问题是 Web 服务只能通过 HTTPS 访问 并且 SSL 证书是自签名的 如何强制 svcutil exe 忽略此问题 似乎有效的一件事是启动 Fiddler 并让它在您发出 SVCUT
  • nginx 的“ssl”指令已弃用,请使用“listen ... ssl”

    NGINX 升级后v1 15 2开始收到警告 nginx warn the ssl directive is deprecated use the listen ssl directive instead in usr local etc
  • 添加自签名证书而不提示用户是/否

    使用一些批处理文件 我想在 Java 密钥库中添加不受信任的自签名证书 命令是 JAVA HOME bin keytool import v trustcacerts alias server alias file server cer k
  • 如何在没有 (L)GPL 库的情况下在 Python 中创建双重身份验证 HTTPS 客户端?

    客户端和服务器都是内部的 各自都有一个由内部CA签名的证书和CA证书 我需要客户端根据服务器拥有的 CA 证书来验证服务器的证书 它还应该将其证书发送到服务器进行身份验证 The urllib2手册说不执行服务器身份验证 PycURL是一个
  • .NET 4.5 和 .NET 4.5.1 是否默认启用 TLS 1.1 和 TLS 1.2?

    在我们的 Windows 2012 Server R2 上 我们需要禁用 TLS 1 0 不过 我们正在运行 NET 4 5 Wcf 服务 我们发现 如果禁用 TLS 1 0 WCF 服务将不再运行 因为我们收到错误 现有连接被远程主机强制
  • 如何使用独立的 Jetty 进行服务器推送

    我正在尝试使用独立的 Jetty 在静态网站上测试服务器推送功能 我的网站由一个index html 1个CSS 一堆图像组成 目录结构为 Album index html style css images image 1 png a se
  • 签署 apple-app-site-association

    我尝试实施iOS9 Universal Links 我正在使用这个教程 http blog hokolinks com how to implement apple universal links on ios 9 http blog ho
  • HTTP 和 HTTPS iframe

    我正在创建一个小部件 我想允许其他人使用它 这iframe通过 HTTP 加载 但我想允许用户通过 HTTPS 登录 即通过 SSL 发送登录请求 同源策略中允许这样做吗 即 场景是用户可以将我的 JavaScript 集成到他们的网站 小
  • 如何在Delphi中下载一个非常简单的HTTPS页面?

    我尝试了在这里看到的代码 但它不适用于 HTTPS 我需要将此页面作为字符串下载 并在其上添加一些换行符 以便将信息按顺序放入 TMemo 中 怎么做 我尝试使用 Indy 但由于 SSL 问题而失败 我尝试了此页面的解决方案 如何将网页下
  • 使用 VirtualDocumentRoot 的 SSL 虚拟主机

    我在 ubuntu 16 04 VM 上进行开发工作 当我处理多个项目时 为了让我的生活更轻松 我使用 VirtualDocumentRoot 和主机文件使用 dev 域从我的主文件夹中服务器站点 在 000 default conf 我有
  • Android:防止嗅探(例如使用 CharlesProxy)SSL 流量

    我使用 Charles 检查将我的应用程序发送到 HTTPS 的数据 我在手机上安装了 Charles CA 证书 因此我能够解密每个 SSL 流量 但我发现一些应用程序无法看到 SSL 流量 我如何将这种行为实现到我自己的应用程序中 有了
  • Android 2.3.4 SSL问题

    升级到 Android 2 3 4 后 出现以下异常 javax net ssl SSLException Read error ssl 0x I O error during system call Connection timed ou
  • PHP 通过 SSL 连接到 MS SQL

    我想要实现的目标非常简单 我想通过安全连接从 PHP 脚本连接到外部 MS SQL 数据库 然而 这已被证明是有问题的 到目前为止 经过三个小时的研究 我不知所措 客户端的平台是Ubuntu 这意味着我无法使用SQLSRV 安全连接已经在不
  • 如何在 PHP 5.6 中通过 php.ini 设置“verify_peer_name=false”SSL 上下文选项

    案例 我想打开 SSL 连接localhost而 SSL 证书是 FQDN 的问题 问题 没有进行特殊处理就行 下面的程序失败并显示以下消息 PHP Warning stream socket enable crypto Peer cert
  • 使用 Internet Explorer 和 SSL 时如何启用自动完成功能?

    当以下两个条件都成立时 1 The page was delivered over HTTPS 2 The page was delivered with headers or a META tag that prevents cachin
  • HttpClient SSLException

    我尝试向 Web 服务发送 https 请求 经过几次成功的尝试后 我开始不断收到此错误 这个错误是什么意思 为什么它第一次发生 javax net ssl SSLException java lang RuntimeException C
  • GET 数据是否也在 HTTPS 中加密?

    当你拿到时 https crypted google com search q s https encrypted google com search q s Is the s查询已加密 还是只是回应 如果不是 为什么谷歌还要对其公共内容进
  • 使用 SSL 证书验证 Web 浏览器

    是否可以使用 ssl 证书对 Web 浏览器进行身份验证 假设我在应用程序中存储私钥 有什么方法可以从浏览器读取密钥并尝试基于该私钥进行身份验证 您可以使用 SSL TLS 客户端证书身份验证来对浏览器 用户进行身份验证 服务器必须请求客户
  • 为什么 appcmd.exe 解锁配置在 Azure 模拟器上不起作用?

    我最近升级到 Azure 2 1 SDK 现在我的部分功能遇到了问题web config在计算模拟器上运行时处于 Web 角色中 我的web config包含这个
  • AFNetworking 2.0:收到 302 到 AWS S3 时 NSURLSessionDownloadTask 被取消

    我使用 README 文件 来自 AFNetworking 2 0 页面 中的一个简单示例来下载图像 对于直接从我的网络服务器提供的图像来说 一切正常 但对于位于 S3 上的网络服务器 Web 服务器会返回 302 重定向以下错误 Erro

随机推荐

  • error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义 找到一个或多个多重定义的符号

    今天在搞一个动态链接库的时候 出现了这样的错误 1 gt mfcs100ud lib dllmodul obj error LNK2005 DllMain 12 已经在 MSVCRTD lib dllmain obj 中定义 1 gt E
  • HTTPS之TLS1.2连接详解

    本文说一下HTTPS的会话连接详情 HTTPS连接除了正常的TCP三次连接 还引入了TLS连接 本文说的是基于 1 三次握手连接 首先通过三次握手连接来建立连接 接下来就是TLS连接 2 TLS第一次握手 ClientHello 客户端首先
  • Linux Kibana :nohup: 忽略输入并把输出追加到"nohup.out

    nohup 忽略输入并把输出追加到 nohup out 不要使用下面的命令启动 nohup kibana 改用 nohup kibana gt dev null 2 gt 1
  • 后台的BigDecimal字段,传到前端丢失精度问题

    后台的BigDecimal字段 传到前端丢失精度问题 后台的BigDecimal类型的字段 传到前端丢失精度 相关字段 private BigDecimal acreage 例如 该字段的值为 100 00 到前端就变成了 100 前端要求
  • HCNP路由交换学习指南--- 路由的基本概念

    文章目录 HCNP路由交换学习指南 路由的基本概念 交换机路由表学习 路由信息来源 路由的优先级 路由的度量值 HCNP路由交换学习指南 路由的基本概念 交换机路由表学习 路由是一种逐跳 HopByHop 的行为 也就是说 数据从源被发出直
  • 量化投资策略回测框架(一):胜率的估算

    上次简单介绍了回测之前的一些准备工作 这里 将进一步介绍如何对一个投资策略就行完整的回测 杂言 人啊 还是要做自己喜欢做的事情 勇于尝试 是非常好的 当感觉不合适的时候 要尽早跳出 年轻人 还是不要太安逸 所以从财富跳到了私募 事情也是自己
  • JWT解析库-nimbus-jose-jwt

    07 JWT解析库 nimbus jose jwt JWT解析库 nimbus jose jwt 是最受欢迎的JWT开源库 基于Apache2 0开源协议 支持所有标准的签名JWS和加密JWE算法 1 JWT JWS JWE是什么 1 1
  • Mac使用Appium连接真机与appium-inspector配置

    文章目录 1 配置Java SDK与Android SDK 2 连接真机 3 配置Appium与appium inspector安装 4 配置appium inspector 5 尝试连接 6 报错解决 gt No route found
  • 定时器控制数码管扫描显示

    功能 定时器控制两位数码管扫描显示 器件 STC12C5A32S2 两个数码管 include config h define uint unsigned int define uchar unsigned char define ulon
  • 一步步学习k8s(三)

    一步步学习k8s 三 将apollo交付到K8S中 apollp是携程公司开源的软件 apollp官网 https github com ctripcorp apollo 安装数据库 Mariadb 版本要高于10 1 对应mysql版本要
  • TrafficMonitor之Windows10监控小工具

    TrafficMonitor之Windows10监控小工具 安装 基本设置 软件下载地址 https gitee com xiaoha1234 soft ware blob master TrafficMonitor zip 1 基本设置
  • Swift学习笔记之---使用if和let处理空变量

    在Swift程序中 结合if和let 可以方便地处理空变量 nullable variable 使用可选绑定 optional binding 来判断可选类型是否包含值 如果包含就把值赋给一个临时常量或者变量 可选绑定可以用在if和whil
  • HashMap的get、put、resize过程

    get 1 先计算出key对应的hash值 2 对超出数组范围的hash值进行处理 3 根据正确的hash值 下标值 找到所在的链表的头结点 4 遍历链表 如果key值相等 返回对应的value值 否则返回null put 1 先计算出ke
  • 关于网络问题:WARNING: ROS_MASTER_URI [http://EPRobot:11311] host is not set to this machine

    关于网络问题 WARNING ROS MASTER URI http EPRobot 11311 host is not set to this machine 如果需要远程链接 需要在远程服务器将ROS MASTER URI变为启动ros
  • assimp批量转模型,[OpenGL] 使用Assimp导入模型(Qt)

    最近终于决定要在本身的demo中加入模型了 本次选择的是开源库Assimp 以前一直嫌麻烦没有去落实这件事 但实际上 assimp的配置意外的没有我想象中的那么麻烦 html 下载源码后 须要使用cmake进行编译 在上方选择源码位置 和b
  • RouterOS 动态IP接入上网设置教程(超详细)

    根据动态IP接入拓扑图对RouterOS做如下设置 首先启动RouterOS软路由 并且连接电脑 然后打开winbox登录ROS 1 正取区分内 外网 目的是为了方便记忆和区分 2 建立DHCP Client 客户端 进行自动获取外网IP地
  • 数据结构单链表之合并两个有序链表笔记。

    1 0题目描述 将两个升序链表合并为一个新的 升序 链表并返回 新链表是通过拼接给定的两个链表的所有节点组成的 2 0例子演示 输入 l1 1 2 4 l2 1 3 4 输出 1 1 2 3 4 4 示例 2 输入 l1 l2 输出 示例
  • react 之 umi(乌米)--入门介绍

    介绍 umi 中文可发音为乌米 是一个可插拔的企业级 react 应用框架 umi 以路由为基础的 支持类 next js 的约定式路由 以及各种进阶的路由功能 并以此进行功能扩展 比如支持路由级的按需加载 然后配以完善的插件体系 覆盖从源
  • games101,作业2

    需要补充的函数 rasterize triangle 执行三角形栅格化算法 static bool insideTriangle 测试点是否在三角形内 你可以修改此函 数的定义 这意味着 你可以按照自己的方式更新返回类型或函数参数 判断点是
  • ssl工作流程

    1 ssl工作流程 SSL位于应用层和传输层之间 它能够为基于TCP等可靠连接的应用层协议提供安全性保证 SSL协议本身分为两层 上层为SSL握手协议 SSL handshake protocol SSLpassword变化协议 SSL c