by http://www.zcfy.cc/article/how-does-https-work-1280.html

密码(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的执行加解密的过程

  1. [server] 生成配对的公钥和私钥,我们称它为“Key”和“KeyPri”

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

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

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

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

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

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

结论

因为对称加密比非对称加密快,因此HTTPS使用对称加密给数据加密,使用非对称加密加密对称加密生成的密钥,从而确保数据传输的安全性。使用这种方法,加密就变的即快速又安全了。

总之,理解HTTPS的工作原理是非常重要。这样在现实工作生活中就可以使用这种思想保证你的数据安全。

HTTPS是数据交互细节的更多相关文章

  1. webpack+vue项目实战(四,前端与后端的数据交互和前端展示数据)

    地址:https://segmentfault.com/a/1190000010063757 1.前言 今天要做的,就是在上一篇文章的基础上,进行功能页面的开发.简单点说呢,就是与后端的数据交互和怎么 ...

  2. 常用的移动前端webapp交互细节

    #常用的移动前端webapp交互细节 ##select的表现方式 ###PC端 select控件在传统PC桌面已经存在多年,由于在IE6等低版本浏览器容易造成层级错乱,一直被一些UI框架所抛弃,而用d ...

  3. C# 网络通信功能 同步数据交互开发

    前言 本文将使用一个Nuget公开的组件技术来实现一对多的数据通信功能,提供了一些简单的API,来方便的向服务器进行数据请求. 在visual studio 中的Nuget管理器中可以下载安装,也可以 ...

  4. 前端和后端的数据交互(jquery ajax+python flask+mysql)

    上web课的时候老师布置的一个实验,要求省市连动,基本要求如下: 1.用select选中一个省份. 2.省份数据传送到服务器,服务器从数据库中搜索对应城市信息. 3.将城市信息返回客户,客户用sele ...

  5. 对GraphQL-BFF:微服务背景下的前后端数据交互方案的研究-------引用

    随着多终端.多平台.多业务形态.多技术选型等各方面的发展,前后端的数据交互,日益复杂. 同一份数据,可能以多种不同的形态和结构,在多种场景下被消费. 在理想情况下,这些复杂性可以全部由后端承担.前端只 ...

  6. iOS开发笔记7:Text、UI交互细节、两个动画效果等

    Text主要总结UILabel.UITextField.UITextView.UIMenuController以及UIWebView/WKWebView相关的一些问题. UI细节主要总结界面交互开发中 ...

  7. X-Plane数据交互

    要用X-Plane进行二次开发,免不了需要进行参数的传递,下面我们来看看与X-Plane进行数据交互都有哪些方式. 与FSX和Flightgear基本一样,X-Plane支持插件,自然也支持通过插件进 ...

  8. angularJs中自定义directive的数据交互

    首先放官方文档地址:https://docs.angularjs.org/guide/directive 就我对directive的粗浅理解,它一般用于独立Dom元素的封装,应用场合为控件重用和逻辑模 ...

  9. get,post,jsonp数据交互—百度下拉列表

    三种数据交互形式:get  post jsonp 一.get请求 1.引入 vue.js 和 vue-resource.js , 准备一个按钮 <input type="button& ...

随机推荐

  1. 从啥也不会到可以胜任最基本的JavaWeb工作,推荐给新人的学习路线(二)

    在上一节中,主要阐述了JavaScript方面的学习路线.先列举一下我朋友的经历,他去过培训机构,说是4个月后月薪过万,虽然他现在还未达到这个指标. 培训机构一般的套路是这样:先教JavaSE,什么都 ...

  2. openresty 前端开发入门四之Redis篇

    这章主要演示怎么通过lua连接redis,并根据用户输入的key从redis获取value,并返回给用户 操作redis主要用到了lua-resty-redis库,代码可以在github上找得到 而且 ...

  3. javaScript中的小细节-script标签中的预解析

    首先介绍预解析,虽然预解析字面意思很好理解,但是却是出坑出的最多的地方,也是bug经常会有的地方,利用好预解析的特性可以解决很多问题,并且提高代码的质量及数量,浏览器在解析代码前会把变量的声明和函数( ...

  4. “此网页上的某个 Web 部件或 Web 表单控件无法显示或导入。找不到该类型,或该类型未注册为安全类型。”

    自从vs装了Resharper,看见提示总是手贱的想去改掉它.于是乎手一抖,把一个 可视web部件的命名空间给改了. 喏,从LibrarySharePoint.WebPart.LibraryAddEd ...

  5. Kotlin类:功能更强、而更简洁(KAD 03)

    作者:Antonio Leiva 时间:Dec 7, 2016 原文链接:http://antonioleiva.com/classes-kotlin/ Kotlin类尽可能简单,这样用较少的代码完成 ...

  6. windows 7(32/64位)GHO安装指南(系统安装篇)~重点哦!!~~~~

    经过了前三篇的铺垫,我们终于来到了最重要的部分~~如果没看过前几篇的小伙伴们,可以出门右转~~用十几分钟回顾一下~~然后在看这篇会感觉不一样的~~~~ 下面让我们来正式开始吧 我们进入大白菜的桌面是酱 ...

  7. Create a bridge using a tagged vlan (8021.q) interface

    SOLUTION VERIFIED April 27 2013 KB26727 Environment Red Hat Enterprise Linux 5 Red Hat Enterprise Li ...

  8. DDD中的Unitwork与DomainEvent如何相容?(续)

    上篇中说到了面临的问题(传送门:DDD设计中的Unitwork与DomainEvent如何相容?),和当时实现的一个解决方案.在实际使用了几天后,有了新的思路,和@trunks 兄提出的观点类似.下面 ...

  9. 从is(":checked")说起

    *此文所用jQuery版本应大于1.6.1   如何判断一个单选(复选)框是否选中. 对于刚接触jQuery的人,第一反应必然是. <input id="checkbox1" ...

  10. 【深入浅出jQuery】源码浅析2--奇技淫巧

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...