MST

星途 面试题库

面试题:Node.js 中如何通过 HTTPS 提升 HTTP 服务安全性

在 Node.js 开发的 HTTP 服务中,简述如何将其升级为 HTTPS 服务,需要提及获取和配置 SSL 证书的一般流程以及使用 Node.js 内置模块实现 HTTPS 服务的关键代码步骤。
46.5万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

获取和配置 SSL 证书的一般流程

  1. 选择证书颁发机构(CA)
    • 可以选择知名的商业 CA,如 Let's Encrypt(免费)、Comodo、Symantec 等。Let's Encrypt 因其免费且广泛支持受到开发者青睐。
  2. 验证域名所有权
    • 不同的 CA 有不同的验证方式,常见的有:
      • DNS 验证:在域名的 DNS 记录中添加特定的 TXT 记录,CA 通过查询 DNS 来验证域名所有权。
      • 文件验证:在网站根目录放置 CA 提供的特定文件,CA 通过访问该文件来验证。
  3. 生成证书签名请求(CSR)
    • 在服务器上使用工具如 OpenSSL 生成 CSR。例如,使用以下命令:
    openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr
    
    • 过程中会提示输入国家、地区、组织等信息。
  4. 获取 SSL 证书
    • 将生成的 CSR 提交给选定的 CA。CA 验证通过后会颁发 SSL 证书,通常会提供证书文件(.crt)和中间证书文件(如果有)。
  5. 配置 SSL 证书
    • 将获取的证书文件(.crt)和私钥文件(.key)放置在服务器的合适目录,例如 /etc/ssl/certs/etc/ssl/private

使用 Node.js 内置模块实现 HTTPS 服务的关键代码步骤

  1. 引入 https 模块
    const https = require('https');
    const fs = require('fs');
    
  2. 读取 SSL 证书和私钥
    const options = {
      key: fs.readFileSync('/etc/ssl/private/domain.key'),
      cert: fs.readFileSync('/etc/ssl/certs/domain.crt')
    };
    
    • 如果有中间证书,还需要添加 ca 字段,例如:
    const ca = fs.readFileSync('/etc/ssl/certs/intermediate.crt');
    const options = {
      key: fs.readFileSync('/etc/ssl/private/domain.key'),
      cert: fs.readFileSync('/etc/ssl/certs/domain.crt'),
      ca: ca
    };
    
  3. 创建 HTTPS 服务器
    const server = https.createServer(options, (req, res) => {
      res.writeHead(200);
      res.end('Hello, HTTPS!\n');
    });
    
  4. 监听端口
    const port = 443;
    server.listen(port, () => {
      console.log(`HTTPS server running on port ${port}`);
    });
    

这样就将 Node.js 的 HTTP 服务升级为了 HTTPS 服务。