如何使用mkcert在Linux和macOS上创建本地信任的SSL证书

时间:2020-02-23 14:30:29  来源:igfitidea点击:

我们是否厌倦了在本地开发项目上使用不受信任的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

打开浏览器并使用提供的域,我们应该会看到一个绿色的条。