译者:@Edgar

译文链接:http://www.zcfy.cc/article/how-does-https-work-1280.html
原文链接:http://www.songzhw.com/2016/09/13/how-does-https-work/
这篇文章来自于我在团队的内部分享。很多人可能不能很好的理解HTTPS,不能理解为什么HTTPS的代码要那样写。因此我写了这片博客,希望能让更多人了解HTTPS。
密码(Cipher)
Java 1.2内置了一个叫做"JCE"(Java Crytography Extension)的系统。它主要负责Java内部的密钥和证书的管理。
众所周知,我们要给一段信息加密或者解密,就必须要有密钥。这就好比开门或者锁门,你得有一把钥匙。
这个密钥可以用Java带的KeyGenerator 或者 KeyPairGenerator生成。前者用于生成对称密钥,后者用于生成分对称密钥。
  • 对称加密(symmetric cryptography) _ 使用相同的key加密和解密

  • 非对称加密(asymmetric cryptography) — 使用不同的keys加密和解密。keys通常分为公钥和私钥。

公钥也许分布广泛,但是私钥只有它的服务器知道。
在一个安全的非对称加密方案中,当使用公钥加密一段信息后,只有配对的私钥可以解密这一段信息。因此,即使黑客拿到了公钥加密信息,他也不能解密这一段信息。因为他没有配对的私钥。所以说,使用非对称加密传输的信息是安全的。
证书(Certificate)
生活中,假设你要买钻石然后进入了一家钻石店。你怎么能够知道钻石是真的。对于多数人来说,他们没有钻石相关的知识,是很难分辨钻石的真假的。但是,如果这家店有美国政府发布的的钻石营业执照,你就能确定这家店卖的是真的钻石。
证书在计算机世界好比上面说的营业执照,它可能有另一些密钥——另一个证书(假设是“B”)。这个密钥正是我需要的,而“B”则是证明这个证书是可信赖的凭证。
你可能会问:我怎么知道“B”是可信的。这是一个好问题。
Android在手机里内置了将近150份CA(certificate agent 代理证明机构)根证书。他们就好像美国的首席法官(like the chief justice in u.s),在整个世界都是被认可的。
“B”内置了内另一个证书(C),因此我们会检查“C”是否是可信的。。。查询整条证书链,如果在这条证书链的末端或者根证书,正是我们在手机中内置的150份预设的证书之一,我们就确信原证书是合法的。
P.S. : 证书有很多格式。
  • “x.509” :x.509 证书通常用于包含公钥。

  • “PKCS12”

PKCS12证书同时包含私钥和公钥。因此,PKCS12证书需要密码开启。
Https
最后,讲讲“https”部分。之所以前面介绍“密码”和“证书”两部分,是因为HTTPs包含它们。
HTTPs(HTTP over SSL)被设计用于在互联网中安全通信。
1. 何如安全通信?
怎么才能建立安全的通信呢?首先想到的是加密。我给需要传输的数据加密,然后将数据和“加密用的密钥”传给服务器,服务器就能使用这个k密钥解密传输的数据了。 
让我们想象这样一个场景:黑客拦截了这次通信,这意味着加密用的密钥和加密的数据都被盗取了。如果黑客有密钥,解密这段加密的数据就不是什么难事了。好了,你的数据泄露了。
2. 非对称加密(Asymmetric Cryptography)如何呢?
上一个方法一点也不安全,我们考虑下一个,非对称加密有怎么样呢?
这是一个很棒的想法。你使用服务器提供的公钥加密信息。因为服务器是唯一知道这个与公钥配对的私钥的,这意味着只有服务器能够解密这段加密的信息。
这样,即使是黑客拦截了这段消息,它没有配对的私钥,也无法解密这段信息。因此,数据是安全的。
不足之处就是,非对称加密较对称加密来说,需要花费更长的时间来完成加解密的工作。出于用户体验的考虑,给一大串数据执行非对称加解密,并不是一个理想的方案。
3. 最终的方案
先前两个方案都失败了。有没有综合两个方案优势的方案呢?下面这个方案就是你需要的。
HTTPS :
上图很清楚的展示了HTTPS的执行加解密的过程
  • [server] 生成配对的公钥和私钥,我们称它为“Key”和“KeyPri”

  • [server] 服务器将“KeyPub”传给客户端

  • [Client] 生成对称秘钥("key2"),然后用key2加密信息

  • [Client] 使用“KeyPub”加密“key2”。因为只有服务器知道“keyPri”,所以“key2”是安全的

  • [Client]传递加密后的数据和加密的key给服务器

  • [Server] 用“KeyPri”解密这个key,拿到“key2”

  • [Server]用“key2”解密加密后的数据。数据安全的到达来了服务器(Now the data arrieve(?arrive) in Server safely)。

