使用mkcert签发本地自签名证书教程

Kevin2li大约 4 分钟Box

简介

mkcert可以在本地生成自签名证书,这些证书可以被本地信任,并且可以用于本地开发、测试和调试HTTPS应用程序,避免了使用公共CA证书的安全性和费用问题。

mkcert的主要特点包括:

  • 本地信任:mkcert生成的证书可以被本地信任,避免了使用公共CA证书的安全性和费用问题。

  • 自签名证书:mkcert可以在本地生成自签名证书,可以用于本地开发、测试和调试HTTPS应用程序。

  • 多平台支持:mkcert可以运行在多种操作系统上,如Windows、macOS、Linux等,可以满足不同平台和环境的需求。

  • 简单易用:mkcert使用简单,只需要几个命令即可生成证书,并且可以与常见的Web服务器集成,如Apache、Nginx等。

  • 安全性:mkcert生成的证书采用了最新的加密算法和安全标准,保证了生成的证书的安全性和可靠性。

  • 免费开源:mkcert是一款开源的工具,可以免费使用和分发,没有任何使用限制和费用。

总之,mkcert是一款功能强大的本地信任SSL/TLS证书生成工具,可以帮助用户生成本地信任的SSL/TLS证书,避免了使用公共CA证书的安全性和费用问题,具有简单易用、安全可靠、免费开源等特点,是现代Web开发中不可或缺的工具之一。

Github: https://github.com/FiloSottile/mkcertopen in new window

安装

下载二进制: https://github.com/FiloSottile/mkcert/releasesopen in new window

注: 该工具是个命令行工具,没有图形界面,需要在终端中使用。

使用

参数说明

安装根证书

.\mkcert-v1.4.4-windows-amd64.exe -install

命令执行后会出现弹窗:

选择“是”,即可安装证书到系统。

验证:

Win+R打开运行窗口,输入certmgr.msc回车打开证书管理器。

可以看到,根证书被安装到本地计算机的"受信任的根证书颁发机构"存储库中。

签发证书

mkcert支持生成下面类型的证书:

app-local.kevin2li.top为例,可以通过下面命令签发:

.\mkcert-v1.4.4-windows-amd64.exe app-local.kevin2li.top

可以看到,它会在当前目录下生成pem格式的证书文件和密钥文件。

此外,它还可以一次签发多个域名证书以及泛域名证书。

分发根证书

为了让局域网内其他设备能够使用,我们需要将根证书分发到局域网其他机器上,可以通过下面命令查看根证书路径:

.\mkcert-v1.4.4-windows-amd64.exe -CAROOT

rootCA.pem复制并重命名为rootCA.crt,这样windows设备直接双击就可以安装了。

在选择证书存储路径时,要选择“受信任的根证书颁发机构”

使用自签证书

前面我们签发了一个app-local.kevin2li.top的证书,下面来使用它。

先准备一段python代码。

# ~/mkcert/main.py
import http.server
import ssl

# 配置服务器参数
HOST = 'app-local.kevin2li.top'
PORT = 443
CERTFILE = './app-local.kevin2li.top.pem'  # SSL证书文件路径
KEYFILE = './app-local.kevin2li.top-key.pem'   # SSL证书私钥文件路径

# 创建HTTP服务器
handler = http.server.SimpleHTTPRequestHandler
httpd = http.server.HTTPServer((HOST, PORT), handler)

# 添加SSL支持
httpd.socket = ssl.wrap_socket(httpd.socket, certfile=CERTFILE, keyfile=KEYFILE, server_side=True)

# 启动服务器
print(f'Starting HTTPS server on https://{HOST}:{PORT}')
httpd.serve_forever()

运行python main.py

域名解析:

由于是在内网环境下,没有公共DNS解析,也没有设置内网DNS解析服务器,简单起见,我们通过修改hosts文件来将域名映射到ip。

hosts文件路径:

  • Windows系统:C:\Windows\System32\drivers\etc\hosts
  • macOS系统:/private/etc/hosts
  • Linux系统:/etc/hosts

hosts文件最后添加下面内容,将域名映射到本机地址或内网地址(二选一):

# 127.0.0.1 app-local.kevin2li.top
192.168.1.104 app-local.kevin2li.top

本机浏览器访问:

可以看到实现了内网的https访问。

点击浏览器的地址栏旁边的小锁图标,在“连接安全”里可以看到具体的证书信息。

局域网其他设备访问:

通过导入根证书,并修改hosts文件将域名指向内网服务器ip,也可以达到一样的效果。

参考

  1. 云创源码 | 利用mkcert快速一键自签名局域网SSL证书本地 https 实现open in new window