HTTPS的基本认证及加密流程


本文链接: http://51meaning.cn/blog/?p=388   转载请注明转载自:我要MEANING

HTTPS标题图

本文主要介绍https的认证、加密流程、顺带提了一下如何申请CA证书和使WEB服务支持https协议,如有问题请联系:meaning51@foxmail.com。

众所周知,WEB服务存在http和https两种通信方式,http默认采用80作为通讯端口,对于传输采用不加密的方式,https默认采用443,数据进行了加密传输,并可进行身份认证。

1. 先来了解一下HTTPS的认证流程

单向认证

Https在建立信任连接之前,需要进行握手认证,具体过程如下:单项认证

1、客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息。

2、服务端给客户端返回SSL协议版本号、加密算法种类、随机数等信息,同时也返回服务器端的证书,即公钥证书

3、客户端使用服务端返回的信息验证服务器的合法性,包括:

  • 证书是否过期

  • 发行服务器证书的CA是否可靠

  • 返回的公钥是否能正确解开返回证书中的数字签名

  • 服务器证书上的域名是否和服务器的实际域名相匹配

验证通过后,将继续进行通信,否则,终止通信

4、客户端向服务端发送自己所能支持的对称加密方案,供服务器端进行选择

5、服务器端在客户端提供的加密方案中选择加密程度最高的加密方式。

6、服务器将选择好的加密方案通过明文方式返回给客户端

7、客户端接收到服务端返回的加密方式后,使用该加密方式生成产生随机码,用作通信过程中对称加密的密钥,使用服务端返回的公钥进行加密,将加密后的随机码发送至服务器

8、服务器收到客户端返回的加密信息后,使用自己的私钥进行解密,获取对称加密密钥。 在接下来的会话中,服务器和客户端将会使用该密码进行对称加密,保证通信过程中信息的安全。

  1.  

双向认证

双向认证和单向认证原理基本差不多,只是除了客户端需要认证服务端以外,增加了服务端对客户端的认证,具体过程如下:双向认证

1、客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息。

2、服务端给客户端返回SSL协议版本号、加密算法种类、随机数等信息,同时也返回服务器端的证书,即公钥证书

3、客户端使用服务端返回的信息验证服务器的合法性,包括:

  • 证书是否过期

  • 发行服务器证书的CA是否可靠

  • 返回的公钥是否能正确解开返回证书中的数字签名

  • 服务器证书上的域名是否和服务器的实际域名相匹配

验证通过后,将继续进行通信,否则,终止通信

4、服务端要求客户端发送客户端的证书,客户端会将自己的证书发送至服务端

5、验证客户端的证书,通过验证后,会获得客户端的公钥

6、客户端向服务端发送自己所能支持的对称加密方案,供服务器端进行选择

7、服务器端在客户端提供的加密方案中选择加密程度最高的加密方式

8、将加密方案通过使用之前获取到的公钥进行加密,返回给客户端

9、客户端收到服务端返回的加密方案密文后,使用自己的私钥进行解密,获取具体加密方式,而后,产生该加密方式的随机码,用作加密过程中的密钥,使用之前从服务端证书中获取到的公钥进行加密后,发送给服务端

10、服务端收到客户端发送的消息后,使用自己的私钥进行解密,获取对称加密的密钥,在接下来的会话中,服务器和客户端将会使用该密码进行对称加密,保证通信过程中信息的安全。

 

一种数字签名及验签如下图:

数字签名流程图注:用秘密秘钥(对称秘钥)进行原文加密,该步可提高效率,可参考上面流程做自己的安全方案哦。

 

2.防止中间人攻击的CA证书

中间人攻击如下图:

中间人攻击

client请求公钥,在请求返回的过程中被中间人劫持,那么我们将采用劫持后的假秘钥进行通信,则后续的通讯过程都是采用假秘钥进行,如何安全的获取公钥,并确定公钥的所有者, 那就需要SSL 证书和CA机构 。

CA证书的使用如下图:

CA形象图

CA证书的验证如下流程图:

CA流程图

1.client向server发送请求https://baidu.com,然后连接到server的443端口。

2.服务端必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥。

3.传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容。

4.客户端解析证书
这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值(对称秘钥)。然后用证书对该随机值进行加密。

5.传送加密信息
这部分传送的是用证书加密后的秘钥,目的就是让服务端得到这个秘钥,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。

6.服务端加密信息
服务端用私钥解密秘密秘钥,得到了客户端传过来的私钥,然后把内容通过该值进行对称加密。

7.传输加密后的信息
这部分信息是服务端用私钥加密后的信息,可以在客户端被还原。

8.客户端解密信息
客户端用之前生成的私钥解密服务端传过来的信息,于是获取了解密后的内容。

注:有些网站,比如像12306这样的,也会自制根证书要求用户导入安装,受信任的根证书颁发机构列表是操作系统级的,不管通过哪个浏览器进入配置,都是只需要配置一次,再使用其它浏览器时,无需重复配置。最好不要导入任何不受信任的根证书,当然如果电脑被劫持,https等一切操作都毫无意义。

 

2.HTTPS的基本使用

申请与颁发证书

