Https详解

1.什么是Https

Http + SSL = Https

一句话说:Https是身披SSL的Http,当使用了SSL后,Http先和SSL通信,再由SSL和TCP通信,

2.为什么需要Https

在用Http协议时,主要可能存在以下三个问题。

  • 1.通信使用明文,内容可能会被窃听。
  • 2.不验证通信方的身份,可能遭遇伪装。
  • 3.无法证明报文是否完整,可能遭到篡改

相应的,Https就是解决上述三个问题

  • 1.数据隐私:内容经过对称加密。
  • 2.身份认证:第三方无法伪造身份。
  • 3.数据完整性:内容传输经过完整性校验。

所以也可以这样说:

Http+加密+认证+完整性保护=Https

3.加密

3.1 对称加密

加密和解密使用同一个密钥,想要加密信息,那就需要把密钥传给客户端,只能通过光盘拷给对方,不能在网络上传输,因为很容易就被其他人获得密钥,这样谁都可以解密信息了,失去了加密的意义。优点是效率高

3.2 非对称加密

是一个密钥对,一把公钥,一把私钥,公钥任何人都能获得,但是私钥只有自己知道,发送方使用公钥加密,接收方收到后使用私钥解密,只有公钥信息也不能做到解密。缺点是加密解密需要一定时间。

3.3 对称加密+非对称加密

为了结合效率高且安全加密,使用两者混合:在交换密钥环节使用非对称加密,数据传输时用对称加密。具体是:发送密文的一方使用对方的公钥加密对称密钥,然后用对称密钥加密文件,接收方用私钥解密对称密钥,用对称密钥解密文件。

4.数字签名

数字签名是用来解决数据可能遭到篡改的情况,即校验数据完整性。

实现:A在发送文件前,先用单向散列函数(Hash)生成消息摘要,然后再用A私钥进行加密生成数字签名,然后将其与文件和A公钥一起发给B,B收到后先对文件使用相同的散列函数得到摘要,然后用A的公钥解密数字签名得到原来的摘要,两个摘要进行对比,若不相同,则证明文件被篡改。

数字签名的特点就是发送文件不加密,但不能更改,比如发送红头文件到各个地方或者官方群发特定通知,文件本身不是机密,但不能更改;

问题:A的公钥怎么传给B,或者说如何证明这个公钥就是A的。比如C可以用自己的私钥生成数字签名,然后把自己的公钥给A,然后冒充B

5.CA证书

CA证书是为了解决通信方身份被伪装的问题。

CA机构使用散列函数将证书上的明文信息(申请者公钥,申请者信息等)计算得到信息摘要,然后用CA私钥加密得到数字签名,然后将证书和数字签名一起发给客户端,客户端得到后,使用CA公钥对数字签名解密得到摘要,然后对证书计算得到摘要,将两者对比如果一样表示证书没有被中间人篡改过,确认证书的合法性,也就是服务器的公钥是值得信赖的。

:即使中间人有CA公钥,能够解析数字签名并篡改,但是篡改完成后中间人仍然需要将证书重新加密,但是中间人没有CA私钥,无法加密,强行加密会导致客户端无法解密(客户端只认那几个权威机构的公钥)。

6.公钥和私钥

要明白两种用法:

  • 1.公钥加密,私钥解密 -- 用于传输密文
  • 2.私钥签名,公钥验证 -- 用于签名

第一种情景:既然是加密,那肯定不想让别人知道我的信息,只有我才能解密,所以公钥加密,私钥解密。这过程中信息不可见,但是可能被篡改。

第二种情景:既然是签名,我就不希望别人冒充我发信息,只有我才能发,所以是私钥签名,公钥验证。这过程中信息不可篡改,但是他人可以获得。

7.Https工作流程

1、客户端发起一个https请求,根据规定,知道需要连接服务器的443端口。

2、服务器把配置好的公钥证书返回给客户端。

3、客户端验证公钥证书,比如是否在有效期内等信息。如果验证通过则继续,不通过则显示警告信息。

客户端拿CA机构的公钥解密数字签名,得到摘要,然后用散列函数计算证书得到摘要,对两个摘要进行对比,验证证书是否被篡改,服务器公钥是否可靠。

4、客户端使用伪随机数生成加密要用的对称密钥,然后用证书的公钥加密这个对称密钥,发给服务端。

5、服务端使用自己的私钥解密这个消息,得到对称密钥,现在,服务器和客户端都拥有了相同的对称密钥。(所以使用https开始的时候会有点慢)

6、服务器用对称密钥加密明文内容A,发给客户端。

7、客户端使用对称密钥解密密文,得到明文内容A。

8.https和http区别

  • http是明文传输,而https是使用SSL+http构成的加密传输,更安全。
  • http使用80端口,https使用443端口
  • http基于应用层,而https基于传输层

参考链接

深入理解HTTPS工作原理

数字签名

非对称加密

