发布于 2026-01-06 3 阅读
0

如何在Node.js中生成和使用SSL证书

如何在Node.js中生成和使用SSL证书

在保护您的 Web 应用程序安全方面,SSL 证书是您需要考虑的最重要因素之一。SSL 证书是浏览器和搜索引擎用来验证网站真实性的数字证书。如果没有 SSL 证书,任何人都可以轻易冒充您的网站并窃取敏感的用户数据。

如果您的应用程序可供网络外部用户访问,则您还必须使用 SSL 证书。这样,您可以确保用户连接的是您的服务器,而不是伪装成您服务器的其他人。

本文将涵盖从如何生成自己的 SSL 证书到如何使用 SSL 加密保护您的应用程序和 HTTPS 链接的所有内容。读完本文后,您将确切地了解如何使用 SSL 加密设置和保护您的 Node.js 应用程序。

什么是SSL证书?

SSL证书全称为安全套接层证书,是一种数字证书,它能够实现网络浏览器和网络服务器之间的加密通信。数百万在线企业和个人都在使用它来降低敏感信息(例如信用卡号、用户名、密码、电子邮件等)被黑客和身份窃贼窃取或篡改的风险。

SSL证书有两种类型:

  • 自签名:由应用程序生成,用于测试环境

  • CA签名:由证书颁发机构(CA)生成和签名。用于生产环境。

本文将重点介绍自签名 SSL 证书。

设置您的 Node.js 开发环境

在生成我们自己的 SSL 证书之前,让我们创建一个简单的 ExpressJs 应用程序。

要创建一个新的 Express 项目,让我们创建一个名为node-ssl-server 的目录,并使用以下命令在终端中打开node-ssl-server目录。

cd node-ssl-server
Enter fullscreen mode Exit fullscreen mode

然后运行以下命令初始化一个新的 npm 项目:

npm init --y
Enter fullscreen mode Exit fullscreen mode

现在我们来安装依赖项,即 express,为此请运行以下命令:

npm install --save express
Enter fullscreen mode Exit fullscreen mode

现在让我们在 package.json 中创建一个启动脚本,只需将这行代码添加到“script{}”中,如下所示:

"scripts": {
"start":"node index.js"
},
Enter fullscreen mode Exit fullscreen mode

在我们的应用程序中添加 index.js 文件,并在其中添加如下所示的几行代码:

const express= require('express')
const https=require('https')
const fs=require('fs')
const path=require('path')
const app=express();
app.use('/',(req,res,next)=>{
res.send('hello I am SSL Server !')
})
const options={
key: '',
cert: ''
}
const sslServer=https.createServer(options,app);
sslServer.listen(1337,()=>{
console.log('Secure server is listening on port 1337')
})
Enter fullscreen mode Exit fullscreen mode

让我们生成 SSL 证书

在继续之前,让我们在应用程序文件夹内创建一个目录来存储证书。

mkdir cert
Enter fullscreen mode Exit fullscreen mode

现在使用 cd 命令切换到证书目录:

cd cert
Enter fullscreen mode Exit fullscreen mode

要生成 SSL 证书,我们需要按照以下步骤操作:

  • 生成私钥
  • 使用私钥创建 CSR(证书签名请求)。
  • 从 CSR 生成 SSL 证书

生成私钥

要生成私钥,我们需要在本地计算机上安装OpenSSL ,这是一个功能齐全的传输层安全协议 (TLS) 和安全套接字层协议 (SSL) 工具包。以下文章可以帮助您安装它: Windows - Ubuntu

安装完成后,我们需要运行如下所示的命令来生成私钥:

openssl genrsa -out key.pem
Enter fullscreen mode Exit fullscreen mode

运行上述命令后,它将生成私钥并将其保存在cert 目录下的key.pem文件中,并在终端中显示如下信息。

Generating RSA private key, 2048 bit long modulus
...+++
.................+++
e is 65537 (0x10001)
Enter fullscreen mode Exit fullscreen mode

创建 CSR(证书签名请求)

由于我们自身就是证书颁发机构,因此我们需要使用 CSR 来生成证书。为此,我们需要运行以下命令。

openssl req -new -key key.pem -out csr.pem
Enter fullscreen mode Exit fullscreen mode

运行此命令后,它会询问一些问题,如下所示:

图片问题

您可以按回车键跳过任何问题,如果您想提供详细信息,也可以提供,这完全取决于您。

完成这些问题后,它将在证书文件夹内的csr.pem文件中生成 CSR

生成 SSL 证书

现在到了最后一步,我们需要使用key.pemcsr.pem文件来生成我们的 SSL 证书。

让我们运行以下命令来生成它。

openssl x509 -req -days 365 -in csr.pem -signkey key.pem -out cert.pem
Enter fullscreen mode Exit fullscreen mode

注:我们使用 x509 是因为它是定义公钥证书格式的标准。我们将证书有效期设置为 365 天。

运行上述命令后,证书将保存在cert 文件夹内的cert.pem文件中。现在您可以删除csr.pem文件,也可以保留它。

在 Express 中集成 SSL 证书

现在,让我们在应用程序中使用这些证书,方法是使用文件系统 (fs) 和路径模块。为此,我们需要按照以下说明编辑应用程序中的几行代码。

之前我们创建了一个常量变量选项。现在我们将更新这部分代码,将生成的证书路径添加到其中,如下所示。

前:

const options = {
key:'',
cert:''
}
Enter fullscreen mode Exit fullscreen mode

后:

const options = {
key:fs.readFileSync(path.join(__dirname,'./cert/key.pem')),
cert:fs.readFileSync(path.join(__dirname,'./cert/cert.pem'))
}
Enter fullscreen mode Exit fullscreen mode

完成后保存并运行服务器:

npm start
Enter fullscreen mode Exit fullscreen mode

您可以通过访问以下网址来检查 HTTPS 是否正常工作:
https://localhost:1337

图片浏览器

结论

即使我们拥有有效的证书,您的浏览器仍可能显示“不安全”字样。这是因为该证书是我们自行生成的,并非由知名的证书颁发机构 (CA) 生成,因此您的浏览器不信任您作为有效的证书颁发机构。
通常情况下,我们应该将此过程用于开发目的,而对于生产环境,则应使用由证书颁发机构 (CA) 生成的证书。

感谢阅读!
希望这篇小文章对您有所帮助。请与您的朋友和同事分享。分享是一种美德。

在多个平台上与我联系

文章来源:https://dev.to/devland/how-to-generate-and-use-an-ssl-certificate-in-nodejs-2996