如何在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.pem 和crs.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
结论
虽然我们有一个有效的证书,但你可能会在你的浏览器中看到 "不安全",这只是因为我们生成的证书不是由一些已知的证书机构生成的,所以,你的浏览器不相信你是一个有效的证书机构。
但是,我们通常应该把这个过程用于开发目的,对于生产,我们应该使用由证书颁发机构生成的证书。
谢谢你的阅读!😊