用HTTP协议,看个新闻还没有问题,但是换到更加严肃的场景中就存在很多的安全风险。 例如,下单做一次支付,如果还是使用普通的HTTP协议,那很可能会被黑客盯上

发送一个请求说要点个外卖,但是这个网络包被截获了,于是在服务器回复你之前,黑客先假装自己就是外卖网站,然后给你回复一个假的消息说:“好啊好啊,来来来,银行卡号、密码拿来”,如果这时候你把银行卡密码发给它,那就真的上套了

那怎么解决这个问题呢?当然一般的思路就是加密。加密分为两种方式一种是对称加密,一种是非对称加密

在对称加密算法中,加密和解密使用的密钥是相同的。也就是说,加密和解密使用的是同一个密钥。因此,对称加密算法要保证安全性的话,密钥要做好保密。只能让使用的人知道,不能对外公开

在非对称加密算法中,加密使用的密钥和解密使用的密钥是不相同的。一把是作为公开的公 钥,另一把是作为谁都不能给的私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密

因为对称加密算法相比非对称加密算法来说,效率要高得多,性能也好,所以交互的场景下多用对称加密

一、对称加密

假设你和外卖网站约定了一个密钥,你发送请求的时候用这个密钥进行加密,外卖网站用同样的密钥进行解密。这样就算中间的黑客截获了你的请求,但是它没有密钥,还是破解不了

1.1 对称加密的问题

这看起来很完美,但是中间有个问题,双方怎么来约定这个密钥呢?如果这个密钥在互联网上传输,也是很有可能让黑客截获的。黑客一旦截获这个秘钥,然后等着你们两个交互。这时你们之间互通的任何消息,它都能截获并且查看,就等你把银行卡账号和密码发出来

1.2 对称加密的密钥约定

在谍战剧里面经常看到这样的场景,就是特工破译的密码会有个密码本,截获无线电台,通过密码本就能将原文破解出来。怎么把密码本给对方呢?只能通过线下传输

比如,你和外卖网站偷偷约定时间地点,它给你一个纸条,上面写着你们两个的密钥,然后说以后就用这个密钥在互联网上定外卖了。当然你们接头的时候,也会先约定一个口号如"天王盖地虎"之类的,口号对上了,才能把纸条给它。但是,"天王盖地虎"同样也是对称加密密钥,同样存在如何把"天王盖地虎"约定成口号的问题。而且在谍战剧中一对一接头可能还可以,在互联网应用中,客户太多,这样是不行的

二、非对称加密

所以,只要是对称加密,就会永远在这个死循环里出不来,这时就需要非对称加密介入进来

2.1 非对称加密解决密钥私密性的问题

非对称加密的私钥放在外卖网站这里,不会在互联网上传输,这样就能保证这个秘钥的私密 性。但是,对应私钥的公钥是可以在互联网上随意传播的,只要外卖网站把这个公钥给你,你们就可以愉快地互通了

比如说你用公钥加密,说"我要定外卖",黑客在中间就算截获了这个报文,因为它没有私钥也是解不开的,所以这个报文可以顺利到达外卖网站,外卖网站用私钥把这个报文解出来,然后回复"那给我银行卡和支付密码吧"

2.2 公钥公开导致任意人都可使用

先别太乐观,这里还是有问题的。回复的这句话是外卖网站拿私钥加密的,互联网上人人都可以把它打开,当然包括黑客。那外卖网站可以拿公钥加密吗?当然不能,因为它自己的私钥只有它自己知道,谁也解不开

另外,这个过程还有一个问题,黑客也可以模拟发送"我要定外卖"这个过程的,因为它也有外卖网站的公钥

2.3 服务端和客户端均持有公钥私钥

为了解决这个问题,看来一对公钥私钥是不够的,客户端也需要有自己的公钥和私钥,并且客户端要把自己的公钥给外卖网站

这样,客户端给外卖网站发送的时候,用外卖网站的公钥加密。而外卖网站给客户端发送消息的时候,使用客户端的公钥。这样就算有黑客企图模拟客户端获取一些信息,或者半路截获回复信息,但是由于它没有私钥,这些信息它还是打不开

三、数字证书

3.1 公钥如何鉴定正确性的问题

