在 Ubuntu 20.04 上使用 mkcert 创建本地信任的 SSL 证书

在本教程中,您将学习如何创建 本地受信任的 SSL 证书 在 Ubuntu 20.04 上使用 mkcert。 证书 是一个 简单的零配置工具,用于制作本地受信任的开发证书。 它 自动在系统根存储中创建并安装本地 CA,并生成本地信任的证书。

使用来自真实证书颁发机构 (CA) 的证书进行开发可能是危险的或不可能的(对于像 localhost 或者 127.0.0.1),但自签名证书会导致信任错误。 管理您自己的 CA 是最好的解决方案,但通常涉及神秘的命令、专业知识和手动步骤,但不再需要 mkcert 实用程序的可用性。

在 Ubuntu 20.04 上使用 mkcert 创建本地信任的 SSL 证书

在 Ubuntu 20.04 上安装 Certutil

作为先决条件,您需要安装 证书实用程序, 一个命令行实用程序,可以在安装 mkcert 实用程序之前创建和修改证书和密钥数据库。

sudo apt install libnss3-tools -y

在 Ubuntu 20.04 上安装 mkcert

certutil 安装完成后,从 Github 发布页面下载当前版本的 mkcert 预构建二进制文件。

在撰写本文时,mkcert 的当前版本是 v1.4.3

所以下载当前版本并安装它,如下所示

wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64
sudo cp mkcert-v1.4.3-linux-amd64 /usr/local/bin/mkcert
sudo chmod +x /usr/local/bin/mkcert

在 Ubuntu 20.04 上生成本地 CA

现在安装了 mkcert 实用程序,运行以下命令在 Ubuntu 20.04 上生成和安装本地 CA。

mkcert -install

示例命令输出;

The local CA is now installed in the system trust store! ⚡️ The local CA is now installed in the Firefox and/or Chrome/Chromium trust store (requires browser restart)! ?

该命令创建一个根 CA 并存储在 ~/.local/share/mkcert.

您可以通过运行以下命令找到根 CA 路径。

mkcert -CAROOT
/home/koromicha/.local/share/mkcert

列出目录内容;

ls -1 ~/.local/share/mkcert
rootCA-key.pem rootCA.pem

在 Ubuntu 20.04 上使用 mkcert 创建本地信任的 SSL 证书

现在您拥有本地 CA,运行以下命令以使用 mkcert 命令生成本地 SSL 证书。

mkcert kifarunix-demo.com '*.kifarunix-demo.com' localhost 127.0.0.1 ::1
Sample command output;
Created a new certificate valid for the following names ?  - "kifarunix-demo.com"  - "*.kifarunix-demo.com"  - "localhost"  - "127.0.0.1"  - "::1"  Reminder: X.509 wildcards only go one level deep, so this won't match a.b.kifarunix-demo.com ℹ️  The certificate is at "./kifarunix-demo.com+4.pem" and the key at "./kifarunix-demo.com+4-key.pem" ✅  It will expire on 31 August 2023 ?

您在当前工作目录中有证书和密钥;

ls -1 ./kifarunix-demo.com+*
 ./kifarunix-demo.com+4-key.pem  ./kifarunix-demo.com+4.pem

使用证书启用 Web 服务器 HTTPS

证书现已安装,是时候让您的网络服务器将它们用于 HTTPS 连接了。

配置 Apache 要使用这些证书,请编辑默认的 ssl 配置文件, /etc/apache2/sites-available/default-ssl.conf 并将 SSL 证书和密钥文件更改为指向上面本地生成的证书和密钥文件。

请参阅下面的示例。 请注意,证书位于我的主目录中。

请务必相应地替换路径。

sudo sed -i 's#/etc/ssl/certs/ssl-cert-snakeoil.pem#/home/koromicha/kifarunix-demo.com+4.pem#; s#/etc/ssl/private/ssl-cert-snakeoil.key#/home/koromicha/kifarunix-demo.com+4-key.pem#' /etc/apache2/sites-available/default-ssl.conf

验证这一点;

grep -E "SSLCertificateFile|SSLCertificateKeyFile" /etc/apache2/sites-available/default-ssl.conf
		#   SSLCertificateFile directive is needed. 		SSLCertificateFile	/home/koromicha/kifarunix-demo.com+4.pem 		SSLCertificateKeyFile /home/koromicha/kifarunix-demo.com+4-key.pem 		#   the referenced file can be the same as SSLCertificateFile

使能够 Apache 通过加载 ssl 模块来使用 SSL;

sudo a2enmod ssl
sudo a2ensite default-ssl.conf

重新加载并重新启动 Apache 激活新配置

sudo systemctl restart apache2

验证使用 mkcert 生成的本地 SSL 证书

导航到浏览器并尝试访问您的域。

我正在为我的 DNS 条目使用本地主机文件。

为 Nginx Web 服务器启用证书

创建您的网页配置,如下所示。

相应地替换证书和密钥的路径

vim /etc/nginx/sites-available/example.com
server { listen 80; listen 443 ssl;  ssl on; ssl_certificate /home/koromicha/kifarunix-demo.com+4.pem;  ssl_certificate_key /home/koromicha/kifarunix-demo.com+4-key.pem;  server_name example.com; location / { root /var/www/html/example; index index.html; } }

验证配置没有错误。

nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

重启 Nginx

systemctl restart nginx

导航到浏览器并测试您的域的 ssl。

好吧,似乎到目前为止一切都很好。

我们关于如何在 Ubuntu 20.04 上使用 mkcert 创建本地可信 SSL 证书的指南到此结束。

更多的 mkcert 使用信息。

mkcert --help

在 CentOS 8 上使用 SSL/TLS 证书配置 Nginx

使用 Prometheus 和 Grafana 监控 SSL/TLS 证书到期

配置 Apache 在 CentOS 8 上使用 SSL/TLS 证书

配置 Filebeat-Logstash SSL/TLS 连接的简单方法