https的基本原理,看完你的程序员女朋友再也不和你提分手了
【http风险】
首先,我们来讲一下平时上网的时候,存在的风险。
初步接触过网络的同学都知道,网络上是很不安全的,尤其是各种公共场合的免费WIFI,以及手机上各种免费上网的万能钥匙。这些不安全因素会导致什么问题呢:
- 泄密,各类的个人信息,保存的小电影,淘宝的账号密码
- 篡改,收到的信息被别人修改,或者植入木马
- 伪装,访问到假的网站,比如访问淘宝访问到钓鱼网站,访问中日友好影院访问到澳门独家线上赌场。
当然了,还有一些特殊的情况,比如说你在夜深人静的夜,访问某91网站,实际上你那做程序员的女朋友在另外一个房间,正在陪着你看,甚至你顺手回了前女友一个消息,就算你及时删除,却还是没躲过那双程序员的眼睛。

很多同学已经比较了解http以及tcp/ip了,对于什么三次握手四次挥手也是熟的不能再熟了。http属于应用层协议,位于五层网络参考模型的最上层,小刘的数据包通过应用层,传输层,网络层,链路层封装之后,再经过物理层传输到兰兰的主机,在这几层中,数据都没有经过封装,所以,你的数据特别容易被中间的女朋友倩倩获取。
我们今天就来说一说,如何避免你的程序员女朋友盗取你的信息,趁机和你提分手。
【对称加密】
信息如果想要不被盗取,就要经过加密,现在的加密算法大致可分为两类,一类是对称加密,一类是非对称加密。
我们先来说说对称加密。
对称加密的基本含义,就是算法的加密和解密全都是使用同一个密钥。
在一定条件下,对称加密可以解决一部分网络安全问题。因为你和兰兰互相发送的消息,只有你和兰兰知道加密解密密钥,倩倩是不知道的,所以没有办法对你们之间的消息包进行解密,你们可以相互畅所欲言。

但是这样是有前提条件的,就是倩倩不知道你们的密钥。
如果你和兰兰在约定密钥的时候数据包就已经被倩倩获取了,那你们的行为无异于脱裤子放屁,没有任何意义。
所以,对称加密算法存在的最严重的一个问题就是,密钥协商。
【非对称加密】
非对称加密算法需要两个密钥,一个叫公钥,一个叫私钥。
公钥加密的内容需要用私钥解密,私钥加密的内容需要用公钥解密,两个密钥成对出现,缺一不可。
私钥由服务器(兰兰)自己保存,公钥发送给客户端(小刘)。
小刘拿到公钥就可以把自己的消息加密并发给兰兰了,这个时候就算倩倩截获了,也无法获取消息包的具体内容,保证了小刘发给兰兰的消息的安全性。

非对称加密和对称加密一样,都存在密钥传输的问题,但是至少有一点可以保证,就是客户端发往服务器端的消息不会被泄露。
非对称加密还有一个问题,就是加密解密时的效率比较低,严重影响小刘和兰兰谈情说爱。
所以我们又有一种办法,就是第一次通信的时候使用非对称加密,由客户端(小刘)产生一个对称加密的密钥,用公钥加密后发给服务器端(兰兰),服务器端用私钥解密之后,就可以使用对称加密发送消息了。

这个办法看起来天衣无缝,既解决了密钥协商的问题,又解决了非对称加密效率低的问题。
但是真的就能无所顾及了吗?并不能,我们看看倩倩的如下骚操作:

倩倩伪造了兰兰,也就是说,黑客利用一台主机,伪造了真实的服务器,使用自己的公钥和私钥去和客户端(小刘)进行消息交互,这样不光可以获取消息的内容,还可以伪造消息,从而达到某些不可告人的目的。
比如获取你的银行卡密码,直接转走你的所有资金,让你人财两空,再比如获取你的私人信息,让你身败名裂。这些都是非常严重的后果。
【数字证书】
那小刘和兰兰就真的没有更加安全的消息交互的办法了吗?
答案当然是,有!
现实生活中,我们也会有身份信息的证明,比如你说你是学生,怎么证明?我有学生证;你说你是警察,怎么证明?我有警官证。
网上也有这种证书,但是网上的证书不是实体的,所以叫数字证书。
客户端第一次与服务器进行通信的时候,服务器需要拿出自己的证书,表明自己的身份以及公钥,类似:

