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要改吗?就不能一次改完吗? 程序员听这问题后要拍键盘了,还!真! ...
随机推荐
- ORACLE-游标数
.查看系统配置游标数 select value from v$parameter where name = 'open_cursors'; .查看游标使用情况 select o.sid, osuser ...
- 【基础训练】HDOJ2032杨辉三角
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWEdzaWxlbmNl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- POJ 3709
简单的单调队列优化,注意是哪些点加入队列即可. #include <iostream> #include <cstdio> #include <algorithm> ...
- 1、libgdx简单介绍
Libgdx 是一个跨平台和可视化的的开发框架.它当前支持Windows.Linux,Mac OS X.Android,IOS和HTML5作为目标平台. Libgdx同意你一次编写代码不经改动部署到多 ...
- Android通过Intent.ACTION_CLOSE_SYSTEM_DIALOGS监听Home按键消息
Android对屏幕下方经常使用的四个按键消息处理是不一致的: 1.搜索按键的消息在onKeyDown或者onKeyUp中接收: 2.菜单按键的消息在onCreateOptionsMenu.onKey ...
- C#创建PDF文档
说明:本实例用到了第三方组件ICSharpCode.SharpZipLib.dll.itextsharp.dll,该组件可到网上下载. 代码: using System; using System.C ...
- Android自己定义View之组合控件 ---- LED数字时钟
先上图 LEDView效果如图所看到的. 之前看到一篇博客使用两个TextView实现了该效果.于是我想用自己定义控件的方式实现一个LEDView.使用时就可以直接使用该控件. 採用组合控件的方式,将 ...
- 0x17 二叉堆
优先队列太好用了手写啥呀 poj1456 经过贪心专题的洗礼以后这题根本就不叫题啊...按时间大到小排每次取最大就好 #include<cstdio> #include<iostre ...
- FC 网络
通常情况下,SAN系统中服务器与存储介质通过一种特殊的网络相连,这种网络就是FC 网络. FC 网络是一种新发展的与传统的TCP/IP网络并列的一种高速网络.它有自己的地址分配和网络管理的体系. FC ...
- DB-MySql:MySQL 及 SQL 注入
ylbtech-DB-MySQL:MySQL 及 SQL 注入 1.返回顶部 1. MySQL 及 SQL 注入 如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL ...