likes
comments
collection
share

本地调试 Service Worker 之生成 HTTPS 证书

作者站长头像
站长
· 阅读数 92

本文将介绍为本地服务器提供 SSL 证书的过程。在部署生产服务器的 Web 应用程序之前需要进行本地测试。也可以在本地环境中运行 Web 应用程序,并通过互联网访问它。

介绍

同样重要的是,为此获得 SSL 证书,以使用户信任该站点,并消除地址栏上的“不安全”消息。

先决条件

为了跟随本文操作,最好具备以下条件:

已安装 Node.js。 已安装 Postman。 操作系统可以是安装有 Cygwin 的 Windows 或基于 Linux 的操作系统。 熟悉 Linux Bash 命令、Node.js 和 Express。 已安装 Chrome 网络浏览器。 文字编辑器 - VS Code。

操作步骤

  1. 创建证书。
  2. 为本地主机签署 SSL 证书。
  3. 使用 Node.js 开发服务器,该服务器使用本地主机 SSL 证书进行服务。
  4. 配置 Chrome 网络浏览器和 Postman API 客户端,以允许我们签署的证书作为 CA。
  5. 从浏览器或 API 客户端安全地访问本地主机。

步骤 1:生成 CA 证书

SSL 证书通常由第三方公司签署,称为证书颁发机构(CA)。它们是互联网的可信发行者,在发出任何证书之前会对站点进行尽职调查,以确保站点符合要求。

但是,没有任何 CA 为本地主机签发证书,因为没有人拥有本地主机。在我们的情况下,我们将像 CA 一样签署证书。

第一步将是使用以下命令生成根 CA 证书:

$ mkdir cert  
$ cd cert  
$ mkdir CA  
$ cd CA  
$ openssl genrsa -out CA.key -des3 2048  

上述命令将生成一个私钥,并要求输入密钥的简单密码。用户将输入密码,并再次确认。

接下来,我们将使用生成的密钥生成根 CA 证书,在我们的情况下有效期为十年。将要求密钥和证书信息的密码。用户可以输入所需的证书信息或将其保留为默认值。

运行以下命令以实现我们上面讨论的内容:

$ openssl req -x509 -sha256 -new -nodes -days 3650 -key CA.key -out CA.pem  

现在,在 cert/CA 文件夹中,我们有两个文件,CA.key 和 CA.pem。

步骤 2:生成证书

现在已经创建了 CA 密钥和 CA 证书。我们可以使用已经创建的 CA 签署 SSL 证书。

接下来,在 cert/CA 目录中创建一个新目录 localhost。在 localhost 中创建一个新文件 localhost.ext。

$ mkdir localhost  
$ cd localhost  
$ touch localhost.ext  

需要写入签名 SSL 证书的信息将包含在此 localhost.ext 文件中。

该文件将显示如下:

authorityKeyIdentifier = keyid,issuer  
basicConstraints = CA:FALSE  
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment  
subjectAltName = @alt_names

[alt_names]  
DNS.1 = localhost  
IP.1 = 127.0.0.1  

请注意,该证书将适用于 localhost 和 127.0.0.1。您可以决定将更多域名或 IP 地址添加到文件中,但请确保编辑 /etc/hosts 文件,使这些域名指向本地计算机(127.0.0.1)。

接下来,将生成一个密钥,并使用该密钥生成 CSR(证书签名请求)。

$ openssl genrsa -out localhost.key -des3 2048  

该命令将生成 localhost 私钥,并要求密钥的密码,并要求用户再次确认。

接下来,将使用该密钥生成 CSR,并要求上面创建的任何其他详细信息,可以将其保留为默认值或适当输入。

请注意请求的挑战密码;您可以输入任何内容。

使用以下命令生成 CSR:

$ openssl req -new -key localhost.key -out localhost.csr  

现在,有了这个 CSR,我们可以请求 CA 签署证书,如下所示。请注意,CA.key 和 CA.pem 文件的路径取决于用户从何处运行命令。在这种情况下,下面的命令在 /cert/CA/localhost 中运行。

$ openssl x509 -req -in localhost.csr -CA ../CA.pem -CAkey ../CA.key -CAcreateserial -days 3650 -sha256 -extfile localhost.ext -out localhost.crt  

该命令获取 CSR(localhost.csr)、CA 证书(CA.pem 和 CA.key)和证书扩展文件(localhost.ext)。这些输入将生成一个有效期为十年的 localhost.crt 证书文件。

服务器将需要 localhost.crt 证书文件和解密的密钥,因为我们的 localhost.key 是以加密形式存在的。

我们需要解密 localhost.key 并将该文件存储如下:

$ openssl rsa -in localhost.key -out localhost.decrypted.key  

步骤 3:创建 Node.js Express 服务器

为了测试上面的代码片段是否按预期工作,我们必须创建一个 Node.js Express 服务器,输出成功消息。

回到我们的 cert 目录,我们将使用以下命令初始化一个 Node.js 项目,并添加 express 和 HTTPS 包:

$ npm init -y  
$ npm i express https  
$ touch index.js  

然后将 index.js 文件编辑如下:

const fs = require('fs');  
const key = fs.readFileSync('./CA/localhost/localhost.decrypted.key');  
const cert = fs.readFileSync('./CA/localhost/localhost.crt');

const express = require('express');  
const app = express();

app.get('/', (req, res, next) => {  
res.status(200).send('Hello world!');  
});

const https = require('https');  
const server = https.createServer({ key, cert }, app);

const port = 3000;  
server.listen(port, () => {  
console.log(`Server is listening on https://localhost:${port}`);  
});  

使用以下命令运行服务器:

$ node index.js  

控制台上将显示一个成功消息:“Server is Listening on https://localhost:3000”。

Importing CA Certificate to the browser

本地调试 Service Worker 之生成 HTTPS 证书

本地调试 Service Worker 之生成 HTTPS 证书

本地调试 Service Worker 之生成 HTTPS 证书

本地调试 Service Worker 之生成 HTTPS 证书

本地调试 Service Worker 之生成 HTTPS 证书

至此已经完成整个 https 证书安装过程,service worker 也已经可以用,注意是 localhost 下能用。

转载自:https://juejin.cn/post/7242694746829045819
评论
请登录