使用openssl为localhost创建自签名

自签名

生成命令

使用openssl生成私钥和证书。

openssl req -x509 -newkey rsa:4096 -nodes  -days 365 -subj "/CN=localhost" -addext "subjectAltName=DNS:localhost" -keyout cert.key -out cert.crt
# or
openssl req -x509 -newkey rsa:2048 -nodes -days 365 -sha256 -subj '/CN=localhost'  -addext "subjectAltName=DNS:localhost"   -keyout private-key.pem -out certificate.pem
  • -x509 :生成自签名证书
  • -newkey rsa:4096 :生成 4096 位 RSA 密钥
  • -keyout :指定私钥输出路径
  • -out :指定证书输出路径
  • -days 365 :证书有效期 365 天
  • -nodes :不加密私钥
  • -subj "/CN=localhost" :设置证书主题为 localhost
  • -addext "subjectAltName=DNS:localhost":配置SAN扩展

如果提示subject name格式不正确,就修改-subj "//CN=localhost",多加一个/

subjectAltName配置很重要,浏览器需要确保访问的 URL 和证书中的CN/SAN完全匹配

配置好之后,应该会在当前目录生成cert.keycert.crt两个文件或private-key.pemcertificate.pem两个文件。

安装

如果要让浏览器正确识别有两种方法:安装证书浏览器证书管理器

安装证书

双击cert.crt后点击安装证书或右击cert.crt选择安装证书。
安装证书
将证书存储为受信任的根证书颁发机构

浏览器证书管理器

在浏览器中可以导入自定义证书。
可以在浏览器设置中直接搜索证书,一般在隐私安全下面可以找到管理证书
下面分别是ChromeEdge的管理证书。
管理证书
管理证书
谷歌浏览器还支持自定义导入,不需要安装证书到系统,只需要导入即可识别。
自定义导入
也可以选择管理系统导入的证书。
管理证书
点击导入,选择证书文件cert.crt,选择证书存储在受信任的根证书颁发机构
安装证书
安装完成后开始测试。

导入证书之前:
不安全
导入证书之后:
安全
可以看到证书生效了。

使用 node 创建简单的服务器测试代码。

import express from 'express'
import https from 'node:https'
import fs from 'node:fs'
import path from 'node:path'

const app = express()

// 加载SSL证书,使用`cert.key, cert.crt`或者`private-key.pem, certificate.pem`
const sslOptions = {
  key: fs.readFileSync(path.resolve('D:/OpenSSL/ca', 'cert.key')),
  cert: fs.readFileSync(path.resolve('D:/OpenSSL/ca', 'cert.crt'))
}

app.use(express.static(import.meta.dirname))

// 创建HTTPS服务器
const server = https.createServer(sslOptions, app)

server.listen(3000, () => {
  console.log('HTTPS 服务启动成功,端口: 3000')
})

如果运行报错:ERR_OSSL_X509_KEY_VALUES_MISMATCH,这表明证书秘钥不匹配。

首先确认证书和秘钥是否匹配:

openssl x509 -noout -modulus -in cert.crt | openssl md5 && \
openssl rsa -noout -modulus -in cert.key | openssl md5

如果哈希值不匹配需要重新生成证书和秘钥。如果问题还存在,那可能需要完全删除旧证书并重新生成。

### 使用 OpenSSL 创建自签名证书 为了创建自签名证书,`openssl.exe` 工具必不可少,在 Windows 平台上可以从指定站点获取该工具[^1]。此工具同样适用于其他操作系统,如 macOS 和 Linux[^2]。 #### 准备工作 确保已安装并配置好 OpenSSL 环境。这通常意味着将 OpenSSL 安装目录下的 bin 文件夹路径添加到系统的环境变量 PATH 中,以便可以直接调用 `openssl` 命令。 #### 创建根 CA 证书和私钥 首先需要为自己扮演的认证机构(CA)创建一对公私钥以及相应的CA证书: ```bash # 生成 CA 私钥 (ca.key),这里指定了密钥长度为 2048 bit openssl genrsa -out ca.key 2048 # 利用上述私钥来签发一张 X.509 v3 扩展格式的自签名 CA 证书(ca.crt),有效期设为十年(3650天) openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt -subj "/C=CN/ST=Beijing/L=Beijing/O=Example/CN=example.com" ``` #### 生成服务器端私钥与CSR请求文件 接着要为目标服务准备专属的身份证明材料——即私钥(server.key)及其对应的证书签署请求文件(csr): ```bash # 生产服务器使用的 RSA 非对称加密算法类型的私钥 server.key, 密码保护省略(-nodes 参数作用) openssl genrsa -out server.key 2048 # 构建基于以上私钥而来的证书申请表单 csr 请求文档 server.csr openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Example/CN=localhost" ``` #### 发放最终版 SSL/TLS 数字凭证给目标主机 最后一步就是利用之前建立好的 CA 结合当前待处理的服务商所提供的 CSR 来颁发正式有效的 HTTPS 访问所需的 TLS/SSL 证书: ```bash # 将 CSR 转换成标准 PEM 编码形式存储于文件server.pem之中;同时设置其有效期限为一年(365日卡) openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.pem -days 365 -sha256 ``` 完成这些操作之后就成功制作了一张可以被浏览器识别并不再提示警告信息的安全连接所必需的 SSL/TLS 证书了。不过需要注意的是,由于这是由个人而非受信任第三方机构签发出来的证书,因此如果想要让更广泛的用户群体接受,则还需要进一步考虑通过商业渠道购买经过权威部门验证过的数字证书产品。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值