参考书籍: HTTPS权威指南在服务器和Web应用上部署SSLTLS和PKI
参考:https://baike.baidu.com/item/https
参考:https://www.cnblogs.com/liyuhui-Z/p/7844880.html
参考:https://www.cnblogs.com/qishui/p/5428938.html
最近期望了解HTTPS,碰巧遇到了HTTPS权威指南这本书,粗略了读了一下,对本书的个人了解如下:
本书中重点介绍了浏览器SSL/TSL协议、协议加密处理、应用中存在的问题,OpenSSL的使用以及在服务器上的部署(Apache\Java&Tomcat\Microsft&IIS\Nginx)。
如果关注SSL/TSL如何工作的话,关注前半部分;关注网站如何部署HTTPS的话,可以参考后半部分部署。
下面主要是对HTTPS的一些概念简单介绍:
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer),这是对HTTP传输添加安全防护,添加了SSL安全套接层(Secure Socket Layer),当前主要使用的加密库底层是OpenSSL。
SSL/TSL位于TCP/UDP(传输层)之上,也属于TCP/IP五层协议的应用层,但归于OSI七层协议的表示层。(五层协议:物理层,数据链路层,网络层,传输层,应用层;七层协议对应用层拆分为:会话层,表示层,应用层)
HTTP使用端口80,信息是明文传输:
建立连接过程简单Client(SYN), Server(ACK/SYN), Client(ACK),建立后就可以发送数据了
HTTPS使用端口443,信息通过SSL加密传输:
建立连接过程要多几个来回:
Client(支持的功能:加密种类), Server(筛选合适加密种类连接参数,发送参数和服务器证书),Client(使用传回的加密方式和传递来的服务段加密参数,加密客户端密钥相关参数发送),Server(解密客户端传来的信息,使用客户端传回的参数加密返回信息给客户端),通信开始
HTTPS涉及的加密解密,涉及了这块的算法了。
加密解密底层使用的OpenSSL,这也是2014年OpenSSL“心脏出血” 事故为什么业界影响那么大的原因。
加密的目标:部署正确的密码能解决安全的三个核心需求:保持秘密(机密性)、验证身份(真实性),以
及保证传输安全(完整性)。
加密算法-对称加密:对称加密(symmetric encryption)又称私钥加密(private-key cryptography)。序列密钥,典型的是RC4,分组秘钥典型的是AES。
加密算法-散列函数:散列函数(hash function)是将任意长度的输入转化为定长输出的算法。
加密算法-消息验证代码:消息验证代码 (message authentication code, MAC)或者使用密钥的散列(keyed-hash)是以身份验证扩展了散列函数的密码学函数。散列函数可以用于验证数据完整性,但仅在数据的散列与数据本身分开传输的条件下如此。
加密算法-分组密码模式:分组密码模式是为了加密任意长度的数据而设计的密码学方案,是对分组密码的扩展。它提供了机密性和完整性,是当前可用的最好模式。它有许多输出模式,通常以首字母缩写来引用: ECB、 CBC、 CFB、 OFB、 CTR、 GCM,诸如此类。CBC仍是SSL和TLS的主要模式,GCM是TLS中相对较新的模式,从1.2版本开始才能使用。
加密算法-非对称加密:非对称加密(asymmetric encryption)又称为公钥加密(public key cryptography)
加密算法-数字签名:数字签名(digital signature)是一个密码学方案。它使得验证一条电子消息或者一篇电子文
档的真实性成为可能。借助公钥密码,数字签名可以与现实生活中的手写签名类似。我们可以利用公钥密码的非对称性设计出一种算法,使用私钥对消息进行签名,并使用对应的公钥验证它。
加密算法-随机数生成:在密码学中,所有的安全性都依赖于生成随机数的质量。通过收集熵(entropy)是一种真随机数生成器(true random number generator, TRNG),但是直接使用这种方式并不足够可靠。如果没有可靠的外部事件可以收集到足够的熵,系统就可能会停止。我们在实际使用中依靠的是伪随机数生成器(pseudorandom numbergenerator, PRNG)。PRNG也要利用少量真正的随机数使系统运转起来。这个过程被称为种子设定(seeding)。利用种子, PRNG根据需要构造出无限数量的伪随机数。普通用途的PRNG被常常用于编程,但它们并不适用于密码学,尽管其输出看起来就是随机的。加密安全伪随机数生成器(cryptographically secure pseudorandom number generator, CPRNG)是不可预测的PRNG。这个性质对安全来说非常关键,一定不能让攻击者对观察到的CPRNG输出进行内部状态的逆向工程。
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)