目录

HTTP存在的问题

HTTPS原理

数字证书

CA可不可以用公钥加密服务器的公钥?


参考:

HTTPS理论基础及其在Android中的最佳实践_孙群的博客-CSDN博客_android httpshttps://blog.csdn.net/iispring/article/details/51615631

HTTPS是什么?加密原理和证书。SSL/TLS握手过程_哔哩哔哩_bilibili

HTTPS有什么用?比起HTTP来说有什么区别?如何实现? - 知乎

HTTP存在的问题

HTTP 由于是明文传输,所以安全上存在以下三个风险:

  • 窃听风险,比如通信链路上可以获取通信内容,用户号容易没。
  • 篡改风险,比如强制入垃圾广告,视觉污染,用户眼容易瞎。
  • 冒充风险,比如冒充淘宝网站,用户钱容易没。

HTTPS做的改进:

  • 信息加密:交互信息无法被窃取。
  • 校验机制:无法篡改通信内容,篡改了就不能正常显示。
  • 身份证书:证明淘宝是真的。

HTTPS原理

我们知道,HTTP请求都是明文传输的,所谓的明文指的是没有经过加密的信息,如果HTTP请求被黑客拦截,并且里面含有银行卡密码等敏感数据的话,会非常危险。为了解决这个问题,Netscape 公司制定了HTTPS协议,HTTPS可以将数据加密传输,也就是传输的是密文,即便黑客在传输过程中拦截到数据也无法破译,这就保证了网络通信的安全。

HTTPS协议 = HTTP协议 + SSL/TLS协议,在HTTPS数据传输的过程中,需要用SSL/TLS对数据进行加密和解密,需要用HTTP对加密后的数据进行传输,由此可以看出HTTPS是由HTTP和SSL/TLS一起合作完成的,现在大都支持TLS。

SSL的全称是Secure Sockets Layer,即安全套接层协议,是为网络通信提供安全及数据完整性的一种安全协议。SSL协议在1994年被Netscape发明,后来各个浏览器均支持SSL,其最新的版本是3.0

TLS的全称是Transport Layer Security,即安全传输层协议,最新版本的TLS(Transport Layer Security,传输层安全协议)是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。在TLS与SSL3.0之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS与SSL3.0不能互操作。虽然TLS与SSL3.0在加密算法上不同,但是在我们理解HTTPS的过程中,我们可以把SSL和TLS看做是同一个协议。

HTTPS为了兼顾安全与效率,同时使用了对称加密和非对称加密。数据是被对称加密传输的,对称加密过程需要客户端的一个密钥,为了确保能把该密钥安全传输到服务器端,采用非对称加密对该密钥进行加密传输。

总的来说,对数据进行对称加密,对称加密所要使用的密钥通过非对称加密传输。

一个HTTPS请求实际上包含了两次HTTP传输,可以细分为8步。


1.客户端向服务器发起HTTPS请求,连接到服务器的443端口

2.服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。

3.服务器将自己的公钥发送给客户端

4.客户端收到服务器端的证书之后,会对证书进行检查,验证其合法性,如果发现发现证书有问题,那么HTTPS传输就无法继续。严格的说,这里应该是验证服务器发送的数字证书的合法性,关于客户端如何验证数字证书的合法性,下文会进行说明。如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。

5.客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。

6.服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。

7.然后服务器将加密后的密文发送给客户端。

8.客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。

数字证书

通过观察HTTPS的传输过程,我们知道,当服务器接收到客户端发来的请求时,会向客户端发送服务器自己的公钥,但是黑客有可能中途篡改公钥,将其改成黑客自己的,所以有个问题,客户端怎么信赖这个公钥是自己想要访问的服务器的公钥而不是黑客的呢? 这时候就需要用到数字证书。

要想让客户端信赖公钥,公钥也要找一个担保人,这个担保人的就是证书认证中心(Certificate Authority),简称CA。 也就是说CA是专门对公钥进行认证,进行担保的,也就是专门给公钥做担保的担保公司。 全球知名的CA也就100多个,这些CA都是全球都认可的,比如VeriSign、GlobalSign等,国内知名的CA有WoSign。

那CA怎么对公钥做担保认证呢?CA本身也有一对公钥和私钥,CA会用CA自己的私钥对要进行认证的公钥进行非对称加密,此处待认证的公钥就相当于是明文,加密完之后,得到的密文再加上证书的过期时间、颁发给、颁发者等信息,就组成了数字证书。

不论什么平台,设备的操作系统中都会内置100多个全球公认的CA,说具体点就是设备中存储了这些知名CA的公钥。当客户端接收到服务器的数字证书的时候,会进行如下验证:

首先客户端会用设备中内置的CA的公钥尝试解密数字证书,如果所有内置的CA的公钥都无法解密该数字证书,说明该数字证书不是由一个全球知名的CA签发的,这样客户端就无法信任该服务器的数字证书。

    如果有一个CA的公钥能够成功解密该数字证书,说明该数字证书就是由该CA的私钥签发的,因为被私钥加密的密文只能被与其成对的公钥解密。

