开启成长之旅!这是我参与「日新方案 12 月更文挑战」的第26天,点击检查活动概况

SSL界说

SSL其实便是Secure Scoket Layer安全套接层,供给了一种为网络通讯供给安全以及数据完整性的安全协议,再传输层对网络进行加密。

  • SSL记载协议: 为高层协议供给安全封装,紧缩,加密等根本功能
  • SSL握手协议:用与再数据传输开端前进行通讯两边的身份验证、加密算法洽谈、交流秘钥

SSL作业原理

SSL 是一个安全协议,它供给运用 TCP/IP 的通讯应用程序间的隐私与完整性。因特网的 超文本传输协议(HTTP)运用 SSL 来完结安全的通讯。

在客户端与服务器间传输的数据是通过运用对称算法(如 DES 或 RC4)进行加密的。共用密钥算法(一般为 RSA)是用来取得加密密钥交流和数字签名的,此算法运用服务器的SSL数字证书中的共用密钥。有了服务器的SSL数字证书,客户端也可以验证服务器的身份。SSL 协议的版别 1 和 2 只供给服务器认证。版别 3 添加了客户端认证,此认证一起需求客户端和服务器的数字证书。

SSL加密办法

对称加密与非对称加密

在开端之前首先得对了解对称加密与非对称加密这两种加密办法。其间加密进程是

信息+密钥+算法=密文

单项加密:

单向加密便是用来计算一段数据的特征码的,为了避免用户通过“暴力破解”的办法解密,所以单向加密一般具有“雪崩效应”便是说:只需被加密内容有一点点的不同,加密所得成果就会有很大的变化。单项加密还有一个特色便是不管被加密的内容多长/短,加密的成果(便是提取特征码)是定长的,用处:用于验证数据的完整性,常用的单项加密算法

  • MD5:这种加密算法固定长度为128位
  • SHA1:这种加密算法固定长度是160位

SSL 握手

SSL 衔接总是由客户端发动的。在SSL 会话开端时执行 SSL 握手。此握手发生会话的暗码参数。关于怎么处理 SSL 握手的简单概述,如下图所示。此示例假设已在 Web 浏览器 和 Web 服务器间树立了 SSL 衔接。

Android开发之网络框架——SSL握手与加密(对称+非对称+单向加密)解析

(1) 客户端发送列出客户端暗码才能的客户端“您好”音讯(以客户端首选项顺序排序),如 SSL 的版别、客户端支撑的暗码对(加密套件)和客户端支撑的数据紧缩办法(哈希函数)。音讯也包含 28 字节的随机数。

(2) 服务器以服务器“您好”音讯响应,此音讯包含暗码办法(暗码对)和由服务器挑选的数据紧缩办法,以及会话标识和另一个随机数。

留意:客户端和服务器至少有必要支撑一个公共暗码对,否则握手失败。服务器一般挑选最大的公共暗码对。

(3) 服务器发送其SSL数字证书。(服务器运用带有 SSL 的 X.509 V3 数字证书。)

假设服务器运用 SSL V3,而服务器应用程序(如 Web 服务器)需求数字证书进行客户端认证,则客户端会宣布“数字证书恳求”音讯。在 “数字证书恳求”音讯中,服务器宣布支撑的客户端数字证书类型的列表和可承受的CA的称号。

(4) 服务器宣布服务器“您好完结”音讯并等待客户端响应。

(5) 一接到服务器“您好完结”音讯,客户端( Web 浏览器)将验证服务器的SSL数字证书的有效性并检查服务器的“你好”音讯参数是否可以承受。

假设服务器恳求客户端数字证书,客户端将发送其数字证书;或许,假设没有合适的数字证书是可用的,客户端将发送“没有数字证书”正告。此正告仅仅是正告罢了,但假设客户端数字证书认证是强制性的话,服务器应用程序将会使会话失败。

(6) 客户端发送“客户端密钥交流”音讯。此音讯包含 pre-master secret(一个用在对称加密密钥生成中的 46 字节的随机数字),和 音讯认证代码( MAC )密钥(用服务器的共用密钥加密的)。

假设客户端发送客户端数字证书给服务器,客户端将宣布签有客户端的专用密钥的“数字证书验证”音讯。通过验证此音讯的签名,服务器可以显示验证客户端数字证书的一切权。

留意: 假设服务器没有属于数字证书的专用密钥,它将无法解密 pre-master 暗码,也无法创建对称加密算法的正确密钥,且握手将失败。

(7) 客户端运用一系列加密运算将 pre-master secret 转化为 master secret,其间将派生出一切用于加密和音讯认证的密钥。然后,客户端宣布“更改暗码标准” 音讯将服务器转换为新洽谈的暗码对。客户端宣布的下一个音讯(“未完结”的音讯)为用此暗码办法和密钥加密的第一条音讯。

(8) 服务器以自己的“更改暗码标准”和“已完结”音讯响应。

(9) SSL 握手结束,且可以发送加密的应用程序数据。

对称加密

对称加密是指服务器和客户端都运用相同的秘钥加密和解密数据,当用户和服务器树立加密衔接时,用户会得到服务器仅有的数据加密的秘钥,一切的用户,包含服务器,都是运用这个仅有的秘钥加密自己的信息的。

如:客户A在运用秘钥K加密传输,被加密的密文被发送到服务器上后,服务器运用相同的秘钥K便可以解密出A发送的密文。

Android开发之网络框架——SSL握手与加密(对称+非对称+单向加密)解析
此刻假设用户B也和服务器树立加密衔接,这儿用户B运用的秘钥也是K,也便是说用B的秘钥是可以解密A的加密信息的。这就体现出了对称加密的一个巨大的缝隙:秘钥的仅有性

