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: ...
随机推荐
- Android 65536方法数限制的思考
前言 没想到,65536真的很小. 1 Unable to execute dex: method ID not in [0, 0xffff]: 65536 PS:本文只是纯探索一下这个65K的来源, ...
- C99一些特性
__FILE__ 对应代码文件名__LINE__ 对应代码行号__DATE____TIME____FUNC__ __FUNCTION__ 在Visual Studio 2005中,默认情况下, ...
- 自己动手设计并实现一个linux嵌入式UI框架
一直以来都是使用现成的UI框架,如微软的window.QT等,因为它有各种控件(如button.window.edit等)都已经封装实现好了.我们只要拿来用就是了,也一直认为它很神圣,没有深入了解它背 ...
- C#生成二维码(加源码)
使用工具: Visual Studio(VS) 2013 第一步: 要用到一个类:QRCodeEncoder 这个类要添加一个动态库:ThoughtWorks.QRCode.dll(项目中有带) 然后 ...
- 在eclipse上的hdfs的文件操作
参考:http://dblab.xmu.edu.cn/blog/hadoop-build-project-using-eclipse/?tdsourcetag=s_pcqq_aiomsg: http ...
- SP16580 QTREE7 - Query on a tree VII(LCT)
题意翻译 一棵树,每个点初始有个点权和颜色(输入会给你) 0 u:询问所有u,v路径上的最大点权,要满足u,v路径上所有点颜色相同 1 u:反转u的颜色 2 u w:把u的点权改成w 题解 Qtree ...
- PHP函数补完:call_user_func()
call_user_func是PHP的内置函数,该函数允许用户调用直接写的函数并传入一定的参数,下面总结下这个函数的使用方法. 1,call_user_func函数类似于一种特别的调用函数的方法,使用 ...
- linux性能评估与分析工具---CPU篇
一. uptime root@calm:~# uptime :: up days, :, user, load average: 0.04, 0.09, 0.04 这里主要关注load average ...
- 查看Xcode配置文件
终端命令 open ~/Library/MobileDevice/Provisioning\ Profiles/ 除去多余的配置文件 Xcode -> Build Settings -> ...
- redis中存储小数
在做一个活动的需求时,需要往redis中有序的集合中存储一个小数,结果发现取出数据和存储时的数据不一致 zadd test_2017 1.1 tom (integer) zrevrange test_ ...