【http风险】

首先,我们来讲一下平时上网的时候,存在的风险。

初步接触过网络的同学都知道,网络上是很不安全的,尤其是各种公共场合的免费WIFI,以及手机上各种免费上网的万能钥匙。这些不安全因素会导致什么问题呢:

  1. 泄密,各类的个人信息,保存的小电影,淘宝的账号密码
  2. 篡改,收到的信息被别人修改,或者植入木马
  3. 伪装,访问到假的网站,比如访问淘宝访问到钓鱼网站,访问中日友好影院访问到澳门独家线上赌场。

当然了,还有一些特殊的情况,比如说你在夜深人静的夜,访问某91网站,实际上你那做程序员的女朋友在另外一个房间,正在陪着你看,甚至你顺手回了前女友一个消息,就算你及时删除,却还是没躲过那双程序员的眼睛。

很多同学已经比较了解http以及tcp/ip了,对于什么三次握手四次挥手也是熟的不能再熟了。http属于应用层协议,位于五层网络参考模型的最上层,小刘的数据包通过应用层,传输层,网络层,链路层封装之后,再经过物理层传输到兰兰的主机,在这几层中,数据都没有经过封装,所以,你的数据特别容易被中间的女朋友倩倩获取。

我们今天就来说一说,如何避免你的程序员女朋友盗取你的信息,趁机和你提分手。

【对称加密】

信息如果想要不被盗取,就要经过加密,现在的加密算法大致可分为两类,一类是对称加密,一类是非对称加密

我们先来说说对称加密。

对称加密的基本含义,就是算法的加密和解密全都是使用同一个密钥

在一定条件下,对称加密可以解决一部分网络安全问题。因为你和兰兰互相发送的消息,只有你和兰兰知道加密解密密钥,倩倩是不知道的,所以没有办法对你们之间的消息包进行解密,你们可以相互畅所欲言。

但是这样是有前提条件的,就是倩倩不知道你们的密钥

如果你和兰兰在约定密钥的时候数据包就已经被倩倩获取了,那你们的行为无异于脱裤子放屁,没有任何意义。

所以,对称加密算法存在的最严重的一个问题就是,密钥协商

【非对称加密】

非对称加密算法需要两个密钥,一个叫公钥,一个叫私钥

公钥加密的内容需要用私钥解密私钥加密的内容需要用公钥解密,两个密钥成对出现,缺一不可

私钥由服务器(兰兰)自己保存,公钥发送给客户端(小刘)。

小刘拿到公钥就可以把自己的消息加密并发给兰兰了,这个时候就算倩倩截获了,也无法获取消息包的具体内容,保证了小刘发给兰兰的消息的安全性。

非对称加密和对称加密一样,都存在密钥传输的问题,但是至少有一点可以保证,就是客户端发往服务器端的消息不会被泄露

非对称加密还有一个问题,就是加密解密时的效率比较低,严重影响小刘和兰兰谈情说爱。

所以我们又有一种办法,就是第一次通信的时候使用非对称加密,由客户端(小刘)产生一个对称加密的密钥,用公钥加密后发给服务器端(兰兰),服务器端用私钥解密之后,就可以使用对称加密发送消息了。

这个办法看起来天衣无缝,既解决了密钥协商的问题,又解决了非对称加密效率低的问题。

但是真的就能无所顾及了吗?并不能,我们看看倩倩的如下骚操作:

倩倩伪造了兰兰,也就是说,黑客利用一台主机,伪造了真实的服务器,使用自己的公钥和私钥去和客户端(小刘)进行消息交互,这样不光可以获取消息的内容,还可以伪造消息,从而达到某些不可告人的目的。

比如获取你的银行卡密码,直接转走你的所有资金,让你人财两空,再比如获取你的私人信息,让你身败名裂。这些都是非常严重的后果。

【数字证书】

那小刘和兰兰就真的没有更加安全的消息交互的办法了吗?

答案当然是,有!

现实生活中,我们也会有身份信息的证明,比如你说你是学生,怎么证明?我有学生证;你说你是警察,怎么证明?我有警官证。

