使用 mkcert 工具自签发 https 证书并进行本地受信

介绍

mkcert 是一个用于创建本地受信任的 SSL/TLS 证书的简单工具,特别适合开发者在本地环境中使用。它解决了为开发和测试目的创建自签名证书时遇到的信任问题。以下是关于 mkcert 的详细介绍:

特点

  • 易用性:只需一条命令即可生成证书,并自动安装到系统的根证书存储中。
  • 跨平台支持:支持Windows、macOS和Linux等操作系统。
  • 多域名支持:可以为多个域名(包括通配符域名)创建证书。
  • 自动管理:能够自动处理证书的安装和移除,简化了证书管理流程。

官方地址:https://github.com/FiloSottile/mkcert

使用

如下一张图就把使用 mkcert 创建和使用证书讲清楚了:

注意:必须要使用管理员模式操作,否则执行命令时会出现相关目录不可以操作等权限问题。

分发根证书

将根证书分发给其他用户,手工导入操作系统后,目标用户通过浏览器访问 mkcert 基于同一个根证书签发的所有证书,就不再会有浏览器红色警告了。

分发扩展名处理:

rootCA.pem 拷贝一个副本,并命名为 rootCA.crt (因为 windows 并不识别pem扩展名,并且 Ubuntu 也不会将pem扩展名作为 CA 证书文件对待),将rootCA.crt文件分发给其他用户,手工导入。

如果根证书已经分发给很多用户(比如公司内部所有同事),请妥善保管根证书,否则以后重新生成根证书再签发的证书又是不可信了(信任的前提是基于同一个根证书签发的所有证书)。


上文是 Windows 下的操作,如果你是 Linux 和 MacOS,详见官网操作步骤。

如果你希望自定义 OrganizationOrganizationalUnitCommonName,请通过修改源代码 cert.go 文件并重新编译程序实现。
rootCA 默认有效期10年,后续签发的证书默认有效期2年3个月。如果需要修改时长,也是修改 cert.go 文件后重新编译。


原理

整体原理图如下,仅供参考:

根证书安装后,可以通过证书管理界面看到我们的证书,如下图所示:

在 Linux 上安装根证书

Linux 系统如果要正常访问自签发 https 证书不警告,同理需要安装根证书(不是创建证书)。

根据操作系统的不同,将转换后的证书放到不同的证书目录,然后执行对应的更新命令,如下:

Centos:

bash 复制代码
cp ca.crt /etc/pki/ca-trust/source/anchors;update-ca-trust

Ubuntu:

bash 复制代码
sudo cp ca.crt /usr/local/share/ca-certificates;sudo update-ca-certificates

Alpine:

bash 复制代码
cp ca.crt /usr/local/share/ca-certificates;sudo update-ca-certificates

注意:如果你的证书应用到 docker 的镜像私服中,那么你需要在所有可能拉取镜像的 Linux 服务器上更新根证书,并且重启 docker 或 containerd 服务(常规服务器使用容器重启 docker 服务、K8s 默认使用的是 containerd 需要重启 containerd)。才能使证书生效。

bash 复制代码
systemctl restart docker
systemctl restart containerd

扩展参数

官方的代码不支持自定义 CA 根证书和签发的 cert 证书的 O\OU\CN有效期,我基于官方代码 fork 的代码新增了这几个参数,有需要的可以下载我的代码编译后使用。Windows 电脑的话可以直接下载我编译好的使用。

新增参数如下:

  • ca-org
  • ca-orgUnit
  • ca-commonName
  • ca-years
  • cert-org
  • cert-orgUnit
  • cert-commonName
  • cert-days

编译和使用使用示例:

bash 复制代码
# 1.电脑下载并按照golang运行环境
# 2.下载代码 https://github.com/xzxiaoshan/mkcert
# 3.使用PowerShell编译(以Windows为例)版本号随便
go build -ldflags "-X main.Version=1.4.4.1"
# 4.执行编译后生成的exe文件生成和安装CA根证书
mkcert.exe -install -ca-org="Shanhy CA" -ca-orgUnit="Shanhy" -ca-commonName="Shanhy Root CA 2024"
# 创建cert证书的自定义参数同理
#(略)

如下图所示:


(END)

相关推荐
2501_916007476 小时前
Bundle ID 注册与管理 App ID 创建指南 命名规则 权限开关与删除注意事项
android·ios·小程序·https·uni-app·iphone·webview
2501_9159090613 小时前
iOS 证书创建与管理 类型限制 p12 密码与云备份实操
android·ios·小程序·https·uni-app·iphone·webview
zhao3266857511 天前
除了网页浏览,HTTP和HTTPS代理还能干啥?适用场景有哪些
网络协议·http·https
执笔画流年呀3 天前
网络原理(http)(https)
网络·http·https
llllll1523 天前
HTTP协议全解:从报文结构到HTTPS加密原理
网络协议·http·https
TlSfoward3 天前
DLL 指纹库 采集、检索 TLSFOWARD tls指纹库
爬虫·网络协议·https·自动化
00后程序员张4 天前
抓包鹰 电脑本机网络连接表怎么看?哪些程序在联网 进程归属与可疑 IP 追溯
网络协议·计算机网络·网络安全·ios·adb·https·udp
2501_915106324 天前
iOS 证书类型及作用说明 账号证书与签名配置的完整解读
android·ios·小程序·https·uni-app·iphone·webview
DsirNg5 天前
一文讲清网络协议:从打开网页到理解 HTTP、HTTPS 与 TLS
http·https·dns·网络基础·入门教程·tls·web 安全
2501_915918415 天前
iOS 怎么抓包?抓包鹰系统级 网卡 应用层三种方式对比,不越狱抓 iPhone 流量
网络协议·计算机网络·网络安全·ios·adb·https·udp