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

server/2024/12/18 2:00:00/

介绍

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

特点

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

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

使用

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

https://i-blog.csdnimg.cn/direct/34e695edbc66431ca02c5a38b0f80a21.png" alt="在这里插入图片描述" />

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

分发根证书

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

分发扩展名处理:

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

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


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

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


原理

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

https://i-blog.csdnimg.cn/direct/e900902b975840ad9c4c4a172006f321.png" alt="在这里插入图片描述" />

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

https://i-blog.csdnimg.cn/direct/698caeabd0ab401d9661e01c152989ee.png" alt="在这里插入图片描述" />

在 Linux 上安装根证书

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

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

Centos:

cp ca.crt /etc/pki/ca-trust/source/anchors;update-ca-trust

Ubuntu:

sudo cp ca.crt /usr/local/share/ca-certificates;sudo update-ca-certificates

Alpine:

cp ca.crt /usr/local/share/ca-certificates;sudo update-ca-certificates

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

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

编译和使用使用示例:

# 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证书的自定义参数同理
#(略)

如下图所示:

https://i-blog.csdnimg.cn/direct/de09c606fc5441a4933fe9a7f2142383.png" alt="在这里插入图片描述" />

关于docker容器

docker 容器运行使用自己的简单文件系统,默认共享在服务器上安装过的CA证书。有关如何在docker容器中安装CA根证书,详见官方文档:https://docs.docker.com/engine/network/ca-certs/#add-certificates-to-images


(END)


http://www.ppmy.cn/server/151048.html

相关文章

【数据结构——查找】二分查找(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:实现二分查找的算法。 相关知识 为了完成本关任务,你需要掌握:1.根据键盘输入的一组有序数据建立顺序表,2.顺序表的输…

海康威视监控web实时预览解决方案

海康威视摄像头都试rtsp流,web页面无法加载播放,所以就得转换成web页面可以播放的hls、rtmp等数据流来播放。 一:萤石云 使用萤石云平台,把rtsp转化成ezopen协议,然后使用组件UIKit 最佳实践 萤石开放平台API文档 …

自动驾驶系统研发系列—智能驾驶新高度:解析ESS驾驶员转向辅助系统

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中一起航行,共同成长,探索技术的无限可能。 🚀 探索专栏:学…

【AI知识】有监督学习分类任务之支持向量机

1.支持向量机概念 支持向量机(Support Vector Machine, SVM) 是一种有监督学习算法,主要用于分类任务(也可用于回归任务,即支持向量回归,SVR)。SVM的核心思想是找到一个最优的超平面&#xff0…

Redis Cluster 分片机制

Redis 集群是 Redis 提供的一种分布式实现,用于水平扩展数据存储能力。通过 Redis 集群,可以将数据分片存储在多个 Redis 节点上,同时提供高可用性和故障转移功能。 分片(Sharding): Redis 集群将数据划分…

leetcode---mysql

619. 只出现一次的最大数字 - 力扣(LeetCode) MyNumbers 表: ------------------- | Column Name | Type | ------------------- | num | int | ------------------- 该表可能包含重复项(换句话说,在SQL中&…

外卖开发(八)—— SpringTask(定时任务) 和 WebSocket网络协议

外卖开发(八)—— SpringTask 和 WebSocket 一、利用SpringTask完成定时任务1、cron表达式2、springtask实现 二、使用webSocket实现接单、催单提醒1、代码分析2、催单提醒 一、利用SpringTask完成定时任务 Spring Task是Spring框架提供的任务调度工具&…

Scala——泛型

背景:你是一个程序员,老板让你写一个函数,用来获取列表中的中间元素 定义函数的格式: def 函数名字(参数1:类型1):返回值的类型{} package test40 //泛型 //List(1,2,3…