省流, https 传输的内容通过 ssl 证书加密,相对安全。采用对称加密算法,优点是快,https请求首次有ssl 证书下载的过程。
HTTPS流程
HTTPS(全称为 HyperText Transfer Protocol Secure)是一种安全的通信协议,它在HTTP的基础上通过SSL/TLS协议提供了数据加密、数据完整性验证和身份验证。HTTPS的主要目的是保护数据传输过程中的隐私和完整性。
HTTPS流程概述
- 客户端发起HTTPS请求:用户通过浏览器访问一个使用HTTPS协议的网站。
- 服务器响应并发送证书:服务器响应客户端的请求,并发送其SSL证书。
- 客户端验证证书:浏览器检查证书的有效性,包括证书是否由受信任的证书颁发机构签发、证书是否过期等。
- 生成密钥:如果证书验证通过,浏览器会生成一个随机的对称加密密钥。
- 加密密钥并发送给服务器:浏览器使用服务器的公钥对对称密钥进行加密,然后发送给服务器。
- 服务器解密密钥:服务器使用自己的私钥解密收到的加密密钥。
- 建立加密通道:服务器和客户端现在可以使用对称密钥进行加密通信。
加密方式
对称加密算法的特点,
优点:对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。
缺点:对称加密,密钥管理的安全性很低,因为加密和解密都使用同一个密钥,在密钥的发送过程中,密钥可能被第三方截取,导致第三方也可以破解密文。
代码示例
在JavaScript中,我们通常不需要手动实现HTTPS的握手过程,因为浏览器会自动处理。但是,如果我们想要在Node.js中创建一个HTTPS服务器,可以使用以下代码:
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('server-key.pem'),
cert: fs.readFileSync('server-cert.pem')
};
https.createServer(options, (req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(4433, () => {
console.log('HTTPS server running on port 4433');
});
在这个示例中,我们首先导入了https
模块和fs
模块。然后,我们定义了一个包含服务器密钥和证书的选项对象。接着,我们创建了一个HTTPS服务器,并监听4433端口。
HTTP和HTTPS的区别:
-
加密:
- HTTP:不加密,数据在传输过程中可能会被截获或篡改。
- HTTPS:加密,使用SSL/TLS协议对数据进行加密,确保数据传输的安全性。
-
端口:
- HTTP:默认使用80端口。
- HTTPS:默认使用443端口。
-
安全性:
- HTTP:不安全,容易受到中间人攻击。
- HTTPS:安全,可以防止中间人攻击。
-
性能:
- HTTP:性能略高,因为没有加密过程。
- HTTPS:性能略低,因为需要进行加密和解密。
-
证书:
- HTTP:不需要证书。
- HTTPS:需要SSL/TLS证书。
常见的错误回答案例
- 混淆HTTPS和HTTP:错误地认为HTTPS和HTTP只是端口不同(HTTPS使用443端口,HTTP使用80端口),而忽略了HTTPS提供的加密和身份验证功能。
- 认为HTTPS会显著降低网站性能:虽然HTTPS确实会增加一些计算开销,但现代浏览器和服务器的性能已经足够应对这些开销,而且HTTPS对性能的影响通常很小。
- 认为HTTPS可以防止所有类型的攻击:虽然HTTPS可以防止中间人攻击和数据泄露,但它不能防止所有类型的攻击,如DDoS攻击或SQL注入。
参考资料
总结
实际前端面试到这里就够了,当然你也可以了解其他知识点作为扩展,比如对成加密和非加密算法的区别,除了中间人攻击还有其他的攻击方式等。