开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 9 天,点击查看活动详情
在保护您的 Web 应用程序时,SSL 证书是您需要考虑的最重要因素之一。SSL 证书是浏览器和搜索引擎用来验证网站真实性的数字证书。如果没有 SSL 证书,任何人都可以轻松冒充您的网站并窃取敏感的用户数据。
如果您的应用程序可供网络外部的用户使用,那么您还必须使用 SSL 证书。这样,您就可以相信用户正在连接到您的服务器,而不是可能伪装成它的人。
这篇文章将涵盖所有内容,从如何生成您自己的 SSL 证书,以便您可以使用 SSL 加密来保护您的应用程序和 HTTPS 链接。到最后,您将准确了解如何使用 SSL 加密设置和保护您的 Node.js 应用程序。
什么是 SSL 证书?
SSL 证书代表安全套接字层证书是一种数字证书,可在 Web 浏览器和 Web 服务器之间启用加密通信。数以百万计的在线企业和个人使用它来降低敏感信息(例如,信用卡号、用户名、密码、电子邮件等)被黑客和身份窃贼窃取或篡改的风险。
有两种类型的 SSL 证书:
- 自签名:由应用程序生成并用于测试环境
- CA 签名:由 CA(证书颁发机构)生成和签名。它用于生产。
在这篇文章中,我们将重点关注自签名 SSL 证书。
设置 Node.js 开发环境
在生成我们自己的 SSL 证书之前,让我们创建一个简单的 ExpressJs 应用程序。
要创建一个新的 Express 项目,让我们创建一个名为node-ssl -server 的目录,并使用此命令在终端中打开node-ssl-server目录。
cd node-ssl-server
然后运行这个命令来初始化一个新的 npm 项目:
npm init --y
现在让我们安装依赖项 ie express ,为此运行此命令:
npm install --save express
现在让我们在 package.json 中创建一个启动脚本,只需将这一行添加到“script{}”中,如下所示:
"scripts": {
"start":"node 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 证书
生成私钥
要生成私钥,我们需要在本地计算机上安装OpenSSL,这是一个用于传输层安全性 (TLS) 和安全套接字层 (SSL) 协议的全功能工具包。这些文章可以帮助您安装它。Windows - Ubuntu。
安装完成后,我们需要运行如下所示的命令来生成私钥:
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
运行此命令后,它会询问几个问题,如下所示:
如果您想提供可以提供的详细信息,您可以通过简单地按 enter else 来跳过任何问题,这完全取决于您。
完成这些问题后,它将在cert文件夹内的 csr.pem文件中生成 CSR 。**
生成 SSL 证书
现在进行最后的步骤,我们需要使用key.pem和csr.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
结论
尽管我们有一个有效的证书,但您可能会在浏览器中看到“不安全”,这只是因为我们已经生成了证书,而它不是由某些已知的证书颁发机构生成的,因此,您的浏览器不信任您作为有效证书权威。
但是我们通常应该将此过程用于开发目的,而对于生产,我们应该使用由证书颁发机构生成的证书。