在对称加密算法中,一切的加密报文都可以被同一个敞开的秘钥K加解密。那么,当用户B在与服务器恳求到秘钥K后,在通过对A的抓包后,便可运用秘钥K解密A的一切加密报文,从而获取A的隐私信息。

图解如下:

Android开发之网络框架——SSL握手与加密(对称+非对称+单向加密)解析
所以,对称加密因为秘钥K的仅有性,简直等于明文传输,所以不可用。

非对称加密

因对称加密的不安全性不可用,所以有呈现的新的加密办法:非对称加密。

首先,对称加密的两大缺点是,秘钥的仅有性秘钥的公开性。可是在非对称加密中,这两个缺点都得到了较好的解决。

非对称加密,望文生义,客户与服务器两边运用的加密的秘钥是不同的。在非对称加密中,原来仅有的秘钥K,被拆分为了两个不同的秘钥。分别为服务器的私钥SK,和发给客户机的公钥PK。其间,公钥PK是公开给用户获取的,而私钥SK是一直保存在服务器端的,不向外敞开的。

非对称的加密解密流程为:被私钥SK加密的报文只能被公钥PK解密,反之,被公钥PK加密的报文只能被私钥SK解密。即在非对称加密中公钥加密的密文是无法被公钥解密的!

#私钥:SK
#公钥:PK
#客户机数据:A Data
#服务器数据:S Data
#客户加密报文:Y
#服务器加密报文:Y`
(A Data+PK)=Y
(Y+SK)=A Data
(S Data+SK)=Y`
(Y`+PK)=S Data
12345678910

非对称加密流程图解:

Android开发之网络框架——SSL握手与加密(对称+非对称+单向加密)解析
以上,便是非对称加密的根本原理。

如此一来,每一个客户都只需公钥,黑客便无法取得用户发送的隐私信息了(因为用户发送的数据也是公钥加密的,公钥无法解密)。可是,黑客依然有公钥,所以他依然可以解密服务器发送的信息(服务器发送的信息是私钥加密的,可以用公钥解密)。因而非对称加密依然是不太安全的

单项加密:单向加密便是用来计算一段数据的特征码的,为了避免用户通过“暴力破解”的办法解密,所以单向加密一般具有“雪崩效应”便是说:只需被加密内容有一点点的不同,加密所得成果就会有很大的变化。单项加密还有一个特色便是不管被加密的内容多长/短,加密的成果(便是提取特征码)是定长的,用处:用于验证数据的完整性,常用的单项加密算法 MD5:这种加密算法固定长度为128位 SHA1:这种加密算法固定长度是160位

加密解密的流程图:

Android开发之网络框架——SSL握手与加密(对称+非对称+单向加密)解析

私钥: 随机数+Key值+公钥
BOB和ALICE通讯阶段:

黑框A:标明要传输的数据

黑框B:标明黑框A通过单向加密后的特征码,这段特征码一起运用了非对称加密,详细进程是用BOB的私钥加密,传输给ALICE,只需到达后ALICE能解密,标明对方的确是BOB。这一进程一起起到了用户认证和数据完整性的校验。黑框B又称为数字签名

红框A: 这一阶段会生成一段很长的随机数(密钥)然后合作对称加密算法对黑框A和黑框B加密

红框B:这一阶段是用ALICE的公钥加密这串随机数(对称加密阶段的密钥),ALICE承受到数据后假设能用自己私钥解密,那就证明承受者的确ALICE

加密进程:

第一步:用单向加密算法提取数据(黑框A)的特征值 第二步:用自己的私钥加密这段特征值构成黑框B 第三步:用对称加密算法,对黑框A和黑框B来加密,得到红框A 第四步:用ALICE的公钥来加密第三步所用的密钥,得到红框B

解密进程:

第一步:ALICE用自己的私钥解密红框B得到对称加密的密钥 第二步:用这个密钥解密红框A内容 第三步:用BOB的公钥解密黑框B,假设能成功,阐明发送方的确是BOB,这就完结了身份验证(解密后会得到一串数据的特征值) 第四步:用同样的单项加密算法来对这段数据提取特征值,假设和第三步的特征值相同,阐明这段数据是完整的,这就完结了数据完整性的校验

进行完上述内容凶猛的读者会发现一个问题便是BOB和ALICE怎么取得对方的公钥,或许说怎么证明取得的公钥便是对方,这就需求引进另一方证书颁布安排CA,下面是对证书颁布安排跟BOB/ALICE之间的解说

黑框C:代表要颁布给BOB/ALICE的公钥,安排,地址等信息

黑框D:是对黑框C进行单向加密后得到的数字签名,然后用自己的公钥对其加密,传输给BOB和ALICE,拿着这个证书颁布安排的公钥(这些证书颁布安排的公钥一般现已被microsoft事前放在windows里面,当然其他操作系统也是相同的)的BOB和ALICE假设能对这个证书进行解密,阐明这个证书颁布安排不是假充的

红框E:标明颁布给BOB和ALICE的证书

文末

人们运用这个ssl证书,不一定会知道这个ssl加密原理。这和人们用的家常的一些东西是相同的。全文讲解了网络结构其间的一小块;还有更多>Android进阶资深架构师的技能学习。

ssl加密也有助于了解加密原理。主要是因为假设没有这个ssl加密的话就得到了时机你的电脑。得到一个可以进入你的网站肆意妄为的时机。还有便是盗取你的网站的根本的信息和你的客户的信息,一起你还难于发现。可是一旦是这个ssl进行了加密之后就得到了保证,因为证书加密是现已很好的保护你的网站的安全性的。

所以,为了保证网络的根本安全,装置SSL证书仍是很有必要的。