而ssl证书指的是在ssl通信中验证通信双方身份的数字文件,一般分为服务器证书和客户端证书,我们通常说的ssl证书主要指服务器ssl证书。ssl证书由受信任的数字证书颁发机构CA(如沃通WoSign),在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。分为扩展验证型EV ssl证书、组织验证型OV ssl证书、和域名验证型DV ssl证书。

  【ssl证书申请的3个主要步骤】

  1、制作CSR文件

  所谓CSR就是由申请人制作的Certificate Secure Request证书请求文件。制作过程中,系统会产生2个密钥,一个是公钥就是这个CSR文件,另外一个是私钥,存放在服务器上。要制作CSR文件,申请人可以参考WEB SERVER的文档,一般如Apache等,使用Openssl命令行来生成KEY+CSR2个文件,Tomcat,JBoss,Resin等使用KEYTOOL来生成JKS和CSR文件,IIS通过向导建立一个挂起的请求和一个CSR文件。

  2、CA认证

  将CSR提交给CA,CA一般有2种认证方式:

  1)域名认证:一般通过对管理员邮箱认证的方式,这种方式认证速度快,但是签发的证书中没有企业的名称;

  2)企业文档认证:需要提供企业的营业执照。

  也有需要同时认证以上2种方式的证书,叫EV ssl证书,这种证书可以使IE7以上的浏览器地址栏变成绿色,所以认证也最严格。

  3、证书安装

  在收到CA的证书后,可以将证书部署上服务器,一般Apache直接将KEY+CER复制到服务器上,然后修改httpd.conf文件;Tomcat等,需要将CA签发的证书CER文件导入JKS文件后,复制上服务器,然后修改server.xml;IIS需要处理挂起的请求,将CER文件导入。

 

在特定场景下,也可通过openssl等工具搭建CA,制作根证书及颁发证书。到这里HTTPS的简单入门就算完成了,若需更深入了解,请关注我的其他内容

以下为本文提到的一些名词的解释:

HTTP:

超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。

HTTPS:

《图解HTTP》这本书中曾提过HTTPS是身披SSL外壳的HTTP。HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
PS:TLS是传输层加密协议,前身是SSL协议,由网景公司1995年发布,有时候两者不区分。

SSL/TLS:

TLS的全称是Transport Layer Security,即安全传输层协议,最新版本的TLS(Transport Layer Security,传输层安全协议)是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。在TLS与SSL3.0之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS与SSL3.0不能互操作。虽然TLS与SSL3.0在加密算法上不同,但是在我们理解HTTPS的过程中,我们可以把SSL和TLS看做是同一个协议。

 CA:

证书颁发机构(CA, Certificate Authority)即颁发数字证书的机构。是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。

数字摘要:

通过单向hash函数对原文进行哈希,将需加密的明文“摘要”成一串固定长度(如128bit)的密文,不同的明文摘要成的密文其结果总是不相同,同样的明文其摘要必定一致,并且即使知道了摘要也不能反推出明文,当前主要使用SHA-2算法

数字签名:

数字签名建立在公钥加密体制基础上,是公钥加密技术的另一类应用。它把公钥加密技术和数字摘要结合起来,形成了实用的数字签名技术。

    收方能够证实发送方的真实身份;
    发送方事后不能否认所发送过的报文;
    收方或非法者不能伪造、篡改报文。

明文 :

明文指的是未被加密过的原始数据。
 

密文:

明文被某种加密算法加密之后,会变成密文,从而确保原始数据的安全。密文也可以被解密,得到原始的明文。

密钥 :

密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥,分别应用在对称加密和非对称加密上。
 

对称加密 :

对称加密又叫做私钥加密,即信息的发送方和接收方使用同一个密钥去加密和解密数据。对称加密的特点是算法公开、加密和解密速度快,适合于对大数据量进行加密,常见的对称加密算法有DES、3DES、AES,、TDEA、Blowfish、RC5和IDEA。
其加密过程如下:明文 + 加密算法 + 私钥 => 密文
解密过程如下:密文 + 解密算法 + 私钥 => 明文
对称加密中用到的密钥叫做私钥,私钥表示个人私有的密钥,即该密钥不能被泄露。
其加密过程中的私钥与解密过程中用到的私钥是同一个密钥,这也是称加密之所以称之为“对称”的原因。由于对称加密的算法是公开的,所以一旦私钥被泄露,那么密文就很容易被破解,所以对称加密的缺点是密钥安全管理困难。
注:当前一般使用AES256算法。

 非对称加密:

非对称加密也叫做公钥加密。非对称加密与对称加密相比,其安全性更好。对称加密的通信双方使用相同的密钥,如果一方的密钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对密钥,即公钥和私钥,且二者成对出现。私钥被自己保存,不能对外泄露。公钥指的是公共的密钥,任何人都可以获得该密钥。用公钥或私钥中的任何一个进行加密,用另一个进行解密。
被公钥加密过的密文只能被私钥解密,过程如下:
明文 + 加密算法 + 公钥 => 密文, 密文 + 解密算法 + 私钥 => 明文
被私钥加密过的密文只能被公钥解密,过程如下:
明文 + 加密算法 + 私钥 => 密文, 密文 + 解密算法 + 公钥 => 明文
由于加密和解密使用了两个不同的密钥,这就是非对称加密“非对称”的原因。
非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
在非对称加密中使用的主要算法有:RSA、Elgamal、Rabin、D-H、ECC(椭圆曲线加密算法)等。

混合加密:

结合非对称加密和对称加密技术。客户端使用对称加密生成密钥对传输数据进行加密,然后使用非对称加密的公钥再对秘钥进行加密,所以网络上传输的数据是被秘钥加密的密文和用公钥加密后的秘密秘钥,因此即使被黑客截取,由于没有私钥,无法获取到加密明文的秘钥,便无法获取到明文数据。

2+