在保护您的 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
结论
尽管我们有一个有效的证书,但您可能会在浏览器中看到“不安全”,这只是因为我们已经生成了证书,而它不是由某些已知的证书颁发机构生成的,因此,您的浏览器不信任您作为有效证书权威。
但是我们通常应该将此过程用于开发目的,而对于生产,我们应该使用由证书颁发机构生成的证书。