HTTPS
HTTPS: http over tls
HTTP的问题
明文传输
HTTPS
HTTPS的作用
- 加密数据
- 证明通信双方
- 校验数据完整性
对称加密
加密解密都是通过一个密钥,DES
AES
- 优点:加解密速度快
- 缺点:密钥传输不安全
非对称加密
加密和解密通过不同的密钥,RSA
公钥
顾名思义,公钥可以公开给所有人
私钥
私钥通常都是不公开的,一般都是SA持有
通常来说,通过公钥加密数据的数据只有对应的私钥才能解开,反之通过私钥解密的数据也是只有公钥才能解开
小例子
解决掉的问题:
Client
->Server
数据加密
还存在的问题:
- 如何获取公钥
Server
->Client
数据泄密
证书、CA(问题1)
证书
可以理解为Server的身份证,这个身份证里面有很多信息,其中包括网站的公钥,当Client使用浏览器访问Server的时候,Server就会把证书返回给Client,浏览器从证书中取出公钥,然后就可以对要提交的数据进行加密了
PS: 浏览器通常会内置大多数主流权威CA的根证书。
CA
证书颁发机构(Certificate authorities
)
- 只有少数的CA是权威的,被信任的,这些CA颁发的证书浏览器才能信认
- 自己也可以做CA
证书颁发
证书颁发的过程:
- 服务器生成秘钥对
- 服务器生成证书签名请求(csr),并将密钥对塞进csr中,然后提交到CA
- CA对服务器的csr进行确认,然后办法服务器的crt
- 服务器配置使用CA办法的crt
数据单向传输安全(问题2)
HTTPS结合了对称加密来保证双向安全,流程大概是这个样子
如何破解HTTPS
在一定条件下HTTPS也是可以破解的(Charles) 缺图
HTTPS 最关键的三个作用
第一个:服务器身份确认
用户手机浏览器到商城服务器开始正式传输数据之前,客户端在建立连接后的第一时间,获取到服务器端证书信息,并检测证书是否由世界互联网信任机构颁发,如果颁发者不是信任机构颁发,则浏览器会通过警告用户该站点证书存在安全问题,可能为恶意网站。
第二个:传输数据加密
第一步中用户端拿到了服务器的证书,服务器证书中存有公钥,客户端生成随机对称密钥并使用服务器公钥进行加密,然后发送给服务器端,由于加密后的数据只有服务器端通过私钥才能解密,这里的传输过程是安全的,服务器端接收到客户端生成的加密后的随机对称密钥后,通过私钥解密获取对称密钥,此后用户端和服务器端传输数据前都会使用对称密钥机密数据,而这密钥只有用户端和服务器端两者知晓,从而防止中间人及运营商对数据进行篡改和窃取。
第三个:数据传输篡改检测
在用户端及服务器端传输数据报文中,除了加密后的数据,还有数字签名。数字签名只有服务器端才能产生别人无法伪造,它是通过对要传输的数据生成摘要值,服务器使用自己的私钥对这个摘要值进行加密来形成发送方的数字签名,然后将数字签名添加到响应报文中返回给用户。
用户端在接收到服务器响应报文后,通过对称密钥对数据进行解密后,然后针对数据计算出出数据的摘要值,然后通过服务器端的公钥进行加密摘要值,如果用户端和服务器端加密生成的数字签名一样,则说明数据在传输过程中没有被第三方中间人篡改过,若被篡改用户端也能识别出来并丢弃数据报文再次请求。
HTTPS证书的类型
- DV(Domain validated)证书:域名验证证书,基本上实时签发
- OV(Organization validated)证书:组织验证证书,需要上传组织相关文件,通常需要几天才能签发
- EV(Extended validation)证书:扩展验证证书,更严格的验证,浏览器显示组织名