如何快速创建自签名 SSL 证书 -- [mkcert]

    我们平时在本地开发时,有时会要求通过 HTTPS 请求来访问。一个通用的做法是用 OpenSSL 生成自签证书,然后对 Web 服务进行配置。但 OpenSSL 的命令比较繁琐,参数也比较复杂,用起来不够方便。于是我找到了一个替代方案:mkcert,和大家分享下。

项目介绍

    mkcert 是一个用于生成本地自签名 SSL 证书的开源工具,项目基于 Golang 开发,可跨平台使用,不需要配置,支持多域名以及自动信任 CA

准备工作

我准备模拟一个局域网内访问 Web 服务的场景,因此开始前需要:

    服务器:用于提供 Web 服务,安装 nginx 并开启 SSL,系统为 CentOS 7.8PC 端:一台 Win10 电脑,用于测试访问,与服务器处于同一局域网。

下载安装

首先,根据自己的系统,下载最新的二进制文件,这里我下载的版本为 v1.4.3:

[root@localhost ~]# wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64

为二进制文件添加可执行权限,并移动到 $PATH 中:

[root@localhost ~]# chmod +x mkcert
[root@localhost ~]# mv mkcert /usr/local/bin/

检查 mkcert 的版本:

[root@localhost ~]# mkcert -version
v1.4.3

如果版本显示正常,说明安装无误。接下来,我们看看 mkcert 是如何创建证书的。

使用说明

mkcert 生成证书的命令很简单,格式如下:

mkcert domain1 [domain2 [...]]

多个域名/IP用空格分隔,一个自签名的证书可以这样创建:

[root@localhost ~]# mkcert 192.168.128.134 example.com localhost 127.0.0.1 ::1
Note: the local CA is not installed in the system trust store.
Note: the local CA is not installed in the Firefox and/or Chrome/Chromium trust store.
Run "mkcert -install" for certificates to be trusted automatically 

Created a new certificate valid for the following names
 - "192.168.128.134"
 - "example.com"
 - "localhost"
 - "127.0.0.1"
 - "::1"

The certificate is at "./192.168.128.134+4.pem" and the key at "./192.168.128.134+4-key.pem"

It will expire on 7 September 2023

在这个证书中,192.168.128.134 是服务器的内网地址。命令执行后会生成两个文件:192.168.128.134+4-key.pem 和 192.168.128.134+4.pem,前者是私钥,后者是证书。

由于服务器上已经装了 nginx,也配置了 SSL,所以在命令中可以加入 -cert-file 和 -key-file 参数,将文件直接生成到对应的目录里:

[root@localhost ~]# mkcert -cert-file /etc/nginx/ssl/server.crt -key-file /etc/nginx/ssl/server.key 192.168.128.134 example.com localhost 127.0.0.1 ::1

启动 nginx 服务,然后从 PC 端访问 192.168.128.134 查看效果:
可以看到,浏览器访问到了页面,但连接是不安全的。而我们在本地开发时,可能会对连接的安全性有要求,那有没有办法建立安全的连接呢?

重点操作

正如介绍所言,mkcert 支持自动信任 CA,所以只要安装好 CA 证书就能解决这个问题。

回到服务器,执行以下命令将 mkcert 的认证机构安装到服务器上:

[root@localhost ~]# mkcert -install

CA 证书的位置可以通过以下命令查看:

[root@localhost ~]# mkcert -CAROOT
/root/.local/share/mkcert

该目录中有两个文件:rootCA-key.pem 和 rootCA.pem。将 rootCA.pem 复制到 PC 上,并将其后缀改为 .crt。
双击 rootCA.crt,根据提示安装证书,步骤如下:

重启浏览器再次访问,可以看到连接已经变为安全:
写在最后

在这篇文章中,我们通过 mkcert 创建了自签名的 SSL 证书,并建立了安全的访问连接。与 OpenSSL 相比,mkcert 的使用更加简单,简化了在内网搭建 HTTPS 环境的复杂性。

本作品采用《CC 协议》,转载必须注明作者和本文链接
最美的不是下雨天,而是和你一起躲过的屋檐!
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!