HTTPS和SSL详解
把这几天学习到的关于ssl和https协议的内容在这里分享一下,适合一些像我一样的网络协议初学者。
ssl协议的起源和历史我就不再多说了,就是那个Netscape 网景公司开发的,它的作用主要是提供了一种安全传输方式,我们知道网上有很多的时候需要我们去输入用户名和密码,那么假设我们自己的电脑防病毒还可以,但是用户名和密码肯定还是要通过互联网来传到服务器那里,这个步骤就要经过很多的路由等,如果明文传输,就可以在你的局域网内或者通过的路由中监听,窃取你的用户名密码。
SSL协议位于TCP/IP协议与各种应用层协议之间。当我们打开一个https的网页时,步骤如下:
1. 客户端通过SSL协议把服务器需要的客户端的SSL版本信息,加密算法设置,会话数据,发送给服务器。
2. 服务器通过SSL协议把自己的SSL的版本信息,加密算法设置,会话数据和其他通信需要的信息发给客户端。服务器也把服务器的证书发给客户端,另外如果客户端请求服务器资源需要客户端认证,服务器端就会请求客户端的证书。
3. 客户端使用这些服务器发来的信息认证服务器。如果服务器不能被认证,那么客户将被提示一个警告,并且通知客户不能建立加密和认证连接。如果服务器被成功认证,客户端将进入第四步。
4. 使用到目前为止的所有数据生成握手过程。客户端(和服务器合作之下)为会话创建一个pre-master secret(一个用在对称加密密钥生成中的 46 字节的随机数字)。使用服务器的公共密钥加密(在第二步的服务器的证书中获得公共密钥),然后把这个加了密的pre-master secret发送给服务器。
5. 如果服务器请求客户端认证(在握手过程是可选项),客户端也需要标记一个特殊的数据包,客户端和服务器都知道的。在这个过程中,客户端发送一个通过pre-master secret加密过的标记的数据包和客户端自己的证书给服务器。
6. 如果服务器请求了客户端的认证,那么服务器就要尝试去认证客户端。(具体的看客户端认证细节)如果客户端认证不通过,会话将被终止。如果客户端被认证通过,服务器将使用私有密钥解密pre-master secret,然后执行一系列步骤生成master secret
7. 客户端和服务器端使用master secret去生成会话密钥。会话密码是在ssl 会话的时候对称密钥被用来加密,解密信息校验信息完整性的密钥。(检查会话过程中任何数据改变)
8. 客户端发送一个信息给服务器端,通知服务器端未来的信息将被会话密码加密,然后客户端发送一个单独(加密)信息指示客户端部分的握手会话已经完成。
9. 服务器发送一个信息通知客户端未来的会话信息将被会话密码加密,然后服务器发送一个单独(加密)信息指示服务器部分的握手部分已经完成
10. SSL握手结束,开始正式会话。客户端和服务器端使用对称会话密钥加密解密数据并且互相传送校验完整性。
11. 这是一个正常的操作过程和加密隧道。在任何时候,当内部或者外部触发条件(不是自动就是用户手动),任何一端就要从新协商会话,所有的流程将从新开始。
有几个问题我在学过之后一直在考虑:
1. 如果中间的路由从双方发送证书的时候就开始监听的话呢,是否就可以窃取内容了?
答:否,服务器那边有一个非对称密钥加密系统,首先他将公开密钥发送给客户端,客户端接收之后为会话创建一个pre-master secret(一个用在对称加密密钥生成中的 46 字节的随机数字),然后用服务器发送过来的公开密钥加密,然后将加密后的内容发送给服务器,这两个阶段,如果有人监听,即使窃取到也没办法,首先公开密钥对所有人其实都是公开的,用公开密钥加密后的内容是非常非常难解密的,只有用服务器自己有的私有密钥解密才可以。服务器获取到46字节的随机数字之后,通过这个来对将来要发送的加密内容加密,而这个解密方法之后对应的那个客户端才知道,钥匙是通过公开密钥加密的,其他人都不知道,所有就保证了内容的安全性。
2. 我们自己建设的网站有时会使用没有正式证书的ssl加密,浏览器会提醒用户,默认建议关闭,证书是必要的吗?
答:经过认证的证书其实就是确保网站的真实性,还有一些专门的使地址栏显示为绿色的也都是确保网站的真实性,防止一些页面一模一样的钓鱼网站。
3. 用ssl协议之后,我们输入用户名密码就绝对安全了吗?
答:否,ssl协议只能保证server和client传输之间的安全,如果你的电脑有木马病毒,例如监听键盘,浏览器恶意插件等,ssl可管不了这些。。。还有如果server收到攻击,它的信息流失丢掉,这也不能保证的。
HTTPS和SSL详解的更多相关文章
- SEO方式之HTTPS 访问优化详解
SEO到底要不要做HTTPS?HTTPS对SEO的重要性 正方观点 1.HTTPS具有更好的加密性能,避免用户信息泄露: 2.HTTPS复杂的传输方式,降低网站被劫持的风险: 3.搜索引擎已经全面支持 ...
- HTTPS 传输优化详解之动态 TLS Record Size
笔者在过去分析了诸多可以减少 HTTPS 传输延迟的方法,如分布式 Session 的复用: 启用 HSTS,客户端默认开启 HTTPS 跳转:采用 HTTP/2 传输协议:使用 ChaCha20-P ...
- https+ssl详解
这是转载别人的写的很好,(转:崔永秀) 把这几天学习到的关于ssl和https协议的内容在这里分享一下,适合一些像我一样的网络协议初学者. ssl协议的起源和历史我就不再多说了,就是那个Netscap ...
- nginx配置ssl证书实现https加密请求详解
原文链接:http://www.studyshare.cn/software/details/1175/0 一.加密方式 1.对称加密 所谓对称加密即:客户端使用一串固定的秘钥对传输内容进行加密,服务 ...
- Apache SSL服务器配置SSL详解(转)
1.安装必要的软件 引用 我用的是apahce2.0.61版,可以直接官方提供的绑定openssl的apache. 文件名是:apache_2.0.61-win32-x86-openssl-0.9.7 ...
- http和Https简介、详解
目录 引用 一.HTTP和HTTPS的基本概念 二.HTTP与HTTPS有什么区别? 三.HTTPS的工作原理 四.HTTPS的优点 五.HTTPS的缺点 六.http切换到HTTPS 引用 超文本传 ...
- HTTP和HTTPS协议,详解
大纲 一.前言: 先来观察这两张图,第一张访问域名http://www.12306.cn,谷歌浏览器提示不安全链接,第二张是https://kyfw.12306.cn/otn/regist/init, ...
- SSL详解
SSL 1.整体结构 SSL是一个介于HTTP协议与TCP之间的一个可选层,其位置大致如下 SSL:(Secure Socket Layer,安全套接字层),为Netscape所研发,用以保障在Int ...
- fiddler抓取https的请求详解
本文主要说明了自己在设置fiddler抓取https过程中所遇到的问题及解决步骤,特别是fiddler在设置证书的环节遇到的各种奇葩问题,特此分享! 声明:本文为原创文章,转载请注明来源:https: ...
随机推荐
- 盒子模型 以及CSS的box-sizing属性。
盒子模型有两种 一种是 内容盒子模型 一种是边框盒子模型. 内容盒子模型(标准盒子模型)由width和height中指定的元素的尺寸不包括内边距和边框 仅是指的内容的实际尺寸: 网上搜索了两张配图不错 ...
- SOAP协议初级指南 (二)
XML 作为一个更好的网络数据表达方式(NDR) HTTP是一个相当有用的RPC协议,它提供了IIOP或DCOM在组帧.连接管理以及序列化对象应用等方面大部分功能的支持.( 而且URLs与IORs和O ...
- mysql转ElasticSearch的分析 及JAVA API 初探
前言 最近工作中在进行一些技术优化,为了减少对数据库的压力,对于只读操作,在程序与db之间加了一层-ElasticSearch.具体实现是db与es通过bin-log进行同步,保证数据一致性,代码调用 ...
- DFS实现全排列
复习一下DFS实现全排列,具体思想见:https://www.cnblogs.com/chiweiming/p/9279858.html public class Main{ static int a ...
- Python之迭代器,生成器与装饰器
1>迭代器原理及使用: 1>原理: 迭代器是访问集合元素的一种方式,迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束:迭代器只能往前不会后退,不过这也没什 ...
- windows8.1 windows defender service无法启动解决方案
分析:当pc安装第三方杀毒软件,比如360杀毒,这时候360会强制关闭mse杀毒服务,无法在服务栏目里启动.由于windows defender service是系统强制启动进程,无法在系统启动后进行 ...
- 解除SVN的控制
win10操作就是把文件夹隐藏的对勾勾上 然后就可以看见一个.SVN的文件夹 把他直接删除即可 然后刷新 自己亲测的 win10 家庭版
- Linux Shell 编程学习笔记
1:Shell Script中if语句的条件部分要以分号来分隔 2:要注意条件测试部分中的空格.在方括号的两侧都有空格 3:echo "Hi, ${a}s" 单引号中的变量不会进行 ...
- nginx location 与 rewrite详解 (转)
点我
- linux 修改主机名 【root@主机名 ~】
centos 7修改方式: hostnamectl set-hostname hostuser reboot 或者直接vi /etc/hostname 添加内容: hostuser 检查修改效果 ...