那么这个数字证书是怎么产生的呢?总不能自己随便写一个吧。
我们思考一下,我们上面说的学生证,警官证为什么能够被大家所认同呢,是因为学生证是教育部颁发的,警官证是公安部颁发的,上面有唯一的防伪编码,我们上相关部门的网站就可以查询到了,所以我们认同这些证书是因为我们认同教育部和公安部。
数字证书也是一样,有唯一的防伪编码,以及颁发的权威机构。
【CA机构】
CA机构就像之前说的教育部一样,是权威的证书颁发机构,负责颁发证书以及验证证书的合法性。
如果服务器需要做一个有身份的服务器,就需要向CA机构提交申请
<价格昂贵> ,需要提供包括域名,公司名称,公钥等一系列信息,CA机构审批后就可以给服务器颁发证书了。
客户端拿到证书以后,需要做两件事:
1. 验证证书编号是否可以在CA机构查到
2.核对证书上的基本信息 <比如域名> 是否与当前一致,才可以使用公钥和服务器协商对称密钥进行消息发送。
证书颁发之后,如何保证在传输的过程中不被篡改呢? 万一倩倩获取到证书之后,把公钥改成了自己的,岂不是白费功夫?
【数字签名】
依旧拿警官证举例子,家里有警察的朋友们应该都知道,警官证上面的内容是不允许涂改的,如果需要修改,必须销毁或者存档旧的警官证,颁发新的警官证并盖章才有效。
这个盖章的操作,在网络证书上面叫做数字签名。
服务器向CA提出证书申请,CA在颁发证书的时候,会连同数字证书以及根据证书内容产生的摘要一并发给服务器,<摘要相当于MD5,一段绝对不会重复的无规律码>。
这个摘要是通过CA的私钥进行加密的,无法进行篡改。
过程如下:

哪些CA机构对于客户端来说是权威或者说是认可的呢?我们打开IE浏览器能看到客户端内置的CA机构的信息,包含了CA的公钥、签名算法、有效期等等。