不对称加密也会有同样的问题,如何将不对称加密的公钥给对方呢?一种是放在一个公网的
地址上让对方下载,另一种就是在建立连接的时候传给对方

这两种方法有相同的问题,那就是作为一个普通网民,怎么鉴别别人给你的公钥是对的。会不会有人冒充外卖网站发给你一个它的公钥。接下来,你和它所有的互通,看起来都是没有任何问题的。毕竟每个人都可以创建自己的公钥和私钥

3.2 公钥和私钥的创建

例如,搭建一个网站cliu8site,可以通过这个命令先创建私钥

openssl genrsa ‑out cliu8siteprivate.key 1024

然后,再根据这个私钥,创建对应的公钥

openssl rsa ‑in cliu8siteprivate.key ‑pubout ‑outcliu8sitepublic.pem

3.3 权威部门颁发证书CA证明

这个时候就需要权威部门的介入了,就像每个人都可以打印自己的简历说自己是谁,但是有公安局盖章的就只有户口本,这个才能证明你是你。这个由权威部门颁发的称为证书(Certificate)

证书里面有什么呢?当然应该有公钥,这是最重要的,还有证书的所有者,就像户口本上有你的姓名和身份证号说明这个户口本是你的,另外还有证书的发布机构和证书的有效期,这个有点像身份证上的机构是哪个区公安局,有效期到多少年

3.4 证书CA的生成

这个证书是怎么生成的呢?会不会有人假冒权威机构颁发证书呢?就像有假身份证、假户口本一样。生成证书需要发起一个证书请求,然后将这个请求发给一个权威机构去认证,这个权威机构我们称为CA(Certificate Authority)

证书请求可以通过这个命令生成

openssl req ‑key cliu8siteprivate.key ‑new ‑out cliu8sitecertificate.req

将这个请求发给权威机构,权威机构会给这个证书卡一个章,称为签名算法
问题又来了,那怎么签名才能保证是真的权威机构签名的呢?当然只有用仅掌握在权威机构手里的东西签名了才行,这就是CA的私钥

3.5 签名算法的工作过程

签名算法大概是这样工作的:
一般是对信息做一个Hash计算,得到一个Hash值,这个过程是不可逆的,也就是说无法通过Hash值得出原来的信息内容。再把信息发送出去时,把这个Hash值加密后,作为一个签名和信息一起发出去

权威机构给证书签名的命令是这样的:

openssl x509 ‑req ‑in cliu8sitecertificate.req ‑CA cacertificate.pem ‑CAkey caprivate.key ‑out cliu8s

这个命令会返回Signature ok,而cliu8sitecertificate.pem就是签过名的证书。CA用自己的私钥给外卖网站的公钥签名,就相当于给外卖网站背书,形成了外卖网站的证书

3.6 证书CA的内容

查看这个证书的内容:

openssl x509 ‑in cliu8sitecertificate.pem ‑noout ‑text

有几个字段说明一下:

  • Issuer:证书是谁颁发的
  • Subject:证书颁发给谁
  • Validity:证书期限
  • Public-key:公钥内容
  • Signature Algorithm:签名算法

这下好了,你不会从外卖网站上得到一个公钥,而是会得到一个证书,这个证书有个发布机构CA,你只要得到这个发布机构CA的公钥,去解密外卖网站证书的签名,如果解密成功,Hash也对的上,就说明这个外卖网站的公钥没有啥问题

3.7 如何确定CA公钥的正确性

有没有发现,又有新问题了。要想验证证书,需要CA的公钥,问题是怎么确定CA的公钥就是对的呢?

所以,CA的公钥也需要更牛的CA给它签名,然后形成CA的证书。要想知道某个CA的证书是
否可靠,要看CA的上级证书的公钥,能不能解开这个CA的签名。就像你不相信区公安局,可 以打电话问市公安局,让市公安局确认区公安局的合法性。这样层层上去,直到全球皆知的
几个著名大CA,称为root CA,做最后的背书。通过这种层层授信背书的方式,从而保证了非对称加密模式的正常运转

除此之外,还有一种证书称为Self-Signed Certificate,就是自己给自己签名。这个给人一种"我就是我,你爱信不信"的感觉