网上也有这种证书,但是网上的证书不是实体的,所以叫数字证书

客户端第一次与服务器进行通信的时候,服务器需要拿出自己的证书,表明自己的身份以及公钥,类似:

                                           

那么这个数字证书是怎么产生的呢?总不能自己随便写一个吧。

我们思考一下,我们上面说的学生证,警官证为什么能够被大家所认同呢,是因为学生证是教育部颁发的,警官证是公安部颁发的,上面有唯一的防伪编码,我们上相关部门的网站就可以查询到了,所以我们认同这些证书是因为我们认同教育部和公安部。

数字证书也是一样,有唯一的防伪编码,以及颁发的权威机构

【CA机构】

CA机构就像之前说的教育部一样,是权威的证书颁发机构负责颁发证书以及验证证书的合法性

如果服务器需要做一个有身份的服务器,就需要向CA机构提交申请
<价格昂贵> ,需要提供包括域名,公司名称,公钥等一系列信息,CA机构审批后就可以给服务器颁发证书了。

客户端拿到证书以后,需要做两件事:

1. 验证证书编号是否可以在CA机构查到

2.核对证书上的基本信息 <比如域名> 是否与当前一致,才可以使用公钥和服务器协商对称密钥进行消息发送。

证书颁发之后,如何保证在传输的过程中不被篡改呢? 万一倩倩获取到证书之后,把公钥改成了自己的,岂不是白费功夫?

【数字签名】

依旧拿警官证举例子,家里有警察的朋友们应该都知道,警官证上面的内容是不允许涂改的,如果需要修改,必须销毁或者存档旧的警官证,颁发新的警官证并盖章才有效。

这个盖章的操作,在网络证书上面叫做数字签名

服务器向CA提出证书申请,CA在颁发证书的时候,会连同数字证书以及根据证书内容产生的摘要一并发给服务器,<摘要相当于MD5,一段绝对不会重复的无规律码>。

这个摘要是通过CA的私钥进行加密的,无法进行篡改

过程如下:

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

在这之后,服务器在与客户端通信的时候,就可以将数字证书以及数字签名出示给客户端了。

客户端拿到数字证书与签名,会进行如下过程:

  1. 找到操作系统或者浏览器信任的CA机构,使用其公钥对数字签名进行解密计算数字证书的摘要

    如果摘要与服务器发过来的一致,则表明证书没有被篡改。

  2. 从证书里获取服务器公钥,加密对称密钥
  3. 将对称密钥发送到服务器。

注意一点:

如果是伪造的数字签名,则在客户端无法做解密

因为CA的私钥是自己负责保管的,别人无法获取得到,所以无法对证书做私钥加密,自然别人也无法使用公钥进行解密。

【HTTPS】

好像一直没有提到https。

其实https很简单,就是在http的基础上添加了一个叫做SSL的协议,SSL(Secure Sockets Layer)叫做"安全套接层",后来标准化之后叫做TLS

所以,HTTPS协议就是通过以上的手段,达到网页防伪造,防篡改的成果。

这样,小刘就可以名正言顺得和兰兰一起"月上柳梢头,人约黄昏后",而不被倩倩发觉了。

{写在最后,本文参考了大量网上对于https的理解,大家读完之后还有不懂的欢迎一起讨论}

