参考资料
目录
- [一. 前置知识](#一. 前置知识)
-
- [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证书导入情况)
- [4.1 安装`localCA.crt`证书](#4.1 安装
- [五. 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的内容:告诉浏览器,证书可以用于localhost、127.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 安装
- 此处使用
scoop进行安装 - 关于scoop的安装以及使用请参考 Windows 命令行包管理工具scoop的使用
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自动添加的证书也可以在证书管理器中找到
