面试题,https和http的区别

44 阅读3分钟

省流, https 传输的内容通过 ssl 证书加密,相对安全。采用对称加密算法,优点是快,https请求首次有ssl 证书下载的过程。

HTTPS流程

HTTPS(全称为 HyperText Transfer Protocol Secure)是一种安全的通信协议,它在HTTP的基础上通过SSL/TLS协议提供了数据加密、数据完整性验证和身份验证。HTTPS的主要目的是保护数据传输过程中的隐私和完整性。

HTTPS流程概述

  1. 客户端发起HTTPS请求:用户通过浏览器访问一个使用HTTPS协议的网站。
  2. 服务器响应并发送证书:服务器响应客户端的请求,并发送其SSL证书。
  3. 客户端验证证书:浏览器检查证书的有效性,包括证书是否由受信任的证书颁发机构签发、证书是否过期等。
  4. 生成密钥:如果证书验证通过,浏览器会生成一个随机的对称加密密钥。
  5. 加密密钥并发送给服务器:浏览器使用服务器的公钥对对称密钥进行加密,然后发送给服务器。
  6. 服务器解密密钥:服务器使用自己的私钥解密收到的加密密钥。
  7. 建立加密通道:服务器和客户端现在可以使用对称密钥进行加密通信。

加密方式

对称加密算法的特点,

优点:对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。

缺点:对称加密,密钥管理的安全性很低,因为加密和解密都使用同一个密钥,在密钥的发送过程中,密钥可能被第三方截取,导致第三方也可以破解密文。

代码示例

在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的区别:

  1. 加密

    • HTTP:不加密,数据在传输过程中可能会被截获或篡改。
    • HTTPS:加密,使用SSL/TLS协议对数据进行加密,确保数据传输的安全性。
  2. 端口

    • HTTP:默认使用80端口。
    • HTTPS:默认使用443端口。
  3. 安全性

    • HTTP:不安全,容易受到中间人攻击。
    • HTTPS:安全,可以防止中间人攻击。
  4. 性能

    • HTTP:性能略高,因为没有加密过程。
    • HTTPS:性能略低,因为需要进行加密和解密。
  5. 证书

    • HTTP:不需要证书。
    • HTTPS:需要SSL/TLS证书。

常见的错误回答案例

  1. 混淆HTTPS和HTTP:错误地认为HTTPS和HTTP只是端口不同(HTTPS使用443端口,HTTP使用80端口),而忽略了HTTPS提供的加密和身份验证功能。
  2. 认为HTTPS会显著降低网站性能:虽然HTTPS确实会增加一些计算开销,但现代浏览器和服务器的性能已经足够应对这些开销,而且HTTPS对性能的影响通常很小。
  3. 认为HTTPS可以防止所有类型的攻击:虽然HTTPS可以防止中间人攻击和数据泄露,但它不能防止所有类型的攻击,如DDoS攻击或SQL注入。

参考资料

  1. MDN Web Docs - HTTPS
  2. SSL/TLS协议详解
  3. Node.js HTTPS模块

总结

实际前端面试到这里就够了,当然你也可以了解其他知识点作为扩展,比如对成加密和非加密算法的区别,除了中间人攻击还有其他的攻击方式等。