在这之后,服务器在与客户端通信的时候,就可以将数字证书以及数字签名出示给客户端了。
客户端拿到数字证书与签名,会进行如下过程:
- 找到操作系统或者浏览器信任的CA机构,使用其公钥对数字签名进行解密,计算数字证书的摘要。
如果摘要与服务器发过来的一致,则表明证书没有被篡改。
- 从证书里获取服务器公钥,加密对称密钥。
- 将对称密钥发送到服务器。
注意一点:
如果是伪造的数字签名,则在客户端无法做解密。
因为CA的私钥是自己负责保管的,别人无法获取得到,所以无法对证书做私钥加密,自然别人也无法使用公钥进行解密。
【HTTPS】
好像一直没有提到https。
其实https很简单,就是在http的基础上添加了一个叫做SSL的协议,SSL(Secure Sockets Layer)叫做"安全套接层",后来标准化之后叫做TLS。
所以,HTTPS协议就是通过以上的手段,达到网页防伪造,防篡改的成果。
这样,小刘就可以名正言顺得和兰兰一起"月上柳梢头,人约黄昏后",而不被倩倩发觉了。
{写在最后,本文参考了大量网上对于https的理解,大家读完之后还有不懂的欢迎一起讨论}
https的基本原理,看完你的程序员女朋友再也不和你提分手了的更多相关文章
- 我看谁还说程序员不会P图?拜托~4行python代码就够~
我们平时使用一些图像处理软件时,经常会看到其对图像的亮度.对比度.色度或者锐度进行调整.你是不是觉得这种技术的底层实现很高大上? 其实最基础的实现原理,用 Python 实现只需要几行代码,学会后你也 ...
- 作为程序员,再也不想和PM干架了
上周,又看见有程序和PM(产品经理)吵了起来,大致是因为晚上就要上线了,下午的时候PM来说要改点需求,但程序不愿意.兴许是天气热了,大家都很烦躁,于是一言不合就发飙了,最终还是程序老大介入才解决了问题 ...
- 从GitHub Jobs! 看技术发展趋势! 程序员进阶必备!
0. https://jobs.github.com/positions GitHub Jobs: 1. https://jobs.github.com/positions/38bb8dc8-b5b4 ...
- JAVA程序员必看的15本书-JAVA自学书籍推荐
作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...
- 2017年 Java 程序员,风光背后的危机
不得不承认,经历过行业的飞速发展期,互联网的整体发展趋于平稳.为什么这么说?为什么要放在 Java 程序员的盘点下说? 的确,对于进可攻前端,后可守后端大本营的 Java 程序员而言,虽然供应逐年上涨 ...
- windows/Linux下的程序员文档浏览工具
Dash + Alfred https://www.jianshu.com/p/77d2bf8df81f 对于程序员来说,查看api文档是非常频繁,经常窗口之间切换非常麻烦,mac下就有一个查文档的神 ...
- 程序员的专属微信公众号编辑器:定制 Markdown 转 HTML
效果(Gif) 点击我查看 仓库地址 https://github.com/cdk8s/cdk8s-markdown-to-html https://gitee.com/cdk8s/cdk8s-mar ...
- Sharepoint程序员应该了解的知识
做为一个Sharepoint程序员应该了解的知识:注意,我说的是程序员.因为我一直把自己看一个普普通通的程序员. 前提: 要知道网络基础(包括DHCP.IP.掩码.DNS.网关.广播),会装操作系统( ...
- 为什么程序员老在改 Bug,就不能一次改好吗?
程序员的日常三件事:写Bug.改Bug.背锅.连程序员都自我调侃道,为什么每天都在加班?因为我的眼里常含Bug. 但是真的有这么多Bug要改吗?就不能一次改完吗? 程序员听这问题后要拍键盘了,还!真! ...
随机推荐
- js获取日期当天的开始时间和结束时间
//函数调用传参格式为 2018-6-6或者2018.6.6//如:startUnix(2018-6-6) 返回的时间戳格式‘1528300799’ function startUnix($date) ...
- applicationContext-redis.xml
一.动态切换单机和集群 spring-redis 的配置 <!-- 连接redis单机版 --> <bean id="jedisClientPool" class ...
- 操作服务器及MySQL数据库可以使其远程链接
转自原文操作服务器及MySQL数据库可以使其远程链接 一般情况分三个地方准备,MySQL数据库,防火墙,还有你的服务器主机的准备 操作系统为centos6.5.其他系统大致差不多. 1:在服务器中安装 ...
- [Angular] Upgrade existing Angular app to Progressive Web App
If you alread have an existing Angular application and want to upgrade to progressive web app. 1. In ...
- hdu2688 Rotate(树状数组)
题目链接:pid=2688">点击打开链接 题意描写叙述:对一个长度为2<=n<=3000000的数组,求数组中有序对(i<j而且F[i]<F[j])的数量?其 ...
- 2015.04.16,外语,读书笔记-《Word Power Made Easy》 11 “如何辱骂敌人” SESSION 28
TEASER PREVIEW (Teaser 片头,预告片,玩笑 Teaser trailer:预告片) 如何称呼这些人: 完全盲目的服从(obedience [әu'bi:diәns] n. 服从, ...
- ROW_NUMBER (Transact-SQL)
SELECT ROW_NUMBER() OVER ( ORDER BY MemberID DESC ) , * FROM dbo.tbm_mem_Member_Beneficiary ORDER BY ...
- Ubuntu开机报错:could not update ICEauthority file /home/user/.ICEauthority(转载)
解决方法如下: 一. 代码:sudo chown $USER:$USER /home/$USER/.ICEauthority sudo chmod 644 /home/$USER/.IC ...
- ROS-URDF文件标签解读
前言:URDF文件标签解读.margin: auto; width: 700px; height: 100px; ; width: 700px; text-align: center; 一.连杆(li ...
- synchronized同步机制,修饰类和修饰对象的区别
synchronized用法 synchronized修饰的对象有几种: 修饰一个类:其作用的范围是synchronized后面括号括起来的部分,作用的对象是这个类的所有对象: 修饰一个方法:被修饰的 ...