一、基本概念
1、https概念
https(全称: Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的http通道,简单讲是http的安全版。
2、为啥说http协议不安全呢?
我们用http协议往服务器发送比较私密的数据(比如银行卡、身份证等),被中间人通过抓包工具窃取,中间人把数据修改或替换,然后再发送到服务器,服务器收到数据也不知道是否来自客户端,有没有被修改或替换。
3、SSL和TLS的的区别
https在http的基础下加入SSL/TLS协议,SSL证书是老的协议,在SSL基础上发展出TLS新的协议, 目前https实际上是TLS协议。
4、建立安全的网站需要SSL证书,那么证书收费吗?
CA证书是由权威机构颁发的,权威机构是经过认证的;证书的可信性基于信任机制,权威机构需要对其颁发的证书进行信任背书,只要是权威机构颁发的证书都是合法的。权威机构会对申请信息进行审核,不同的权威机构对审核的要求也不一样,于是证书也分为免费的、便宜的和贵的。
5、申请证书,一定需要域名吗?
公网网站申请SSL/TLS证书,需要域名。对于内网、测试环境或某些特殊情况(如自签名证书或客户端证书),则不需要域名。
6、加密算法
https用到了非对称加密和对称加密,非对称加密生成了一对密钥(一个公钥和一个私钥),对称加密只需要一个密钥。非对称密钥加解密流程:公钥加密,私钥解密;私钥加密,公钥解密。
二、CA证书原理
1、证书申请流程
CA机构颁发数字证书,服务器向CA机构申请数字证书。申请流程如下:
(1)服务器本地生成一对非对称密钥,然后将公钥和其他信息(公司名称、域名等)发送给CA机构。
(2)CA机构用这些信息,选择一种单向的HASH算法进行加密,加密之后的东西称为摘要。
(3)CA用自己的私钥对摘要进行加密,加密之后的数据称为数字签名。
(4)CA将服务器的申请信息(包含服务器的公钥)和数字签名整合在一起,由此生成数字证书,传递给服务器。
2、数字证书和数字签名的区别?
数字证书包含数字签名,数字签名是数字证书的一部分。数字签名可以通过CA的公钥解密成摘要。
3、什么是数字证书?和SSL证书有啥区别?
所有的SSL证书都是数字证书,但是并不是所有的数字证书都是SSL证书。
数字证书是一个更广泛的概念,有更多的应用场景。而SSL证书主要用于网站加密通讯。
三、https实现原理
一、https的加解密流程:
1、服务器获取到数字证书,客户端发送请求后,发送给客户端。
2、客户端电脑和浏览器内置了一部分权威机构的根证书,这些证书中包含了CA的公钥。证书是分级的树状结构,根证书的公钥在子级也使用。
3、客户端用CA的公钥去解密SSL证书中的数字签名。解密成功就说明证书来自合法的认证机构。解密成功,客户端就拿到了摘要。
4、客户端用SSL证书中的申请信息,用和CA机构一致的加密方式进行HASH算法加密,看加密之后的摘要和解密的摘要是否一致。一致的话,说明内容完整,没被篡改。
5、客户端生成随机的对称加密密钥,用从证书中拿到服务器的公钥进行加密,发送给服务器。
6、服务器用自己的私钥解密获取到对称密钥,然后用对称密钥加密数据,发送密文给客户端口。
7、客户端用自己本地存的生成的随机密钥解密,获得明文的数据。以此类推,客户端和服务器通过对称加密的方式进行数据传输。
客户端和服务器通过非对称加密交换对称密钥,然后用对称密钥进行数据加密传输。用到了两对非对称密钥,一对是服务器生成的,一对是CA机构生成的。服务器的非对称密钥用于交换客户端和服务器的对称密钥,CA机构非对称密钥用于加密数字摘要、解密数字签名。
二、为什么需要 CA 认证机构颁发证书?
假设不存在认证机构,任何人都可以制作证书,这带来的安全风险便是经典的“中间人攻击”问题。具体过程如下:
1、客户端请求正规网站,获取证书。
2、中间人劫持了请求,伪造了自己的证书,发给客户端。同时请求获取正规网站的证书,存到中间人本地。
3、客户端生成随机数,作为对称加密的密钥。用中间人伪造证书的公钥进行加密并发送请求。
4、中间人劫获并用自己证书的私钥进行解密,获取到了对称密钥,存在本地。并用正规网站证书的公钥对解密后的密钥进行加密,发送给正规网站。
5、正规网站用自己证书的私钥进行解密,获取到对称加密的私钥。用对称加密的私钥进行数据加密,发送到中间人。
6、中间人用本地存的私钥进行解密,获取传输的明文。再用本地存的私钥进行加密,将密文返回客户端。
7、客户端用本地生成的私钥进行解密,获取明文内容。
三、https一定是安全的吗
https可以防止用户在不知情的情况下通信被监听,如果用户主动授信,是可以构建“中间人”网络,代理软件可以抓包对传输内容进行解密。https对于主动授信的抓包操作是不提供防护的,因为这个场景用户是已经对风险知情。常用的测试抓包工具如Fiddler、Charles。