feng xiaohan

HTTP 和 HTTPS

HTTP

HTTP 的缺点

  • 使用明文传输(不加密),内容可能会被盗用;
  • 不会验证通信方的身份,可能会被劫持或伪装;
  • 无法验证报文的完整性,报文可能会被篡改;

HTTPS

对信息进行加密,有信息完整性校验和通信方身份校验。

HTTPS = HTTP + TLS/SSL

TLS 和 SSL

TLS(Transport Layer Security)和 SSL(Secure Sockets Layer)是用于保护网络通信安全的协议。他们提供了加密和认证机制,用于确保数据传输的机密性和完整性。

TLS 是将对称加密、非对称加密和散列函数融合起来,安全性很高。

SSL 是最早的加密协议,后来被 TLS 取代。TLS 是 SSL 的升级版本,提供更强大的安全性和更先进的加密算法。目前主流的浏览器和服务器都支持 TLS 协议。

目前广泛使用的是 TLS 1.2 和 TLS 1.3.

** 是在应用层的下面,传输层的上面去做的加密。**

加密方式

对称加密

加密和解密的密钥是相同的。

常见的有 DES、AES。
发送方(加密方):AES 算法 + 密钥 + 明文(传输信息)= CDSABIFHSC==(生成乱码)
接收方(解密方):AES 算法 + 密钥 + CDSABIFHSC==(生成乱码)= 明文(传输信息

非对称加密

加密和解密使用不同的密钥,使用接收方的公钥进行加密,接收方用自己的私钥进行解密。

常见的有 RSA、DSA。
发送方(加密方):RSA + 公钥 + 明文(传输信息)= CDSABIFHSC==(生成乱码)
接收方(解密方):RSA + 私钥 + CDSABIFHSC==(生成乱码)= 明文(传输信息

例子——将网站变为使用 HTTPS 的服务

该方法在开发和测试环境中使用,生产环境上还是使用第三方机构(阿里云、腾讯云等)颁发的证书文件。

  • 安装 openSSL 生成私钥;

    Mac 自带,Windows 需要去官网下载。

需要用到以下文件来完成证书相关操作:

  1. 私钥文件:用于对加密数据进行解密(如 private-key.pem);
  2. 证书签名请求文件:用于向 CA 申请 SSL/TSL 证书签名(如 certificate.csr);
  3. SSL/TSL 证书文件:用于对客户端发送的请求进行验证,确保通信的安全和可靠(如 certificate.pem);
  • 创建私钥
openssl genpkey -algorithm RSA -out private-key.pem -aes256
  • 生成 pem 签名文件
openssl req -new -key private-key.pem -out certificate.csr

“-key private-key.pem”:表示使用指定的私钥文件”private-key.pem”来加密证书签名请求中的密钥对。

  • 生成数字证书

Node

import https from "https";
import fs from "node:fs";

//http 端口号 80 https端口号 443
https
  .createserver(
    {
      key: fs.readFilesync("private-key.pem"),
      cert: fs.readFilesync("certificate.pem"),
      //密码短语
      passphrase: "123456",
    },
    (req, res) => {
      res.writeHead(200);
      res.end("success");
    }
  )
  .listen(443, () => {
    console.log("https server is running at https://localhost:433");
  });

nginx

在 nginx 的安装目录的 conf/nginx.conf 下配置。