ssl工作流程_ssl 流程-程序员宅基地

技术标签: 网络  https  ssl  

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]

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_55753980/article/details/121680341

智能推荐

hive向mysql导数据_Mysql & Hive 导入导出数据-程序员宅基地

文章浏览阅读118次。---王燕行转列sqlselect split(concat_ws(',',collect_set(cast(smzq as string))),',')[1] ,split(concat_ws(',',collect_set(cast(smzq as string))),',')[2] from wyy;---mysql 导入 导出数据部分--mysql 导入load data infile..._hivesql into outfile

Node.js开发-path模块_前端代码 path-程序员宅基地

文章浏览阅读1.4k次,点赞10次,收藏8次。path 模块提供了。_前端代码 path

Notepad++插件下载和介绍(整理)_notepad插件下载-程序员宅基地

文章浏览阅读1.5w次,点赞2次,收藏25次。20款Notepad++插件下载和介绍转载地址http://paranimage.com/20-notepad-plus-plugins/Notepad++从3.4版本开始支持插件机制,让用户可选择的为本身已经优秀的Notepad++添加更多强大的功能。下面是20款Notepad++插件的介绍和下载地址。20款Notepad++插件_notepad插件下载

Java中接口的深入解析_java解析接口信息-程序员宅基地

文章浏览阅读847次,点赞19次,收藏23次。在Java中,接口是一种特殊的引用类型,它定义了一组方法规范,但不实现这些方法(除了默认方法和静态方法)。接口是一种纯粹的抽象规范,没有状态(字段都是的)。_java解析接口信息

ffmpeg概述-程序员宅基地

文章浏览阅读585次。关于笔者编译SDL不能使用的问题,具体原因笔者也未知,但从ldd查看相关联的库来看,通过命令安装的SDL,会链接到许多相关的库上,而笔者编译出来的库则缺少了很多链接。所以这里不推荐自行编译SDL,如果你发现自行编译的用了出现一些问题,比如打不开播放,比如莫名其妙的崩溃之类的,请卸载自行编译的SDL,安装前面apt的SDL。如果你的/usr/local/lib路径没有加入到动态库路径,请先执行下面的指令,增加到系统环境中去。关于x264的安装比较简单,下载源码,切入到源码目录。

JDK的下载、安装和卸载教程-程序员宅基地

文章浏览阅读96次。  学习JAVA,必须得安装一下JDK(java development kit java开发工具包),配置一下环境就可以学习JAVA了,下面是下载和安装JDK的教程:  1.JDK下载地址:  http://www.oracle.com/technetwork/java/javase/downloads/...

随便推点

《黑客帝国:矩阵重启》科幻经典回归,你会选择红色药丸还是蓝色药丸-程序员宅基地

文章浏览阅读1.6k次。期待已久的《黑客帝国:矩阵重启》于一月中旬上线,整个矩阵重启,大段的叙事和镜头都在向前三部致敬:Neo的再次被唤醒,所需要作的选择依然是“红与蓝”——红色药丸代表了真实但残酷的现实,蓝色药丸代表了虚拟但美好的梦境。你会选择哪一个?作为超级视觉大片,《黑客帝国4》的大场面也是给足感官刺激。DNEG作为《黑客帝国4》的主要视觉特效供应商,在其伦敦、温哥华和印度的设施中分担了700多个镜头,Evans作为DNEG的视觉特效总监监督了这项工作。视觉特效总监Huw Evans已经习惯于为世界上顶级大片工作。E

随机获取诗句_random随机抽取一首诗-程序员宅基地

文章浏览阅读1.1k次。import java.awt.Toolkit;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.StringSelection;import java.awt.datatransfer.Transferable;import java.util.Random;public class RandomStr { public static void main(String[] args) { ._random随机抽取一首诗

j2ee课程设计—基于activiti的请休假系统-程序员宅基地

文章浏览阅读740次。前言课设基于SSM框架,数据库采用mysql,主要业务交给activiti,版本控制利用github。参考资料:Intellij 部署SSM框架Activiti就是这么简单方大师的教材下文斜体部分均为Activiti就是这么简单中小标题。演示地址项目源码activiti学习小记基于0中Activiti就是这么简单,做些笔记。当前环境:按照Intellij 部署SSM框架中..._基于activiti的学生请假管理系统

城市建筑类毕业论文文献都有哪些?_城市空间文献有哪些-程序员宅基地

文章浏览阅读204次。本文是为大家整理的城市建筑主题相关的10篇毕业论文文献,包括5篇期刊论文和5篇学位论文,为城市建筑选题相关人员撰写毕业论文提供参考。_城市空间文献有哪些

会声会影软件2023破解版最新激活序列号_会声会影2023-程序员宅基地

文章浏览阅读3.3k次。会声会影2023简单易用,具有拖放式标题、转场、覆叠和滤镜,色彩分级、动态分屏视频和新增强的遮罩创建器,超越基本编辑,实现影院级效果。优化分屏剪辑功能,简化多时间轴编辑的工作流程,让创作更轻松。添加趣味性3D标题,内置NewBlueFX和proDAD转场和防抖插件,一键防抖和校准色彩。使用MultiCam Capture Lite可以轻松录制并编辑视频教程、产品演示、游戏视频、在线课程。会声会影2023的智能工具,使用AI面部识别对效果最好的照片和视频片段进行分析,提取,并编译到可以项目中,将我们的精彩时刻_会声会影2023

Spring Boot 中的异步调用_springboot异步调用-程序员宅基地

文章浏览阅读1w次,点赞9次,收藏53次。Spring Boot 中的异步调用通常我们开发的程序都是同步调用的,即程序按照代码的顺序一行一行的逐步往下执行,每一行代码都必须等待上一行代码执行完毕才能开始执行。而异步编程则没有这个限制,代码的调用不再是阻塞的。所以在一些情景下,通过异步编程可以提高效率,提升接口的吞吐量。这节将介绍如何在Spring Boot中进行异步编程。要开启异步支持,首先得在Spring Boot入口类上加上@EnableAsync注解:@SpringBootApplication@EnableAsyncpublic _springboot异步调用

推荐文章

热门文章

相关标签