很多学习前端的朋友在面试的时候总会怕被问到关于https的相关问题,因为很多人对这一方面的知识是比较陌生的,看了这篇文章,可以帮助回答前端面试中遇到的关于https的以下几个问题:
- 何为对称加密,非对称加密,单项散射,数字签名,CA证书
- SSL/TLS的流程(https原理)
1.基本概念
- 对称加密*
一个密钥加密和解密,速度快。常见的对称加密有 DES AES - 非对称加密
有公钥和私钥。速度慢。公钥公开,私钥自己保存。私钥加密公钥解密;公钥加密私钥解密。
常见的非对称加密有RSA。 - 单向散射(hash)
把一堆数据压缩成固定长度,不可恢复,用于检测完整性
MD5(以不安全)
SHA1 SHA256 - 数字签名
1.对文件的内容进行单向散列(hash)
2.用自己的私钥对单向散列值加密 - CA证书
服务器把自己的域名,IP地址,公钥等一些列信息发送给CA,CA经验证信息属实后,会先把该信息进行hash,然后再把hash得到的值用自己的私钥加密得到CA的数字签名。最后,会把改服务其的相关信息和CA对该服务器的数字签名放在一起,生成该服务器的CA证书。
2.SSL/TLS的流程(https原理)
SSL是(Secure Socket Layer)安全套接层
TLS是(Transport Layer Security)安全传输协议
- 浏览器将自己支持的一系列加密算法和会话ID发送给服务器,并发送一个浏览器随机数
- 服务器向浏览器发送选择的加密算法、会话ID、服务器生成的随机数(服务器随机数)、CA证书。
- 服务器拿到CA证书后,对证书的CA签名进行验证(在本地找到CA的公钥对数字签名解密,得到一个hash值;把信息进行单向散列得到另一个hash值,比较两个hash值是否一致),如果验证通过,会从证书中拿到服务器的公钥。
- 浏览器对浏览器随机数和服务器随机数进行处理,生成预备住密码。
- 浏览器用服务器的公钥对预备主密码进行加密,然后发送给服务器。
- 服务器用自己的私钥解密得到预备主密码。
- 浏览器和服务器分别用预备主密码和随机数,生成共享主密钥。
- 二者使用共享主密钥,使用对称加密算法加密数据。
tips:
- HTTP + 加密 + 认证 + 完整性保护 = HTTPS
- HTTPS是套这SSL外壳的HTTP
- 第一次协商主密钥后,后面的请求就使用主密钥进行对称加密通信,不需要再协商。通过会话id来识别