Https详解
1.什么是Https
Http + SSL = Https
一句话说:Https是身披SSL的Http,当使用了SSL后,Http先和SSL通信,再由SSL和TCP通信,
2.为什么需要Https
在用Http协议时,主要可能存在以下三个问题。
- 1.通信使用明文,内容可能会被窃听。
- 2.不验证通信方的身份,可能遭遇伪装。
- 3.无法证明报文是否完整,可能遭到篡改
相应的,Https就是解决上述三个问题
- 1.数据隐私:内容经过对称加密。
- 2.身份认证:第三方无法伪造身份。
- 3.数据完整性:内容传输经过完整性校验。
所以也可以这样说:
Http+加密+认证+完整性保护=Https
3.加密
3.1 对称加密
加密和解密使用同一个密钥,想要加密信息,那就需要把密钥传给客户端,只能通过光盘拷给对方,不能在网络上传输,因为很容易就被其他人获得密钥,这样谁都可以解密信息了,失去了加密的意义。优点是效率高
3.2 非对称加密
是一个密钥对,一把公钥,一把私钥,公钥任何人都能获得,但是私钥只有自己知道,发送方使用公钥加密,接收方收到后使用私钥解密,只有公钥信息也不能做到解密。缺点是加密解密需要一定时间。
3.3 对称加密+非对称加密
为了结合效率高且安全加密,使用两者混合:在交换密钥环节使用非对称加密,数据传输时用对称加密。具体是:发送密文的一方使用对方的公钥加密对称密钥,然后用对称密钥加密文件,接收方用私钥解密对称密钥,用对称密钥解密文件。
4.数字签名
数字签名是用来解决数据可能遭到篡改的情况,即校验数据完整性。
实现:A在发送文件前,先用单向散列函数(Hash)生成消息摘要,然后再用A私钥进行加密生成数字签名,然后将其与文件和A公钥一起发给B,B收到后先对文件使用相同的散列函数得到摘要,然后用A的公钥解密数字签名得到原来的摘要,两个摘要进行对比,若不相同,则证明文件被篡改。
数字签名的特点就是发送文件不加密,但不能更改,比如发送红头文件到各个地方或者官方群发特定通知,文件本身不是机密,但不能更改;
问题:A的公钥怎么传给B,或者说如何证明这个公钥就是A的。比如C可以用自己的私钥生成数字签名,然后把自己的公钥给A,然后冒充B
5.CA证书
CA证书是为了解决通信方身份被伪装的问题。
CA机构使用散列函数将证书上的明文信息(申请者公钥,申请者信息等)计算得到信息摘要,然后用CA私钥加密得到数字签名,然后将证书和数字签名一起发给客户端,客户端得到后,使用CA公钥对数字签名解密得到摘要,然后对证书计算得到摘要,将两者对比如果一样表示证书没有被中间人篡改过,确认证书的合法性,也就是服务器的公钥是值得信赖的。
注:即使中间人有CA公钥,能够解析数字签名并篡改,但是篡改完成后中间人仍然需要将证书重新加密,但是中间人没有CA私钥,无法加密,强行加密会导致客户端无法解密(客户端只认那几个权威机构的公钥)。
6.公钥和私钥
要明白两种用法:
- 1.公钥加密,私钥解密 -- 用于传输密文
- 2.私钥签名,公钥验证 -- 用于签名
第一种情景:既然是加密,那肯定不想让别人知道我的信息,只有我才能解密,所以公钥加密,私钥解密。这过程中信息不可见,但是可能被篡改。
第二种情景:既然是签名,我就不希望别人冒充我发信息,只有我才能发,所以是私钥签名,公钥验证。这过程中信息不可篡改,但是他人可以获得。
7.Https工作流程
1、客户端发起一个https请求,根据规定,知道需要连接服务器的443端口。
2、服务器把配置好的公钥证书返回给客户端。
3、客户端验证公钥证书,比如是否在有效期内等信息。如果验证通过则继续,不通过则显示警告信息。
客户端拿CA机构的公钥解密数字签名,得到摘要,然后用散列函数计算证书得到摘要,对两个摘要进行对比,验证证书是否被篡改,服务器公钥是否可靠。
4、客户端使用伪随机数生成加密要用的对称密钥,然后用证书的公钥加密这个对称密钥,发给服务端。
5、服务端使用自己的私钥解密这个消息,得到对称密钥,现在,服务器和客户端都拥有了相同的对称密钥。(所以使用https开始的时候会有点慢)
6、服务器用对称密钥加密明文内容A,发给客户端。
7、客户端使用对称密钥解密密文,得到明文内容A。
8.https和http区别
- http是明文传输,而https是使用SSL+http构成的加密传输,更安全。
- http使用80端口,https使用443端口
- http基于应用层,而https基于传输层