(1) 对称加密加密与解密使用的是同样的密钥,所以速度快,但由于需要将密钥在网络传输,所以安全性不高。
(2) 非对称加密使用一对密钥,公钥与私钥,所以安全性高,但加密与解密速度慢。
(3) 解决的办法是将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。
对称密钥算法非常适合于快速并安全地加密数据。但其缺点是,发件人和收件人必须在交换数据之前先交换机密密钥。结合使用加密数据的对称密钥算法与交换机密密钥的公钥算法可产生一种既快速又灵活的解决方案。
基于公钥的密钥交换步骤如下:
发件人获得收件人的公钥。
发件人创建一个随机机密密钥(在对称密钥加密中使用的单个密钥)。
发件人使用机密密钥和对称密钥算法将明文数据转换为暗文数据。
发件人使用收件人的公钥将机密密钥转换为暗文机密密钥。
发件人将暗文数据和暗文机密密钥一起发给收件人。
收件人使用其私钥将暗文机密密钥转换为明文。
收件人使用明文机密密钥将暗文数据转换为明文数据。
同样,这些步骤是由启用 PKI 的应用程序(如 Microsoft Outlook)来完成的,并且对用户来说是透明的。
https中 通过server 的证书来交换密钥,这个过程是明文的还是加密的?这个过程被人截获后不怕被人拿到密钥从而破解整个https?
系统中会预先安装好证书,进行https通讯前会核对公钥是否在传输中被篡改。只有不信任一些不可靠证书,通讯才能安全。
https:
服务器 用RSA生成公钥和私钥
把公钥放在证书里发送给客户端,私钥自己保存
客户端首先向一个权威的服务器检查证书的合法性,如果证书合法,客户端产生一段随机数,这个随机数就作为通信的密钥,我们称之为对称密钥,用公钥加密这段随机数,然后发送到服务器
服务器用密钥解密获取对称密钥,然后,双方就已对称密钥进行加密解密通信了
===============================================================
摘要:本文用图文的形式一步步还原HTTPS的设计过程,进而深入了解原理。
A在向B进行通信时,如果是以明文的方式进行通信,中间qieting者会获得双方的传输的数据hello。
HTTPS要解决如下问题:
A发给B的hello消息包,即使被中间人拦截到了,也无法得知消息的内容
如何做到安全
这个问题,很多人马上就想到了各种加密算法,什么对称加密、非对称加密、DES、RSA、XX、。。。。
做到安全的最终目的:
A与B通信的内容,有且只有A和B有能力看到通信的真正内容
对于解决方案,很容易就想到了对消息进行加密。
A与B这样的简单通信模型,我们很容易做出选择:
这就是对称加密算法,其中图中的密钥S同时扮演加密和解密的角色。
只要这个密钥S不公开给第三者,同时密钥S足够安全,就可以解决通信的安全问题。
但是,在WWW环境下,我们的Web服务器的通信模型没有这么简单:
如果服务器端对所有的客户端通信都使用同样的对称加密算法,无异于没有加密。那怎么办呢?即能使用对称加密算法,又不公开密钥?
答案是:Web服务器与每个客户端使用不同的对称加密算法:
如何确定对称加密算法
首先需要解决服务器端怎么告诉客户端该使用哪种对称加密算法问题。
可以通过协商。
但是,你协商的过程是没有加密的,还是会被中间人拦截。那再对这个协商过程进行对称加密好了,但是对协商过程加密的加密还是没有加密,怎么办?再加密不就好了……进入了鸡生蛋蛋生鸡的问题了。
如何对协商过程进行加密
密码学领域中,有一种称为“非对称加密”的加密算法,特点是私钥加密后的密文,只要是公钥,都可以解密,但是公钥加密后的密文,只有私钥可以解密。私钥只有一个人有,而公钥可以发给所有的人。
虽然服务器端向A、B……的方向还是不安全的,但是至少A、B向服务器端方向是安全的。
解决了协商加密算法的问题:使用非对称加密算法进行对称加密算法协商过程。
到这里明白了为什么HTTPS同时需要对称加密算法和非对称加密算法。
协商什么加密算法
要达到Web服务器针对每个客户端使用不同的对称加密算法,同时,也不能让第三者知道这个对称加密算法是什么,该怎么解决?
使用随机数,就是使用随机数来生成对称加密算法。这样就可以做到服务器和客户端每次交互都是新的加密算法、只有在交互的那一该才确定加密算法。
到这里明白了为什么HTTPS协议握手阶段会有这么多的随机数。
如何得到公钥
仔细思考下,如果使用非对称加密算法,客户端A,B需要一开始就持有公钥,否则无法进行加密。
所以需要解决A,B客户端安全的获得公钥问题。
可以有以下方案:
方案1. 服务器端将公钥发送给每一个客户端
方案2. 服务器端将公钥放到一个远程服务器,客户端可以请求得到
选择方案1,因为方案2又多了一次请求,还要另外处理公钥的存放问题。
公钥被调包了怎么办
对于方案1如果服务器端发送公钥给客户端时,被中间人调包了,怎么办?
通过下图来理解:
显然,让每个客户端的每个浏览器默认保存所有网站的公钥是不现实的。
使用第三方机构的公钥
公钥被调包的问题出现,是因为我们的客户端无法分辨返回公钥的人到底是中间人,还是真的服务器。这其实就是密码学中提的身份验证问题。
使用数字证书来解决,不能直接将服务器的公钥传递给客户端,而是第三方机构使用它的私钥对我们的公钥进行加密后,再传给客户端。客户端再使用第三方机构的公钥进行解密。
假如下图是设计的第一版“数字证书”,证书中只有服务器交给第三方机构的公钥,而且这个公钥被第三方机构的私钥加密了:
如果能解密,就说明这个公钥没有被中间人调包。因为如果中间人使用自己的私钥加密后的东西传给客户端,客户端是无法使用第三方的公钥进行解密的。
话到此,我以为解决问题了。但是现实中HTTPS,还有一个数字签名的概念,我没法理解它的设计理由。
仔细思考,其实第三方机构不可能只给你一家公司制作证书,它也可能会给中间人这样有坏心思的公司发放证书。这样的,中间人就有机会对你的证书进行调包,客户端在这种情况下是无法分辨出是接收的是你的证书,还是中间人的。因为不论中间人,还是你的证书,都能使用第三方机构的公钥进行解密。像下面这样:
第三方机构向多家公司颁发证书的情况:
客户端能解密同一家第三机构颁发的所有证书:
最终导致其它持有同一家第三方机构证书的中间人可以进行调包:
这个问题需要使用数字签名技术。
.....
相关推荐
在IT行业中,软件架构师是技术领导力的关键角色,他们负责设计、规划和管理软件项目的整体结构,确保系统的可扩展性、稳定性和高效性。"通往架构师的必经之路"是一个重要的主题,旨在帮助有志于成为架构师的专业人士...
Java架构师必读书籍概览 本资源总结了10本Java架构师必读书籍,涵盖了大型网站系统架构、分布式系统设计、Java中间件实践、Web信息架构设计、Java Web技术内幕、负载均衡技术、网站性能优化、高性能电子商务平台...
### 架构师之路必读书籍推荐 #### 1. Web性能权威指南 - **核心内容**:本书全面覆盖了Web开发者技术体系中所需的网络及性能优化知识,从基础的TCP、UDP和TLS协议讲起,指导如何针对这些协议进行应用优化。进一步...
这两本书都是Java架构师的必读之作。 此外,《企业应用架构模式》是马丁·福勒的另一本名著,它阐述了许多常见的企业应用架构模式,有助于理解框架设计背后的原理。而《敏捷软件开发:原则、模式与实践》(Uncle ...
大型网络架构技术的设计核心原理和一些典型的案例分析.对成为一个成功的架构师来说是必读之物!!!
根据给定文件的信息,我们可以梳理出一系列针对J2EE架构师的重要知识点,这些知识点主要来源于推荐书籍的内容概要。下面将详细阐述这些书籍所涵盖的关键技术领域及其在J2EE开发中的应用。 ### Java基础理论 - **...
在追求成为百万年薪架构师的道路上,你需要经过四个关键阶段:基础建设、技术深化、实践经验与创新思维。每个阶段都对应着不同的技能和知识体系,下面将详细展开讲解。 第一阶段:基础建设 在这个阶段,你需要掌握...
以下是一些推荐的书籍,它们涵盖了从入门到精通,再到架构师级别的知识。 1. **《Java编程思想》** 这本书对于有一定编程经验的Java初学者来说,是深入理解Java语言的理想选择。作者 Bruce Eckel 详尽地阐述了Java...
周爱民,南潮首席架构师,在他的分享中详细介绍了JavaScript语言在引擎级别的执行过程,包括环境的准备、作用域及环境的区别、可执行上下文的构建及执行原理、过程中的控制和执行结果的返回。周爱民还展开了语法的...
### Java程序员必读的书知识点概述 ...通过上述书籍的学习,Java程序员可以从入门到精通,再到成为架构师的道路上不断进步。每一本书都有其独特的价值,建议读者根据自身的需求和兴趣选择合适的书籍进行深入学习。
而且还深入阐述了每一种模式的原理,以及这些模式的适用场景、可以解决的问题、采用之后的影响、详细的解决方案、需要考虑的因素,以及相应的示例,是Web服务设计开发人员、企业架构师和解决方案架构师必读的一本书...
这不仅仅是一份书籍列表,更是一个系统的学习路径,帮助Java程序员从入门到进阶再到成为架构师的全过程。 ### 一、Java编程入门类 #### 1. **《Java编程思想》** - **简介**:这本书适合已经有一定Java编程基础...
- 内容:介绍了EJB 3.0规范及其在企业级应用中的实践,适合高级开发人员和架构师。 - **《Hadoop权威指南》** - 内容:详解Hadoop大数据处理框架,适合从事大数据分析和处理的开发人员。 - **《Linux内核完全...
- **总体设计阶段**:由系统架构师制定整体设计方案。 - **详细设计阶段**:具体实现方案的设计,包括软硬件设计。 - **编码与测试阶段**:编写代码并进行功能测试。 - **优化与调试阶段**:对产品进行优化和完善。 ...