四、HTTPS的工作模式

可以知道,非对称加密在性能上不如对称加密,那是否能将两者结合起来呢?例如,公钥私钥主要用于传输对称加密的秘钥,而真正的双方大数据量的通信都是通过对称加密进行的

当然是可以的。这就是HTTPS协议的总体思路

当登录一个外卖网站时,由于是HTTPS协议,客户端会发送Client Hello消息到服务器,以明文传输TLS版本信息、加密套件候选列表、压缩算法候选列表等信息。另外,还会有一个随机数,在协商对称密钥的时候使用
这就类似在说:“您好,我想定外卖,但你要保密我吃的是什么。这是我的加密套路,再给你个随机数,你留着”

然后,外卖网站返回Server Hello消息,告诉客户端,服务器选择使用的协议版本、加密套件、压缩算法等,还有一个随机数,用于后续的密钥协商
这就类似在说:“您好,保密没问题,咱们就按套路2来吧,我这里也有个随机数,你也留着”

然后,外卖网站会给你一个服务器端的证书,然后说:“Server Hello Done,我这里就这些信
息”

你当然不相信这个证书,于是你从自己信任的CA仓库中,拿CA的证书里面的公钥去解密外卖网站的证书。如果能够成功,则说明外卖网站是可信的。这个过程中,你可能会不断往上追溯CA、CA的CA、CA的CA的CA,反正直到一个授信的CA就可以了

证书验证完毕之后,觉得这个外卖网站可信,于是客户端计算产生随机数字Pre-master,发送Client Key Exchange,用证书中的公钥加密后再发送给服务器,服务器可以通过私钥解密出来

到目前为止,无论是客户端还是服务器,都有了三个随机数,分别是:自己的、对端的,以及刚生成的Pre-Master随机数。通过这三个随机数,可以在客户端和服务器产生相同的对称密钥

有了对称密钥,客户端就可以说:“Change Cipher Spec,咱们以后都采用协商的通信密钥和加密算法进行加密通信”

然后发送一个Encrypted Handshake Message,将已经商定好的参数等,采用协商密钥进行加密,发送给服务器用于数据与握手验证

同样,服务器也可以发送Change Cipher Spec,说:“没问题,咱们以后都采用协商的通信密钥和加密算法进行加密通信”,并且也发送Encrypted Handshake Message的消息试试。当双方握手结束之后,就可以通过对称密钥进行加密传输

这个过程除了加密解密之外,其他的过程和HTTP是一样的,过程也非常复杂

上面的过程只包含了HTTPS的单向认证,也即客户端验证服务端的证书是大部分的场景, 也可以在更加严格安全要求的情况下,启用双向认证,双方互相验证证书

五、重放与篡改

其实,这里还有一些没有解决的问题,例如重放和篡改的问题

没错,有了加密和解密,黑客截获了包也打不开了,但是它可以发送N次。这个往往通过Timestamp和Nonce随机数联合起来,然后做一个不可逆的签名来保证

Nonce随机数保证唯一,或者Timestamp和Nonce合起来保证唯一,同样的请求只接受一次,于是服务器多次受到相同的Timestamp和Nonce,则视为无效即可

如果有人想篡改Timestamp和Nonce,还有签名保证不可篡改性,如果改了用签名算法解出 来,就对不上了,可以丢弃了

六、小结

关于HTTPS协议的加密、证书和工作模式等知识点总结一下:

  • 加密分对称加密和非对称加密。对称加密效率高,但是解决不了密钥传输问题,非对称加密可以解决这个问题,但是效率不高
  • 非对称加密需要通过证书和权威机构来验证公钥的合法性
  • HTTPS是综合了对称加密和非对称加密算法的HTTP协议,既保证传输安全,也保证传输效率

