这里面涉及到知识有点庞杂,今天只是简单的入个门,了解相关概念。后面业务需求再仔细看。
要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识。
1. 大致了解几个基本术语(HTTPS、SSL、TLS)的含义
2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接”)
3. 大致了解加密算法的概念(尤其是“对称加密与非对称加密”的区别)
4. 大致了解 CA 证书的用途
0. 名词术语介绍与历史背景
1、SSL
SSL(Secure Socket Layer 安全套接层)是基于HTTPS下的一个协议加密层,最初是由网景公司(Netscape)研发,后被IETF(The Internet Engineering Task Force - 互联网工程任务组)标准化后写入(RFCRequest For Comments 请求注释),RFC里包含了很多互联网技术的规范!
2、TLS
TLS (transport layer security )传输层安全:
1996 年 5 月,国际标准化组织的 TLS 工作组把 SSL 从 Netscape 迁移至 IETF。 TLS 1.0
于 1999 年 1 月推出,尽管与 SSL 3 相比修改并不大; 2006 年 4 月 TLS 1.1 发布; 2008 年 8月 TLS 1.2 发布; 2014 年左右开始筹划 TLS 1.3 版本, TLS 1.3 协议版本于 2018 年 3 月21 日完成;不过没有广泛的使用,配套的支持与服务还没有完善和铺开。目前使用最广的是 TLS1.2。
3、SSL与TLS
SSL由从前的网景公司开发,有1,2,3三个版本,但现在只使用版本3
TLS是SSL的标准化后的产物,有1.0 1.1 1.2三个版本,默认使用1.0
TLS1.0和SSL3.0几乎没有区别
事实上我们现在用的都是TLS,但因为历史上习惯了SSL这个称呼,平常还是以SSL为多。
4、对称加密 (Symmetric Cryptography)
对称加密:双方使用的同一个密钥,既可以加密又可以解密,这种加密方法称为对称加密,也称为单密钥加密。
5、 非对称加密 (Asymmetric Cryptography)
一对密钥由公钥和私钥组成(可以使用很多对密钥)。私钥解密公钥加密数据,公钥解密私钥加密数据(私钥公钥可以互相加密解密)。
1. http与https
1.1 HTTP + 加密 + 认证 + 完整性保护 = HTTPS
HTTP是明文传输的,就必不可免存在如下问题:
- 重要数据被明文获取
- 通信双方可能被伪冒
- 数据被篡改
一般获取简单数据用于展示的,可能无所谓以上的安全缺陷。但假如涉及类似银行密码的数据,就必须慎重考虑这一点了。所以能够规避以上缺陷的HTTP就是HTTPS(HTTP Secure)。
1.2 http与SSL/TLS
分层设计的思想
TCP/IP 4 层模型:
(4) 应用层
<--------------(3.5) TLS/SSL 相当于 3.5 层
(3) 传输层
(2) 网络层(1) 物理层
OSI 7 层模型 :
(7) 应用层
(6) 表示层 <-------------- SSL/TLS
(5) 会话层
(4) 传输层
(3) 网络层
(2) 数据链路层
(1) 物理层
根据分层的原理:一个下层协议可以服务于多个上层协议。 SSL 和 TLS 位于 TCP 协议
之上,他们的上层协议有 http,ftp,dns,smtp,pops,ntp,snmp ,tftp 等,不需要加密的时候,可
以将 TLS 去掉,并不对上层协议产生任何影响。需要加密时,就可使用 TLS 加密 HTTP 等上层协议。
1.3 TLS 的开源实现 openSSL
TLS 是一系列的协议和标准,位于应用层和传输层之间起到将数据加密作用;通常说的
SSL/TLS 其实是实现了算法和协议的库,这个库提供加密的功能,应用层调用这些功能。
在 Linux 中的 openssl 是 SSL/TLS 和多种加密算法的开源实现 它实现了几乎所有的加
密算法,功能十分强大,使用十分广泛。
openSSL 包括: libcrypto 实现算法 ; libssl 实现 TLS/SSL 协议的库,libssl 是基于会话的,实现了身份认证 ,数据加密, 会话完整性等。使用 openssl 也可以模拟一个证书发布机构,openSSL 的命令行工具是 openssl 。后面我在使用openssl的时候还会更新博客。
2. 加解密算法
2.1 加密算法分类
加密算法首先分为两种:单向加密、双向加密。
2.1.1 单向加密
单向加密是不可逆的,也就是只能加密,不能解密。通常用来传输类似用户名和密码,直接将加密后的数据提交到后台,因为后台不需要知道用户名和密码,可以直接将收到的加密后的数据存储到数据库。
MD4 MD5 SHA1 SHA192 SHA256 SHA512 单向的不可逆的摘要算法,用于验证数据的完整性。摘要算法的输出是固定的, 192,256 指的都是输出摘要的长度。例如 MD5 摘要算法就是把一个明文摘要成一个长 16字节的结果,只要原文有一点变化,那么摘要结果就会完全不同(雪崩效应),不能从摘要结果推导出原文。比如 Linux 系统中的账号密码文件就是将摘要以后的数据存放进去,以确保安全。目前 MD5 和 SHA1 都被淘汰了,他们的安全性不足,推荐使用 SHA256 及以上算法。
2.1.2 双向加密
双向加密算法通常分为对称性加密算法和非对称性加密算法
对称性加密算法,信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行 加解密了。
非对称算法与之不同,发送双方A,B事先均生成一堆密匙,然后A将自己的公有密匙发送给B,B将自己的公有密匙发送给A,如果A要给B发送消 息,则先需要用B的公有密匙进行消息加密,然后发送给B端,此时B端再用自己的私有密匙进行消息解密,B向A发送消息时为同样的道理。
2.2 常用加密算法
2.2.1 几种对称性加密算法:AES,DES,3DES
DES是一种分组数据加密技术(先将数据分成固定长度的小数据块,之后进行加密),速度较快,适用于大量数据加密,而3DES是一种基于DES的加密算法,使用3个不同密匙对同一个分组数据块进行3次加密,如此以使得密文强度更高。
相较于DES和3DES算法而言,AES算法有着更高的速度和资源使用效率,安全级别也较之更高了,被称为下一代加密标准。
常见的对称加密算法有:
DES:分组式加密算法,以64位为分组对数据加密,加解密使用同一个算法。
3DES(DESede---DES en-de-en):三重数据加密算法,对每个数据块应用三次DES加密算法。
AES:高级加密标准算法,是美国联邦政府采用的一种区块加密标准,用于替代原先的DES,目前已被广泛应用。
Blowfish:Blowfish算法是一个64位分组及可变密钥长度的对称密钥分组密码算法,可用来加密64比特长度的字符串。
2.2.2 几种非对称性加密算法:RSA,DSA,ECC
RSA和DSA的安全性及其它各方面性能都差不多,而ECC较之则有着很多的性能优越,包括处理速度,带宽要求,存储空间等等。
常见非对称算法包括:
RSA:RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,可用于加密,也能用于签名。
DSA:数字签名算法,仅能用于签名,不能用于加解密。
DSS:数字签名标准,技能用于签名,也可以用于加解密。
ELGamal:利用离散对数的原理对数据进行加解密或数据签名,其速度是最慢的。
2.2.3 几种线性散列算法(签名算法):MD5,SHA1,HMAC
这几种算法只生成一串不可逆的密文,经常用其效验数据传输过程中是否经过修改,因为相同的生成算法对于同一明文只会生成唯一的密文,若相同算法生成的密文不同,则证明传输数据进行过了修改。通常在数据传说过程前,使用MD5和SHA1算法均需要发送和接收数据双方在数据传送之前就知道密匙生成算法,而HMAC与之不同的是需要生成一个密匙,发送方用此密匙对数据进行摘要处理(生成密文),接收方再利用此密匙对接收到的数据进行摘要处理,再判断生成的密文是否相同。
3. CA证书与PKI体系
3.1 CA
为了解决数字证书的签发问题,PKI引入了CA(Certificate Authority), 对数字证书进行集中签发。
它实际是一种特殊的公钥管理中心,对数字证书的全生命周期进行管理,包括:数字证书的签发和更新,数字证书的作废,冻结和解冻,查询或下载,状态查询等。
像广州CA,深圳CA就属于这类,可去他们的官网上进行相关了解。
3.2 PKI体系
公钥基础设施(Public Key Infrastructure,简称PKI)是目前网络安全建设的基础与核心,是电子商务安全实施的基本保障,因 此,对PKI技术的研究和开发成为目前信息安全领域的热点。本文对PKI技术进行了全面的分析和总结,其中包括PKI组成、证书认证机构CA、PKI应 用、应用编程接口和PKI标准等,并对CA的开发做了简要分析。本文对PKI,特别是CA的开发、应用和普及具有一定的促进作用。
参考链接:
https://blog.csdn.net/enweitech/article/details/81781405
https://www.cnblogs.com/barrywxx/p/8570735.html
https://www.jianshu.com/p/ce3893a7be09
https://blog.csdn.net/u013066292/article/details/79538069
https://blog.csdn.net/carolzhang8406/article/details/79458206