如何在 Node.js 中使用 HTTPS

Posted

技术标签:

【中文标题】如何在 Node.js 中使用 HTTPS【英文标题】:How to use HTTPS with Node.js 【发布时间】:2014-05-24 23:06:27 【问题描述】:

我没有 HTTPS、SSL 等方面的经验。

我想知道如何通过 HTTPS 使用 Node.js。我知道如何很好地使用 node.js,但是使用 HTTPS 时会出错。

我想我需要安装一些东西(openSSL?)。我想知道我必须在 Windows 8.1 计算机上安装的所有东西(不,我不想获得任何形式的 linux。也没有 cygwin),以便使用 node.js HTTPS 服务器。

我不需要付费证书,我只需要让它工作。它没有接收来自浏览器的请求,所以我不关心付费证书。

【问题讨论】:

来自 nodejs 的文档:nodejs.org/en/knowledge/HTTP/servers/… 而使用 express.js 另一个答案:***.com/a/11745114/1534823 【参考方案1】:

在您的系统上安装好 node.js 后,只需按照以下步骤即可运行支持 HTTP 和 HTTPS 的基本 Web 服务器!

第 1 步:建立证书颁发机构

    创建要存储密钥和证书的文件夹:

    mkdir conf


    转到那个目录:

    cd conf


    获取此ca.cnf 文件以用作配置快捷方式:

    wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/ca.cnf


    使用此配置创建新的证书颁发机构:

    openssl req -new -x509 -days 9999 -config ca.cnf -keyout ca-key.pem -out ca-cert.pem


    现在我们在ca-key.pemca-cert.pem 中拥有我们的证书颁发机构,让我们为服务器生成一个私钥:

    openssl genrsa -out key.pem 4096


    获取此server.cnf 文件以用作配置快捷方式:

    wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/server.cnf


    使用此配置生成证书签名请求:

    openssl req -new -config server.cnf -key key.pem -out csr.pem


    签署请求:

    openssl x509 -req -extfile server.cnf -days 999 -passin "pass:password" -in csr.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem


第 2 步:将您的证书安装为根证书

    将您的证书复制到您的根证书文件夹:

    sudo cp ca-crt.pem /usr/local/share/ca-certificates/ca-crt.pem


    更新 CA 存储:

    sudo update-ca-certificates


第 3 步:启动节点服务器

首先,确保server.js 的代码看起来像这样:

var http = require('http');
var https = require('https');
var fs = require('fs');

var httpsOptions = 
    key: fs.readFileSync('/path/to/HTTPS/server-key.pem'),
    cert: fs.readFileSync('/path/to/HTTPS/server-crt.pem')
;

var app = function (req, res) 
  res.writeHead(200);
  res.end("hello world\n");


http.createServer(app).listen(8888);
https.createServer(httpsOptions, app).listen(4433);

    转到您的server.js 所在的目录:

    cd /path/to


    运行server.js

    node server.js

【讨论】:

【参考方案2】:

2022 答案

    让你的 node.js 服务器在端口 80 上使用 HTTP 使用 DNS 将 映射到您的服务器 使用 https://certbot.eff.org 将您的服务器升级到 HTTPS

在第 3 步中,您下载并在您的服务器上运行 Certbot 应用程序。 Certbot 要求“YourWebsite.com”。然后它会为您颁发一个新的 HTTPS 证书并修补您的服务器配置文件以使用 HTTPS 证书。

例如,我的节点服务器在 AWS EC2 中运行,侦听端口 3000。我发现 Ubuntu 比亚马逊自己的 Linux 更容易配置。我使用 AWS Route53 将域名映射到具有静态弹性 IP 地址的 EC2 实例。我在 EC2 中安装了 nginx,将客户端的 80 端口请求映射到我的服务器的 3000 端口。Certbot 自动修补 Nginx 配置文件以使用新的 HTTPS 证书。

Certbot 很简单。这是因为 Certbot 在您的服务器上运行,因此 HTTPS 证书颁发机构 (LetsEncrypt) 可以通过 Internet 与 Certbot 对话来验证您是否控制了域名。

【讨论】:

以上是关于如何在 Node.js 中使用 HTTPS的主要内容,如果未能解决你的问题,请参考以下文章

无论如何,我可以在 node.js 中获取 html 正文

如何知道 node.js 中的请求是 http 还是 https

如何在 expo 中禁用 https-only fetch 请求 react native/node js

如何使用 node.js 在 mySQL 中进行批量更新

如何在 node.js 和 mongodb 中实现 geoip

如何在Node.js中从简单的HTTPS请求构造和提取值?