如果你正在开发一个 Web 应用程序,并且你希望你的用户的数据是安全的,那么你需要使用 HTTPS。HTTPS 是一种通过加密将数据从 Web 服务器传输到浏览器的协议,可以确保用户的数据被保护并且不能被窃取。
在这篇文章中,我们将学习如何使用 Express.js 让你的应用程序支持 HTTPS,并确保用户的数据始终是安全的。
生成 SSL 证书
在使用 HTTPS 之前,你需要准备一个 SSL 证书。SSL 证书是一种特殊的文档,它会提供加密和身份验证。有许多公司提供 SSL 证书,但是你也可以使用免费的 SSL 证书,并且这些证书同样可以提供良好的安全性。
在这里,我们将使用 Let's Encrypt 这个服务来生成 SSL 证书。你可以采用 ACME 协议自动化处理 Let's Encrypt SSL 证书的生成和安装,这里有一个 ACME 客户端称为 Certbot,我们将使用这个客户端。
安装 Certbot
Certbot 可以自动化帮助你生成和安装 SSL 证书。在这里,我们将使用 Certbot 来生成证书。
首先,我们需要安装 Certbot。
在 Ubuntu 上,你可以使用以下命令来安装 Certbot。
sudo apt-get update sudo apt-get install certbot
在 CentOS 和 Fedora 上,你可以使用以下命令来安装 Certbot。
sudo yum install certbot
安装 Certbot 后,使用以下命令检查它是否能正常运行。
sudo certbot --version
生成 SSL 证书
你可以使用 Certbot 来生成一个 SSL 证书。使用以下命令启动 Certbot。
sudo certbot certonly --standalone
这个命令将启动证书生成过程。在执行这个命令之前,请确保你的 Web 服务器已经运行,并且 80 端口没有被占用。
证书生成过程将要求你输入相关信息,例如你的网站域名和电子邮件地址。请按照提示输入相关信息,直到该过程结束。
如果你的网站域名无法从外部访问,你可以使用 certbot certonly --standalone --preferred-challenges dns 操作来完成DNS 验证方式的证书生成。
生成证书后,Certbot 会将 SSL 证书存储在 /etc/letsencrypt/live/yourdomain.com/ 目录下。
现在,我们已经生成了一个 SSL 证书,接下来我们将学习如何在 Express.js 应用程序中使用它。
配置 Express.js 应用程序以支持 HTTPS
在 Express.js 应用程序中使用 HTTPS 需要相应的证书和私钥。Certbot 生成的 SSL 证书包括一个证书(.pem)和一个私钥(.key)。我们需要在应用程序中加载这些文件来启用 SSL。
以下代码演示了如何在 Express 应用程序中启用 HTTPS。
// javascriptcn.com 代码示例 const express = require('express'); const https = require('https'); const fs = require('fs'); const app = express(); const options = { key: fs.readFileSync('/etc/letsencrypt/live/yourdomain.com/privkey.pem'), cert: fs.readFileSync('/etc/letsencrypt/live/yourdomain.com/fullchain.pem'), } https.createServer(options, app).listen(443, () => { console.log(`Server started on port ${port}`); });
在这个示例中,我们使用了 Node.js 内置的 HTTPS 模块来创建一个 HTTPS 服务器。请注意,我们将证书和密钥文件加载到 options 对象中,然后将其传递给 createServer 函数。
现在,当你的应用程序启动时,它将使用 HTTPS 来提供服务,这样用户就可以通过安全的方式访问它了。
自动更新 SSL 证书
Let's Encrypt 的证书有效期只有 90 天,因此你需要更新你的证书,以确保你的应用程序能够继续使用 HTTPS 提供服务。
你可以使用 Certbot 来自动更新你的证书。以下是一个例子,展示如何通过 Cron 定时任务每天自动执行证书更新操作。
0 0 * * * /usr/bin/certbot renew --quiet --renew-hook "systemctl reload nginx.service"
在这个例子中,我们将 Certbot 的 renew 命令添加到了每天在午夜执行的 Cron 任务中。renew-hook 选项会在证书更新完成后重启 Nginx Web 服务器。
总结
在本文中,我们学习了如何使用 Let's Encrypt 来生成 SSL 证书,并在 Express.js 应用程序中启用 HTTPS。
现在,你可以通过使用 SSL 证书来确保你的用户的数据是安全的。在将来,当你需要更新 SSL 证书时,你可以使用 Certbot 来自动化这个过程。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654f4f867d4982a6eb844974