除此之外,还需要检查客户端当前访问的服务器的域名是与数字证书中提供的“颁发给”这一项吻合,还要检查数字证书是否过期等。

CA可不可以用公钥加密服务器的公钥?

(我的理解)

不行,如果CA用CA公钥加密 待认证的服务器公钥,那么其他人也有一样的CA公钥,任何人都可以对服务器公钥进行CA认证。

这样一些危险的网站也就有了自己的CA证书,而且这个证书客户端收到后,在用设备中内置的私钥解锁时都能正确解锁,这样客户端就误以为这是一个经过CA认证的机构。

HTTPS原理 如何实现安全通信相关推荐

  1. HTTPS原理解析-转

    这篇文章关于Https的讲解真的是太透彻了,转过来备忘. 来源:腾讯bugly 另附两个SSL/TLS的交互详解:一.二 基于此文章的学习总结:下一篇文章 1.HTTPS 基础 HTTPS(Secur ...

  2. HTTPS 原理?看这一篇就够了

    网络传输的安全性 http 协议:不安全,未加密 https 协议:安全,对请求报文和响应报文做加密 HTTP原理 HTTP因为明文传输,没有任何加密所以很容易就被拦截篡改​ 为了安全性考虑,防止数据 ...

  3. 浅谈Charles抓取HTTPS原理及HTTP CONNECT

    浅谈Charles抓取HTTPS原理 在关于HTTPS,你需要知道的全部中,分析了HTTPS的安全通信过程,知道了HTTPS可以有效防止中间人攻击.但用过抓包工具的人都知道,比如Charles,Fid ...

  4. https原理与实践

    HTTPS 原理与证书实践 分类: Web应用 1.1 网络安全知识 1.1.1 网结安全出现背景 网络就是实现不同主机之间的通讯,网络出现之初利用TCP/IP协议簇的相关协议概念,已经满足了互连两台 ...

  5. Tengine HTTPS原理解析、实践与调试【转】

    本文邀请阿里云CDN HTTPS技术专家金九,分享Tengine的一些HTTPS实践经验.内容主要有四个方面:HTTPS趋势.HTTPS基础.HTTPS实践.HTTPS调试. 一.HTTPS趋势 这一 ...

  6. HTTPS 原理解析

    http://www.cnblogs.com/zery/p/5164795.html 一 前言 在说HTTPS之前先说说什么是HTTP,HTTP就是我们平时浏览网页时候使用的一种协议.HTTP协议传输 ...

  7. HTTPS原理全面介绍【备查】

    来源:https://www.cnblogs.com/haimishasha/p/11373034.html 目录 应用层协议:HTTPS 1. HTTPS定义 2. 密码学基础 3. HTTP通信问 ...

  8. HTTPS原理、单向和双向认证

    参考文章:https://blog.51cto.com/11883699/2160032 https://www.songma.com/news/txtlist_i39807v.html 众所周知,W ...

  9. 计算机网络中的安全、常见攻击、以及HTTPS原理与抓包实践

    文章目录 计算机网络中的安全.常见攻击.以及HTTPS原理与抓包实践 计算机网络中的安全 什么是安全? 报文机密性 - 我们的谈话会被窃听吗? 报文完整性 - 我收到的报文被篡改过吗? 端点鉴别 - ...

最新文章

  1. python学习第二十八节(进程,线程)
  2. C语言中数组做函数参数的问题
  3. Unity3D 4.x 使用Mecanim实现动画控制
  4. awk教程入门与实例练习(三)
  5. sql string转number_少用 string.Format
  6. matlab2c使用c++实现matlab函数系列教程-sortrows函数
  7. 3.1 RNN 循环神经网络 概述(上篇)
  8. vue element 调用后台下载文件
  9. snipaste怎么滚动截长图_【神器】Snipaste——最好用的截图、贴图软件,没有之一...
  10. SC2disease:人类疾病的单细胞转录组的人工收集数据库
  11. 好用的开源房产管理系统测评(附源码)
  12. JS 实现打印二维码图片
  13. js将阿拉伯数字转换成大写金额
  14. “新元宇宙”奇科幻小说原创作品《地球人奇游天球记》第四回飞离地球
  15. Istio 南北向流量管理
  16. Android启动页设置
  17. 深入理解Docker ulimit
  18. 学会“狼”的思维(一)
  19. vi和view的区别 linux,vi与vim的区别
  20. ApacheCN×Tesra 免费算力申请活动

热门文章

  1. ROS 2 Humble 标定纠正畸变全景鱼眼展开网络摄像头
  2. 导入excel 模板
  3. 第二十四章 CentOS 系统配置工具: setup
  4. Nginx 原理和架构
  5. EDW与维度模型间的抉择
  6. Discuz!附件下载次数不更新的问题原因和解决办法
  7. # 55. 跳跃游戏
  8. 本地预览 @mdi/font Material Design Icons 字体图标库
  9. android 获取短信铃声,如何获取Android中的当前铃声?
  10. 千亿母婴辅食赛道崛起,建立和完善行业标准迫在眉睫