openssl 生成自签名证书,使用https访问localhost

参考资料

  1. 【OpenSSL】localhost を https 化する 自己証明書の作成方法

目录

  • [一. 前置知识](#一. 前置知识)
    • [1.1 流程简介](#1.1 流程简介)
    • [1.2 各种证书文件](#1.2 各种证书文件)
  • [二. 自定义CA机构](#二. 自定义CA机构)
    • [2.1 生成 CA 私钥](#2.1 生成 CA 私钥)
    • [2.2 生成 CA 的 CSR](#2.2 生成 CA 的 CSR)
    • [2.3 生成 CA 根证书](#2.3 生成 CA 根证书)
  • [三. 服务器(localhost)](#三. 服务器(localhost))
    • [3.1 生成 localhost 私钥 → 本地服务器的私钥](#3.1 生成 localhost 私钥 → 本地服务器的私钥)
    • [3.2 创建 localhost 的 SAN 配置](#3.2 创建 localhost 的 SAN 配置)
    • [3.3 生成 localhost 的 CSR](#3.3 生成 localhost 的 CSR)
    • [3.4 使用自定义 CA 给 localhost 签发证书](#3.4 使用自定义 CA 给 localhost 签发证书)
  • [四. 让 Windows 信任自定义CA](#四. 让 Windows 信任自定义CA)
    • [4.1 安装`localCA.crt`证书](#4.1 安装localCA.crt证书)
    • [4.2 查看`localCA.crt`证书导入情况](#4.2 查看localCA.crt证书导入情况)
  • [五. Caddy](#五. Caddy)
    • [5.1 安装](#5.1 安装)
    • [5.2 配置](#5.2 配置)
    • [5.3 运行](#5.3 运行)
  • [六. 浏览器查看效果](#六. 浏览器查看效果)
    • [6.1 自定义的自签名证书](#6.1 自定义的自签名证书)
    • [6.2 caddy生成的证书](#6.2 caddy生成的证书)

一. 前置知识

1.1 流程简介

  • 自己创建一个根证书(CA)
  • 用这个 CA 签发一个 localhost 证书
  • 把 CA 证书导入系统信任列表
  • Web 服务器(Caddy、Nginx、Apache等)使用签发的 localhost 证书

1.2 各种证书文件

bash 复制代码
C:\localhost-cert\
│
├── localCA.key          ← CA私钥
├── localCA.csr          ← CSR
├── localCA.crt          ← CA证书
│
├── localhost.key        ← localhost私钥
├── localhost.csr        ← CSR
├── localhost.cnf        ← SAN配置
└── localhost.crt        ← localhost服务器证书


CA = 公证处
localCA.key = 公证处的印章
localCA.crt = 公证处的营业执照/身份证明

localhost = 公司
localhost.key = 公司的私章
localhost.crt = 公司的身份证明

公证处证明:这个 localhost 证书是真的。

二. 自定义CA机构

CA机构(Certificate Authority,即证书颁发机构)是负责发放和管理数字证书的受信任第三方权威机构。核心职责身份验证:

  • 验证网站、企业、个人或设备的真实身份。
  • 签发证书:为通过验证的实体签署并颁发数字证书(包含公开密钥及身份信息)。
  • 证书管理:负责证书的更新、状态查询以及吊销(通过吊销列表 CRL 或在线证书状态协议 OCSP)。

2.1 生成 CA 私钥

  • 相当于私人证书颁发机构的印章
  • 可以使用这个印章给服务器签发证书
bash 复制代码
openssl genrsa -out localCA.key 4096

2.2 生成 CA 的 CSR

🔷CSR 就是一份请给我签发证书的申请书,它包含公钥和申请信息,但不包含私钥:

  • 申请者的信息,例如 CN
  • 申请者的公钥
  • 其他证书请求信息
  • 使用对应私钥生成的数字签名
bash 复制代码
localCA.key
    ↓
包含私钥 + 对应公钥
    ↓
生成 CSR
    ↓
localCA.csr
    ├── 公钥
    ├── Subject 信息
    │    ├── C=CN
    │    ├── ST=广东
    │    ├── L=广州
    │    ├── O=Example Inc
    │    └── CN=Example Local CA
    └── 私钥产生的签名
  • 得到localCA.csr文件
bash 复制代码
openssl req -batch -new -key localCA.key -out localCA.csr -subj "/C=CN/ST=Guangdong/L=Guangzhou/O=Example Inc/OU=Development/CN=Example Local CA"

2.3 生成 CA 根证书

  • 得到localCA.crt文件
bash 复制代码
openssl x509 -req -in localCA.csr -signkey localCA.key -out localCA.crt -days 3650 -sha256

三. 服务器(localhost)

3.1 生成 localhost 私钥 → 本地服务器的私钥

bash 复制代码
openssl genrsa -out localhost.key 2048

3.2 创建 localhost 的 SAN 配置

  • 创建一个localhost.cnf文件
  • 其中alt_names的内容:告诉浏览器,证书可以用于 localhost127.0.0.1::1
bash 复制代码
[req]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn

[dn]
C = CN
ST = Guangdong
L = Guangzhou
O = Example Inc
OU = Development
CN = localhost

[req_ext]
subjectAltName = @alt_names

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

3.3 生成 localhost 的 CSR

bash 复制代码
openssl req -new -key localhost.key -out localhost.csr -config localhost.cnf

3.4 使用自定义 CA 给 localhost 签发证书

bash 复制代码
                localCA
           ┌────────────────┐
           │ localCA.key    │
           │ localCA.crt    │
           └───────┬────────┘
                   │
                   │ 签发
                   ▼
           ┌────────────────┐
           │ localhost      │
           │                │
           │ localhost.key  │
           │ localhost.crt  │
           └────────────────┘
bash 复制代码
openssl x509 -req `
  -in localhost.csr `
  -CA localCA.crt `
  -CAkey localCA.key `
  -CAcreateserial `
  -out localhost.crt `
  -days 825 `
  -sha256 `
  -extfile localhost.cnf `
  -extensions req_ext
  • 显示自签名证书发行成功
  • 确认自签名证书的内容

四. 让 Windows 信任自定义CA

自定义CA不会被Windows信任,需要手动设置,告诉Windows自定义的 CA 是可信的。

4.1 安装localCA.crt证书

  • localCA.crt证书添加到受信任的根证书颁发机构

4.2 查看localCA.crt证书导入情况

  • Win + R 配合 certmgr.msc 打开证书管理器
  • 可以找到添加的自定义CA证书

五. Caddy

5.1 安装

powershell 复制代码
# 安装
scoop install caddy
# 查看版本
caddy version

5.2 配置

  • 新建Caddyfile文件,然后添加如下配置内容
    • caddy默认会自动生成本地 CA,自动签发 localhost 证书,自动导入系统信任
    • 此处为了学习自签名证书,因此不使用caddy自动签发的证书
  • 服务器的web程序运行在9002端口
    • 此处使用反向代理
    • localhost/test/*的所有请求都反向代理到服务器内部的127.0.0.1:9002/test/*
bash 复制代码
localhost {

	# 不使用Caddy自动生成的证书, 使用自己生成的证书
	# 如果去掉下面这行配置的话, caddy就会使用使用自己签发的证书
	tls D:\localhost-cert\localhost.crt D:\localhost-cert\localhost.key
	
	# 指定要被代理的路径
	handle /test/* {
		# 反向代理
		reverse_proxy 127.0.0.1:9002
	}
}
  • caddy fmt --overwrite .\Caddyfile:格式化配置文件
  • caddy validate --config Caddyfile:校验配置文件

5.3 运行

  • caddy run --config Caddyfile

六. 浏览器查看效果

6.1 自定义的自签名证书

  • 可以看到,已经是使用https访问localhost的状态了

6.2 caddy生成的证书

  • 在配置文件中去掉使用自定义的签名证书之后,启动caddy的时候,会自动进行证书申请与配置
  • caddy启动成功之后,打开浏览器查看证书,可以看到Caddy的字样
  • caddy自动添加的证书也可以在证书管理器中找到
相关推荐
xieliyu.2 小时前
HTTPS 加密流程深度解析|从 HTTP 痛点到 TLS 握手全过程
网络·笔记·网络协议·计算机网络·http·https
Lsetea18 小时前
Nginx报SSL_CTX_use_PrivateKey failed:证书与私钥不匹配怎么排查
nginx·https·ssl证书·openssl·私钥
qq_2976708720 小时前
第 4 篇:HTTP 和浏览器——HTTPS 不只是「把 HTTP 包一层 TLS」那么简单
网络安全·https·tls
今夕资源网20 小时前
本地SSL证书生成工具本地 HTTPS 配置不用再敲命令:CertTool 一站式管理自签证书与 Hosts
网络协议·https·ssl·ssl证书生成·ssl本地测试证书
ocean21031 天前
2025-2026年计算机网络面试高频知识点洞察
计算机网络·面试·职场和发展·https·tcp·面试真题·秋招春招
今夕资源网1 天前
Windows 本地 HTTPS 配置教程:使用 CertTool 创建自签名证书并部署到宝塔
windows·网络协议·https
uoKent2 天前
计网中的HTTP/HTTPS
网络协议·http·https
2501_915106322 天前
iOS数据采集技术详解:从性能监控到崩溃分析的全链路实践
android·ios·小程序·https·uni-app·iphone·webview
IPdodo_3 天前
2026年爬虫代理 IP 选择指南:从可用率、延迟到成本验收
网络协议·tcp/ip·scrapy·http·https·beautifulsoup·httpx