【知识详解】Https详解的更多相关文章

  1. Java web 入门知识 及HTTP协议详解

     Java  web  入门知识 及HTTP协议详解 WEB入门 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资 ...

  2. HTTPS 详解一:附带最精美详尽的 HTTPS 原理图

    HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 HTTPS详解二:SSL / TLS 工作原理和详细握手过程 前言 作为一个有追求的程序员,了解行业发展趋势和扩充自己的计算机知识储备都是很有 ...

  3. 公钥与私钥,HTTPS详解

    1.公钥与私钥原理1)鲍勃有两把钥匙,一把是公钥,另一把是私钥2)鲍勃把公钥送给他的朋友们----帕蒂.道格.苏珊----每人一把.3)苏珊要给鲍勃写一封保密的信.她写完后用鲍勃的公钥加密,就可以达到 ...

  4. 公钥与私钥,HTTPS详解 转载

    1.公钥与私钥原理1)鲍勃有两把钥匙,一把是公钥,另一把是私钥2)鲍勃把公钥送给他的朋友们----帕蒂.道格.苏珊----每人一把.3)苏珊要给鲍勃写一封保密的信.她写完后用鲍勃的公钥加密,就可以达到 ...

  5. 公钥,密钥,HTTPS详解

    公钥与私钥,HTTPS详解 1.公钥与私钥原理1)鲍勃有两把钥匙,一把是公钥,另一把是私钥2)鲍勃把公钥送给他的朋友们----帕蒂.道格.苏珊----每人一把.3)苏珊要给鲍勃写一封保密的信.她写完后 ...

  6. java的动态代理机制详解-----https://www.cnblogs.com/xiaoluo501395377/p/3383130.html

    java的动态代理机制详解-----https://www.cnblogs.com/xiaoluo501395377/p/3383130.html

  7. HTTPS详解二:SSL / TLS 工作原理和详细握手过程

    HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 HTTPS详解二:SSL / TLS 工作原理和详细握手过程 在上篇文章HTTPS详解一中,我已经为大家介绍了 HTTPS 的详细原理和通信流 ...

  8. linux tar命令 压缩、打包、解压 详解

    linux tar命令 压缩.打包.解压 详解 1.常用压缩命令 tar –czvf 压缩后的文件.tar.gz 要压缩的文件 2.常用解压命令 tar –xzvf 解压后的文件.tar.gz [要解 ...

  9. Android 6.0 RK3288 ROM编译详解+命令详解【转】

    本文转载自:http://blog.csdn.net/MLQ8087/article/details/58607692 Android 6.0 RK3288 ROM编译详解+命令详解 原创 2017年 ...

随机推荐

  1. 『言善信』Fiddler工具 — 14、使用Fiddler进行弱网测试

    目录 1.什么是弱网测试 2.弱网环境的影响 3.弱网环境测试场景 4.使用Fiddler进行弱网测试 (1)Fiddler模拟弱网环境 (2)设置弱网的参数 (3)进行弱网测试对比 (4)恢复设置 ...

  2. 阅读源码很重要,以logback为例,分享一个小白都能学会的读源码方法

    作为一个程序员,经常需要读一些开源项目的源码.同时呢,读源码对我们也有很多好处: 1.提升自己 阅读优秀的代码,第一可以提升我们自身的编码水平,第二可以开拓我们写代码的思路,第三还可能让我们拿到大厂 ...

  3. 【题解】Luogu P2875 [USACO07FEB]牛的词汇The Cow Lexicon

    题目描述 Few know that the cows have their own dictionary with W (1 ≤ W ≤ 600) words, each containing no ...

  4. 聊聊 Feign 的实现原理

    What is Feign? Feign 是⼀个 HTTP 请求的轻量级客户端框架.通过 接口 + 注解的方式发起 HTTP 请求调用,面向接口编程,而不是像 Java 中通过封装 HTTP 请求报文 ...

  5. 怎么停掉或关闭运行的npm run dev

    可以直接Ctrl+C就会出现 输入是就可以了

  6. 一QT获取当前时间和日期

    获取日期和时间使用QDateTime类,该类中有一个静态成员函数可以返回当前的时间信息 我们可以直接调用这个静态函数获取当前时间 QDateTime time = QDateTime::current ...

  7. Gerrit GitLab GitHub的几点不同

    代码评审的方式不一样 GitHub是基于Pull Request 进行代码评审; GitLab是基于Merge Request 进行代码评审; Gerrit是基于Change Request 进行代码 ...

  8. AcWing 1143. 联络员

    Tyvj已经一岁了,网站也由最初的几个用户增加到了上万个用户,随着Tyvj网站的逐步壮大,管理员的数目也越来越多,现在你身为Tyvj管理层的联络员,希望你找到一些通信渠道,使得管理员两两都可以联络(直 ...

  9. 在ubuntu16下编译openJDK11

    为什么需要编译自己的jvm源码? 想象下, 你想看看java线程是如何start的? 去源码里一找 native void start0(), 此时如果你对jvm源码比较熟悉, 那么可以下载openJ ...

  10. VisibleDeprecationWarning , Creating an ndarray from ragged nested sequences... 警告怎么办

    我不是完美主义,但是至少,我在做实验的时候不能容忍有 warning 的出现. 今天使用 tensorflow.keras.datasets中的 imdb 数据集,使用 imdb.load_data( ...