【网络协议趣谈】HTTPS协议加密证书和工作模式相关推荐

  1. tomcat 将http协议改为https协议,Websocket请求ws协议修改为wss协议

    tomcat 将http协议改为https协议,Websocket请求ws协议修改为wss协议 一. 说明 WS协议和WSS协议两个均是WebSocket协议的SCHEM,两者一个是非安全的,一个是安 ...

  2. 不愧是华为研究院19级研究员,轻松就把网络协议趣谈了

    苦且绕不过去.经过多次放弃之后,我发现在我的职业生涯中,网络这一关无论如何也绕不过去.本来觉得写Java程序时可以依赖别人的库,所以就不用关心这么多底层的技术了,但是到后来才发现,服务数量一多,吞吐量 ...

  3. 【网络协议趣谈】什么是网络协议

    下面是一段经典的Hello World!代码 public class HelloWorld {public static void main(String[] args){System.out.pr ...

  4. 【网络协议趣谈】网络分层的含义

    一.四个问题拷问 为什么网络要分层呀?因为不同的层次之间有不同的沟通方式,这个叫作协议.例如,一家公司也是分层次的,分总经理.经理.组长.员工.总经理之间有他们的沟通方式,经理和经理之间也有沟通方式, ...

  5. 【网络协议趣谈】CDN静态和动态数据缓存

    当一个用户想访问一个网站时,指定这个网站的域名,DNS就会将这个域名解析为地址,然后用户请求这个地址,返回一个网页.就像要买个东西,首先要查找商店的位置,然后去商店里面找到自己想要的东西,最后拿着东西 ...

  6. 【网络协议趣谈】UDP协议

    对于非底层开发或者应用层开发来讲,最常用的就是UDP和TCP协议.这两个协议经常会被放在一起问,接下来两个协议结合学习 一.TCP和UDP有哪些区别 1.1 TCP面向连接 一般问两个协议的区别时,大 ...

  7. 网络(9)-HTTPS协议

    一.HTTPS的概念 HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础 ...

  8. 免费申请下载SSL证书与证书的安装部署教程,网站服务由网站由http协议升级为https协议

    文章目录 相关技术术语 SSL SSL证书 HTTPS 证书申请 证书安装 在Tomcat服务器安装SSL证书 示例使用 阿里云SSL证书服务 相关技术术语 SSL 安全套接层SSL(Secure S ...

  9. 11.网络协议-HTTP及HTTPS协议

    1.HTTP需求背景 万维网(www) • Http是一种网络协议,也是互联网上应用最为广泛的一种,http也叫超文本传输协议,所有的html文件都是遵循这个标准进行传输的. • HTTP的出现是为了 ...

最新文章

  1. PHP executable not found. Install PHP 7 and add it to your PATH or set the php.executablePath settin
  2. EL之RF(RFR):利用RandomForestRegressor对回归问题(实数值评分预测)建模(调2参)
  3. python适合零基础的人吗_学Python需要什么基础知识?零基础可以学Python吗?
  4. 1)机器学习基石笔记Lecture1:The Learning Problem
  5. Spring Boot 前端传json数组,后台接收处理
  6. Maven学习总结(十一)——Maven项目对象模型pom.xml文件详解
  7. 2020-03-25 赵子清汇编语言教程
  8. 朗逸机器人_几张动图告诉你,工业机器人无所不能!
  9. Socket网络编程初探
  10. 光环大数据python爬虫
  11. 4G+5G多卡聚合(弱网通信)路由器视频传输最佳选择
  12. 蓝牙音箱项目:记录CSR8635芯片的蓝牙音箱的开发过程
  13. Android 和 Java 性能优化最佳实践
  14. 深度学习-86:深度学习的降维攻击及流派
  15. Mac突然中文输入法框不见了??
  16. python实现手机连续点击
  17. 介绍6款超实用的抖音数据分析工具!
  18. git常用命令-最基本操作
  19. 金融经济学期末梳理(王江)第二、三章
  20. Virbox品牌全新升级,软件加密行业引领者

热门文章

  1. 腾讯云认证体系TCA、TCP和TCE认证考试攻略与常见问题
  2. 配置基于区域策略的防火墙
  3. 微信小程序开店怎么做?
  4. 硬件部分第二次培训——中断详解
  5. 通信协议设计注意事项
  6. 生命,宇宙以及一切事物的答案是...42?
  7. Oracle查询连续几年,几月,几天的数据
  8. Redis和RedisClient 官网下载方式
  9. Springy_Facebook_Rebound
  10. VMWare------启动虚拟机时出现“start booting fron CD... Error loading image:DFEAULT.EZB”提示...