https的基本原理,看完你的程序员女朋友再也不和你提分手了的更多相关文章

  1. 我看谁还说程序员不会P图?拜托~4行python代码就够~

    我们平时使用一些图像处理软件时,经常会看到其对图像的亮度.对比度.色度或者锐度进行调整.你是不是觉得这种技术的底层实现很高大上? 其实最基础的实现原理,用 Python 实现只需要几行代码,学会后你也 ...

  2. 作为程序员,再也不想和PM干架了

    上周,又看见有程序和PM(产品经理)吵了起来,大致是因为晚上就要上线了,下午的时候PM来说要改点需求,但程序不愿意.兴许是天气热了,大家都很烦躁,于是一言不合就发飙了,最终还是程序老大介入才解决了问题 ...

  3. 从GitHub Jobs! 看技术发展趋势! 程序员进阶必备!

    0. https://jobs.github.com/positions GitHub Jobs: 1. https://jobs.github.com/positions/38bb8dc8-b5b4 ...

  4. JAVA程序员必看的15本书-JAVA自学书籍推荐

    作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...

  5. 2017年 Java 程序员,风光背后的危机

    不得不承认,经历过行业的飞速发展期,互联网的整体发展趋于平稳.为什么这么说?为什么要放在 Java 程序员的盘点下说? 的确,对于进可攻前端,后可守后端大本营的 Java 程序员而言,虽然供应逐年上涨 ...

  6. windows/Linux下的程序员文档浏览工具

    Dash + Alfred https://www.jianshu.com/p/77d2bf8df81f 对于程序员来说,查看api文档是非常频繁,经常窗口之间切换非常麻烦,mac下就有一个查文档的神 ...

  7. 程序员的专属微信公众号编辑器:定制 Markdown 转 HTML

    效果(Gif) 点击我查看 仓库地址 https://github.com/cdk8s/cdk8s-markdown-to-html https://gitee.com/cdk8s/cdk8s-mar ...

  8. Sharepoint程序员应该了解的知识

    做为一个Sharepoint程序员应该了解的知识:注意,我说的是程序员.因为我一直把自己看一个普普通通的程序员. 前提: 要知道网络基础(包括DHCP.IP.掩码.DNS.网关.广播),会装操作系统( ...

  9. 为什么程序员老在改 Bug,就不能一次改好吗?

    程序员的日常三件事:写Bug.改Bug.背锅.连程序员都自我调侃道,为什么每天都在加班?因为我的眼里常含Bug. 但是真的有这么多Bug要改吗?就不能一次改完吗? 程序员听这问题后要拍键盘了,还!真! ...

随机推荐

  1. js获取日期当天的开始时间和结束时间

    //函数调用传参格式为 2018-6-6或者2018.6.6//如:startUnix(2018-6-6) 返回的时间戳格式‘1528300799’ function startUnix($date) ...

  2. applicationContext-redis.xml

    一.动态切换单机和集群 spring-redis 的配置 <!-- 连接redis单机版 --> <bean id="jedisClientPool" class ...

  3. 操作服务器及MySQL数据库可以使其远程链接

    转自原文操作服务器及MySQL数据库可以使其远程链接 一般情况分三个地方准备,MySQL数据库,防火墙,还有你的服务器主机的准备 操作系统为centos6.5.其他系统大致差不多. 1:在服务器中安装 ...

  4. [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 ...

  5. hdu2688 Rotate(树状数组)

    题目链接:pid=2688">点击打开链接 题意描写叙述:对一个长度为2<=n<=3000000的数组,求数组中有序对(i<j而且F[i]<F[j])的数量?其 ...

  6. 2015.04.16,外语,读书笔记-《Word Power Made Easy》 11 “如何辱骂敌人” SESSION 28

    TEASER PREVIEW (Teaser 片头,预告片,玩笑 Teaser trailer:预告片) 如何称呼这些人: 完全盲目的服从(obedience [әu'bi:diәns] n. 服从, ...

  7. ROW_NUMBER (Transact-SQL)

    SELECT ROW_NUMBER() OVER ( ORDER BY MemberID DESC ) , * FROM dbo.tbm_mem_Member_Beneficiary ORDER BY ...

  8. Ubuntu开机报错:could not update ICEauthority file /home/user/.ICEauthority(转载)

    解决方法如下: 一. 代码:sudo chown $USER:$USER /home/$USER/.ICEauthority        sudo chmod 644 /home/$USER/.IC ...

  9. ROS-URDF文件标签解读

    前言:URDF文件标签解读.margin: auto; width: 700px; height: 100px; ; width: 700px; text-align: center; 一.连杆(li ...

  10. synchronized同步机制,修饰类和修饰对象的区别

    synchronized用法 synchronized修饰的对象有几种: 修饰一个类:其作用的范围是synchronized后面括号括起来的部分,作用的对象是这个类的所有对象: 修饰一个方法:被修饰的 ...