HTTP和HTTPS有什么区别
- 端口不同:HTTP使用的是80端口,HTTPS使用的是443端口
- HTTP(超文本传输协议)信息是明文传输,HTTPS运行在SSL(Secure Socket Layer)之上,添加了加密和认证机制,更加安全
- HTTPS由于加密解密会带来更大的CPU和内存开销
- HTTPS通信需要证书,一般需要向证书颁发机构(CA)购买
HTTPS的连接过程
- 客户端向服务器发送请求,同时发送客户端支持的一套加密规则(包括对称加密、非对称加密、摘要算法);
- 服务器从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥(用于非对称加密),以及证书的颁发机构等信息(证书中的私钥只能用于服务器端进行解密);
- 客户端验证服务器的合法性,包括:证书是否过期,CA是否可靠,发行者证书的公钥能否正确揭开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配;
- 如果证书受信任,或者用户接收了不受信任的证书,浏览器会生成一个随机密钥(用于对称算法),并用服务器提供的公钥加密(采用非对称加密算法对密钥加密);使用HASH算法对握手消息进行摘要计算,并对摘要使用之前产生的密钥加密(对称算法);将加密后的随机密钥和摘要一起发送给服务器。
- 服务器使用自己的私钥解密,得到对称加密的密钥,用这个密钥解密出HASH摘要值,并验证握手消息是否一致;如果一致,服务器使用对称加密的密钥加密握手消息发给浏览器;
- 浏览器解密并验证摘要,若一致,则握手结束。之后的数据传输都适用对成加密的密钥进行加密。
总结:非对称加密算法用于在握手过程中加密生成的密码;对成加密算法用于对真正传输的数据进行加密;HASH算法用于验证数据的完整性。
输入 www.baidu.com,怎么变成 https://www.baidu.com 的,怎么确定用HTTP还是HTTPS?
一种是原始的302跳转,服务器把所有的HTTP流量跳转到HTTPS。但这样有一个漏洞,就是中间人可能在第一次访问站点的时候就劫持。解决方法就是引入HSTS机制,用户浏览器在访问站点的时候强制使用HTTPS
HTTPS连接的时候,怎么确定收到的包是服务器发来的(中间人攻击)?
- 验证域名、有效期等信息是否正确。证书上都有包含这些信息,比较容易完成验证
- 判断证书的来源是否合法。每份签发证书都可以根据验证链查找到对应的根证书,操作系统、浏览器会在本地存储权威机构的根证书,利用本地根证书可以对对应机构签发证书完成来源验证
- 判断证书是否被篡改,需要与CA服务器进行校验
- 判断证书是否已吊销。通过CRL(Certificate Revocation List 证书注销列表)和 OCSP(Online Certificate Status Protocol 在线证书状态协议)实现,其中 OCSP 可用于第3步中以减少与 CA 服务器的交互,提高验证效率
什么是对称加密、非对称加密?区别是什么?
- 对称加密:加密和解密采用相同的密钥。如:DES、RC2、RC4
- 非对称加密:需要两个密钥:公钥和私钥。如果用公钥加密,需要用私钥才能解密。如RSA
- 区别:对称加密速度更快,通常用于大量数据的加密;非对称加密安全性更高(不需要传送私钥)
数字签名、报文摘要的原理
- 发送者A用私钥进行签名,接收者B用公钥验证签名。因为除A外没有人有私钥,所以B相信签名是来自A。A不可抵赖,B也不能伪造报文。
- 摘要算法:MD5、SHA
评论