在NodeJs中生成和使用SSL证书的教程

3,494 阅读5分钟

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

图片来源:freepik

当涉及到保护你的网络应用安全时,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

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

npm init --y

现在让我们安装依赖性,即Express,为此运行此命令:

npm install --save express

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

"scripts": {

"start":"node index.js"

},

如果你的系统中安装了nodemon,你也可以使用nodemon,像这样:

"scripts": {

"start":"nodemon index.js"

},

现在让我们为我们的应用程序添加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')

})

让我们生成SSL证书

在我们进一步行动之前,让我们在我们的应用程序文件夹中创建一个目录来存储这些证书。

mkdir cert

现在使用cd命令移动到cert目录:

cd cert

要生成SSL证书,我们需要遵循以下步骤:

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

生成一个私钥

为了生成一个私钥,我们需要安装 开放SSL,这是一个全功能的工具包,用于传输层安全(TLS)和安全套接字层(SSL)协议,在我们的本地机器上。这些文章可以帮助你安装它。窗口-乌班图.

安装完成后,我们需要运行下面这个命令来生成私钥:

openssl genrsa -out key.pem

一旦我们运行了上述命令,它就会生成私钥并将其保存在cert目录下的key.pem文件中,并在终端给出这类信息:

Generating RSA private key, 2048 bit long modulus

...+++

.................+++

e is 65537 (0x10001)

创建一个CSR(证书签名请求)

由于我们是自己的证书机构,我们需要使用CSR来生成我们的证书。要做到这一点,我们需要运行下面的命令:

openssl req -new -key key.pem -out csr.pem

一旦我们运行了这个命令,它就会问几个问题,如下所示:

你可以按回车键跳过任何问题,如果你想提供细节,你可以提供它们,这完全取决于你。

一旦你完成了这些问题,它将在cert 文件夹内的 csr.pem文件中生成CSR。

生成SSL证书

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

让我们运行下面的命令来生成它:

openssl x509 -req -days 365 -in csr.pem -signkey key.pem -out cert.pem

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

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

在Express中整合SSL证书

现在让我们使用文件系统 (fs )和路径模块在我们的应用程序中使用这些证书。要做到这一点,我们需要在我们的应用程序中编辑几行,如下所述。

早些时候,我们已经创建了一个常量变量选项。现在我们将更新这部分代码,在其中加入生成的证书的路径,如下所示。

const options = {

key:'',

cert:''

}
const options = {

key:fs.readFileSync(path.join(__dirname,'./cert/key.pem')),

cert:fs.readFileSync(path.join(__dirname,'./cert/cert.pem'))

}

一旦完成,保存它并运行服务器:

npm start

你可以通过访问这个URL来检查HTTPS是否工作。

https://localhost:1337

结论

虽然我们有一个有效的证书,但你可能会在你的浏览器中看到 "不安全",这只是因为我们生成的证书不是由一些已知的证书机构生成的,所以,你的浏览器不相信你是一个有效的证书机构。

但是,我们通常应该把这个过程用于开发目的,对于生产,我们应该使用由证书颁发机构生成的证书。

谢谢你的阅读!😊