结论
因为对称加密比非对称加密快,因此HTTPS使用对称加密给数据加密,使用非对称加密加密对称加密生成的密钥,从而确保数据传输的安全性。使用这种方法,加密就变的即快速又安全了。
总之,理解HTTPS的工作原理是非常重要。这样在现实工作生活中就可以使用这种思想保证你的数据安全。

HTTPS是如何工作的相关推荐

  1. https是如何工作的?

    最近在看到这么一篇讲解Https原理的文章,语言精炼,通俗易懂,特地将其翻译下,原文在此how does https work 加密算法简介 正文开始之前,我先来解释简单的解释下对称加密和非对称加密. ...

  2. https协议 的工作过程

    https协议 的工作过程 文章目录 https协议 的工作过程 一.用代码构造http请求 二.https ☆(这篇帖子的重点) 2.1 加密的概念 2.2 加密的工作流程 2.2.1 对称加密 ☆ ...

  3. SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程)

    SSL协议的工作流程: 服务器认证阶段:1)客户端向服务器发送一个开始信息"Hello"以便开始一个新的会话连接:2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器 ...

  4. HTTP和HTTPS协议及工作原理分析

    HTTP协议概念 HTTP协议(HyperText Transfer Protocol,超文本传输协议,属于应用层)是用于从服务器传输超内容到本地浏览器的传送协议.是一个无状态的协议 想了解http, ...

  5. HTTPS协议及其工作原理

    一.什么是HTTPS HTTP 协议(HyperText Transfer Protocol,超文本传输协议)是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 .HTTP协议传输的数据都是未 ...

  6. Https是如何工作的?

    Https这个名词在日常编程中已经是习以为常了,写代码的时候也会涉及到相关的概念,那么,为什么相关的代码要那样写,所以来讲下Https. 密码系统(Cipher) 众所周知,如果我们要加密解密一些信息 ...

  7. HTTPS代理的工作原理

    HTTPS代理实际上是HTTP代理的加强版,这里的字母"S"代表支持SSL连接的"安全".当用户想要发送敏感信息,比如用户名和密码时,可以使用这类代理,它的标准 ...

  8. 【基础协议】HTTP/HTTPS协议及其工作流程

    目录 1 HTTP协议与HTTPS协议 1.1 HTTP协议概述 1.2 HTTPS协议概述 1.3 HTTPS与HHTP区别 2 URI和URL相关知识 2.1 URI统一资源标识符 2.2 URL ...

  9. [信息安全] 3.HTTPS工作流程

    0. 简单回顾 在前面两篇博客中介绍了密码相关的一些基本工具,包括(对称密码,公钥密码,密码散列函数,混合密码系统,消息认证码码,数字签名,伪随机数,数字证书)这几个.其中它们之间也是互相依赖的,我们 ...

最新文章

  1. boost的chrono模块最小时间点的测试程序
  2. OpenCV无缝克隆不带GUI的模块的实例(附完整代码)
  3. JQuery 自动触发事件
  4. 如何跑通第一个 SQL 作业
  5. Vue学习笔记进阶篇——Render函数
  6. php str cmp,php中整数的strcmp equivalent(intcmp)
  7. 使用AWS Lambda的CloudWatch事件通知
  8. 各个页面样子的实现与演示
  9. Vue列表渲染---vue工作笔记0009
  10. 软件测试——检查代码
  11. 谷歌用3亿张图做了个深度学习实验,结论:数据还是越大越好
  12. 樊登讲亲密关系_《亲密关系》
  13. AUTOCAD——线宽设置
  14. 网线的交叉线和直通线原理
  15. unity骨骼动画学习
  16. 科技正渗透进你生活的全部
  17. linux统计文件单词数,Linux怎么统计文本的的行数/单词数和字符数?
  18. 二维码的生成加背景图片的嵌套-支付宝(Java)
  19. 在月亮湖捡到鸿蒙,在腾格里沙漠深处,有6000万年前的湖泊,水深4米
  20. Windows 版 SourceTree 免登录跳过初始设置的方法

热门文章

  1. 如何在XSLT中将字符串转换为大写或小写形式
  2. Visual Studio 2008带来了什么
  3. 黑客攻防技术宝典Web实战篇第2版—第8章 攻击访问控制
  4. 我们能用 lua 做什么
  5. 最简单的Jdbc连接Oracle代码
  6. InputStreamReader 和 OutputStreamWriter类用法简介,及演示。
  7. angular 定义对象_angularjs – 如何创建一个可以在Angular中使用的自定义对象类
  8. iOS OC与JS交互(WebView监听事件)
  9. Datatables + Bootstrap
  10. 对百度超级链Xuper使用过程中的进一步理解