Express.js 是 Node.js 的一个流行框架,用于构建 Web 应用程序和 API。在生产环境中,为了保护用户数据和保护远程服务不受攻击,需要使用 HTTPS 和 SSL。
SSL 和 HTTPS
SSL(Secure Sockets Layer)是一种加密协议,用于在连接到服务器的客户端和服务器之间实现安全通信。HTTPS(Hyper Text Transfer Protocol Secure)是一种带有 SSL 加密建立的网络协议,用于在 Web 上传输数据。
HTTPS 通过 SSL 加密保护数据的传输,包括身份验证和数据完整性。通过使用 SSL 证书,您的网站将被认为是安全的,因为它会被证明您是您所说的。
在 Express.js 中启用 HTTPS
Express.js 为使用 HTTPS 提供了内置支持。可以通过简单地指定 HTTPS 端口和 SSL 证书来启用 HTTPS。
在 Express.js 中使用 HTTPS 时,需要指定证书和密钥(包括私钥)。有两种方法可以实现此目的:
方法 1:
将证书和密钥文件放入服务器文件系统中,并指定它们的位置。
// javascriptcn.com 代码示例 const fs = require('fs'); const https = require('https'); const privateKey = fs.readFileSync('/path/to/private.key', 'utf8'); const certificate = fs.readFileSync('/path/to/certificate.crt', 'utf8'); const credentials = {key: privateKey, cert: certificate}; const express = require('express'); const app = express(); // 使用 HTTPS const httpsServer = https.createServer(credentials, app); httpsServer.listen(443);
方法 2:
将证书和密钥文件存储在环境变量中,并从环境变量中读取它们。
// javascriptcn.com 代码示例 const https = require('https'); const privateKey = process.env.PRIVATE_KEY.replace(/\\n/g, '\n'); const certificate = process.env.CERTIFICATE.replace(/\\n/g, '\n'); const credentials = {key: privateKey, cert: certificate}; const express = require('express'); const app = express(); // 使用 HTTPS const httpsServer = https.createServer(credentials, app); httpsServer.listen(443);
上述示例中的端口 443
是 HTTPS 默认端口,如果使用其他端口,则必须通过将端口添加到 URL 的方式指定来访问应用程序。
禁用 HTTP
为了提高安全性,建议禁用 HTTP,只允许使用 HTTPS。在 Express.js 中,可以使用中间件实现此行为。
app.use((req, res, next) => { if(req.headers['x-forwarded-proto'] === 'http') { return res.redirect(`https://${req.hostname}${req.url}`); } next(); });
上述示例中,中间件会检查传入请求的协议头。如果协议头是 HTTP,则会重定向到 HTTPS。
总结
为了保护敏感数据和防止攻击者窃取数据,使用 HTTPS 和 SSL 协议非常重要。Express.js 提供了内置支持,以便我们轻松地在我们的应用程序中使用 HTTPS 和 SSL。此外,我们还可以禁用 HTTP,只允许使用 HTTPS 来提高我们的应用程序的安全性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654709087d4982a6eb16c4a2