如何使用mkcert在Linux和macOS上创建本地信任的SSL证书
我们是否厌倦了在本地开发项目上使用不受信任的SSL证书?我知道维护自己的证书颁发机构(CA)令人难以忍受,其中包括神秘的程序和命令。在本指南中,Ill向我们展示了一种简单的方法,无需CA就可以在本地开发计算机上使用受信任的SSL证书。
mkcert是由Filippo Valsorda在Go中编写的一个简单的零配置工具,用于使用任何我们想要的名称进行本地信任的开发证书,而无需进行任何配置。这将为我们提供帮助,因为不可能从可信证书颁发机构获取没有有效DNS记录的本地名称的证书。因此,让我们开始安装和使用mkcert。
如何在Ubuntu/Debian上安装mkcert
要在任何Ubuntu或者Debian系统上安装mkcert,首先,安装certutil
依赖项:
sudo apt-get update sudo apt install wget libnss3-tools
安装完成后,从Github下载mkcert二进制软件包。 Checkmkcert发行页面提供最新版本。撰写本文时,最新版本是v1.3.0。
export VER="v1.3.0" wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/${VER}/mkcert-${VER}-linux-amd64
下载文件后,使文件可执行,并将二进制文件放在/usr/loa/bin
下。
chmod +x mkcert sudo mv mkcert /usr/local/bin
如何在CentOS/Fedora上安装mkcert
在CentOS和Fedora上安装mkcert与Ubuntu/Debian安装类似。我们只需要首先安装nss-tools
工具。
sudo yum install nss-tools
安装完成后,像下载Ubuntu一样下载二进制软件包。
export VER="v1.3.0" wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/${VER}/mkcert-${VER}-linux-amd64
下载文件后,使文件可执行,并将二进制文件放在/usr/loa/bin
下。
chmod +x mkcert sudo mv mkcert /usr/local/bin
如何在Arch Linux上安装mkcert
对于Arch Linux,我们可以按照上述步骤或者使用AUR安装mkcert。对于安装,我们需要使用AUR帮助程序,我建议为此:是Arch Linux/Manjaro的最佳AUR帮助程序。
安装yay之后,请使用以下命令从其中安装mkcert:
yay -S --noconfirm --needed go yay -S --noconfirm --needed mkcert
如何在macOS上安装mkcert
对于macOS用户,我们可以下载二进制软件包或者从以下位置安装mkcert。
brew install mkcert brew install nss # if you use Firefox
对于二进制安装:
export VER="v1.3.0" wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/${VER}/mkcert-${VER}-darwin-amd64
下载完文件后,使文件可执行,并将二进制文件放在/usr/local/bin下。
chmod +x mkcert sudo mv mkcert /usr/local/bin
如何使用mkcert生成本地信任的SSL证书
mkcert支持以下根存储:macOS系统存储Windows系统存储Linux变体,它们提供update-ca-trust(Fedora,RHEL,CentOS)或者update-ca-certificates(Ubuntu,Debian)Firefox(macOS和Linux)仅限Chrome和ChromiumJava(设置了JAVA_HOME时)
要获取mkcert的帮助页面,请传递选项--help。
Usage of mkcert: $mkcert -install Install the local CA in the system trust store. $mkcert example.org Generate "example.org.pem" and "example.org-key.pem". $mkcert example.com myapp.dev localhost 127.0.0.1 ::1 Generate "example.com+4.pem" and "example.com+4-key.pem". $mkcert '*.example.com' Generate "_wildcard.example.com.pem" and "_wildcard.example.com-key.pem". $mkcert -pkcs12 example.com Generate "example.com.p12" instead of a PEM file. $mkcert -uninstall Uninstall the local CA (but do not delete it). Change the CA certificate and key storage location by setting $CAROOT, print it with "mkcert -CAROOT".
我们可以使用以下方法获取CA根目录:
$mkcert -CAROOT /home/jmutai/.local/share/mkcert
我们需要首先在系统信任库中安装本地CA。
# mkcert -install Created a new local CA at "/home/jmutai/.local/share/mkcert" ? The local CA is now installed in the system trust store! ⚡️
完成后,我们可以开始为域生成SSL证书。例如,我将生成一个对以下名称有效的新证书:
- "mydomain.com" - "*.mydomain.co" - "myapp.net" - "localhost" - "127.0.0.1" - "::1"
输出将如下所示:
# mkcert mydomain.com '*.mydomain.co' myapp.net localhost 127.0.0.1 ::1 Using the local CA at "/root/.local/share/mkcert" ✨ Created a new certificate valid for the following names ? - "mydomain.com" - "*.mydomain.co" - "myapp.net" - "localhost" - "127.0.0.1" - "::1" The certificate is at "./mydomain.com+5.pem" and the key at "./mydomain.com+5-key.pem" ✅
我们应该能够查看证书的内容:
# cat ./mydomain.com+5.pem -----BEGIN CERTIFICATE----- MIIEVDCCArygAwIBAgIRAL2vyvexRiXjWMWF688t9RswDQYJKoZIhvcNAQELBQAw WTEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMRcwFQYDVQQLDA5yb290 QHVidW50dS0wMTEeMBwGA1UEAwwVbWtjZXJ0IHJvb3RAdWJ1bnR1LTAxMB4XDTE4 MDgxNTA2MjIzMFoXDTI4MDgxNTA2MjIzMFowQjEnMCUGA1UEChMebWtjZXJ0IGRl dmVsb3BtZW50IGNlcnRpZmljYXRlMRcwFQYDVQQLDA5yb290QHVidW50dS0wMTCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMg6ByQe5vjX65HYoOe/QyRo yotQOvBX8k8RJxQSXmTYsTGeYjTtlfLlubJ/AmGovzfPK6CmSWkTK6czENsR2DBH mAHyyu1PdeJihnBZSNAlkEIGNPZvxqKlNZvqe1gxMntHG569YKBl52EaiMiDu3D0 yk+dvIHuCtvGseFUxRwnc4gq4B6yhyGR6y1dmL7eZkrIAgMHxdktavThscvJ3N7A N4dY7iackLiajqjRzT6/iVR0NRRbqxDlgsfrq6MGkAnri56LuZBZmyF85c+kpvuN bHEAAUvxziHORX0+NmBedcajr16rYV4+/IJXbY2llLkprRG2Ar8CqrblH2uBX+8C AwEAAaOBrTCBqjAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEw DAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBRLV1qAcMY0/atqn4AS3sWCOoo4OTBU BgNVHREETTBLggxteWRvbWFpbi5jb22CDSoubXlkb21haW4uY2+CCW15YXBwLm5l dIIJbG9jYWxob3N0hwR/AAABhxAAAAAAAAAAAAAAAAAAAAABMA0GCSqGSIb3DQEB CwUAA4IBgQBaQcM7oe4TNQfdwvkZk0rTK1aoXteBF7JqxdhFqL1wWNAO+HTsRuzO My19o3mL+9SVjuv1NCEUCVGXQ5FK+HFdBdWm1cAKzHM/j6pwo0k60K9kIfyQZfsh GjDDtrE+86T16JwWTozFyyZHDAhskQuudwha4pZWgrwZudAdqaAOQW59+8s3gYaj Wd10hiptLbAnhd3DKPgnhjgpIT6zvtJ7gvm8fXVwOyoPfbIm3kl94rIa0BVrhmeA ma227ehRK0iUwA1oclZ4dbRfcjNgL79ryVgffOgTD1O3mWzwvGenD7/oG9FZQ2fK WPdh4gdV+f5fZ+GiLA2KPIShrReFlt70pUJDkDHT0AEuSiFZQ5vVc3KV/3k3HUTJ tmkiePMoMGB/kEVyo1is3NDUBkofMTYSFjVdSgZ9rrefoUe/tfqBeh5IV+ZRUv3p kSsXe0sBnqtSa5ExQ+Uv2X6/jEBBEAoYN6GmL+poV06Ra6/nnXPnaRLkQ/8CT8sp xKtvdnyDa6Y= -----END CERTIFICATE----
私钥是:
~/.mydomain.com+5-key.pem
测试mkcert证书
现在让我们使用简单的Nginx配置文件来测试证书。原谅我这个例子是在Ubuntu 18.04系统上完成的。
sudo apt-get install nginx
创建一个简单的网页
# cat /etc/nginx/conf.d/test.conf server { listen 80; server_name mydomain.com myapp.net; root /var/www/test; } server { listen *:443 ssl http2; root /var/www/test; server_name mydomain.com myapp.net; ssl_certificate /home/jmutai/mydomain.com+5.pem; ssl_certificate_key /home/jmutai/mydomain.com+5-key.pem; }
确保/etc/hosts
文件具有已使用域的记录。
127.0.0.1 myapp.net 127.0.0.1 mydomain.com
打开浏览器并使用提供的域,我们应该会看到一个绿色的条。