ひとり認証局したい(mkcert

1mkcert example.org

mkcertは、 ローカル開発環境でHTTPSできるようにするツールです。

ローカルPCに専用の**ローカル認証局(LocalCA)**を自動生成し、 その認証局をブラウザに信頼済みとして登録することで、ローカル環境でも本番と同じようにHTTPSを使うことができます。s

これまでは、SSL自己署名証明書(通称「おれおれ証明書」)を作成・管理するのが一般的でしたが、mkcertのおかげで、より簡便にローカル認証局できます。

注釈

ローカル認証局は、あくまで自分のPC専用の認証局です。 外部公開したり、本番環境で利用したりすることはできません。

インストールしたい(mkcert

$ brew install mkcert
$ mkcert --version
v1.4.4

mkcertはHomebrewでインストールできます。

証明書を生成したい

$ mkcert localhost
# Created a new certificate valid for 1 year.
# cert.pem: the certificate
# key.pem: the private key

mkcert localhostで単一ドメインのローカル証明書を作成できます。 localhost.pem(証明書)と localhost-key.pem(秘密鍵)が生成されます。

注釈

証明書や秘密鍵の拡張子として .pem.crt/.cert.keyが利用されます。

mkcertのデフォルトの出力形式は、証明書も秘密鍵も.pemに統一されています。 実際の運用では、一般的に 証明書には.crt(もしくは.cert)、 秘密鍵には.keyが使用されます。

どれもPEM形式のテキストファイルです。 あとからお互いにリネームしても大丈夫です。

特定のディレクトリに証明書を生成したい

$ mkcert -cert-file ./certs/server.pem -key-file ./certs/server.key localhost.example.com

-cert-file 証明書.pem-key-file 秘密鍵.pemで 任意のパスを指定できます。

証明書の有効期限を確認したい

1$ openssl x509 -in localhost.pem -text -noout | grep -A 2 "Validity"

証明書の有効期限を確認するには opensslを使います。

ローカル認証局したい

$ mkcert -CAROOT
~/.local/share/mkcert

mkcert -CAROOTで現在の認証局のパスを確認できます。

1$ export CAROOT="/custom/path"
2$ mkcert -install

環境変数CAROOTで、認証局のパスを変更できます。

$ mkcert -install

mkcert -installで、システムのトラストストアにローカル認証局を登録できます。 登録後、このCAで署名した証明書はブラウザで警告なく表示されます。

$ open /Applications/Utilities/Keychain\ Access.app

macOSのKeychain Access.appで登録内容を確認できます。 (System KeychainsSystem RootsCertificates

1$ mkcert -uninstall

mkcert -installでシステムのトラストストアから認証局を削除できます。 証明書は再度作成する必要があります。

複数のドメインの証明書を作成したい

$ mkcert localhost 127.0.0.1 ::1 example.local
# Created a new certificate valid for localhost, 127.0.0.1, ::1, example.local

複数のドメイン・IPアドレスを同時に指定できます。

$ mkcert "*.example.com" example.com

ワイルドカードも対応しています。

Nginxでローカル証明書したい

server {
    listen 443 ssl;
    server_name localhost;

    ssl_certificate /path/to/localhost.pem;
    ssl_certificate_key /path/to/localhost-key.pem;
}

Nginxでは ssl_certificateに証明書(localhost.pem)、 ssl_certificate_keyに秘密鍵(localhost-key.pem)の パスを指定してください。

Apacheで証明書したい

1<VirtualHost *:443>
2    ServerName localhost
3
4    SSLEngine on
5    SSLCertificateFile /path/to/localhost.pem
6    SSLCertificateKeyFile /path/to/localhost-key.pem
7</VirtualHost>

Apache(httpd)では、 SSLEngine onでSSL証明書を有効にし、 SSLCertificateFileに証明書(localhost.pem)、 SSLCertificateKeyFileに秘密鍵(localhost-key.pem)の パスを指定してください。

コンテナーで証明書を使いたい

services:
  wordpress:
    image: bitnami/wordpress:latest
    volumes:
      - wordpress_data:/bitnami/wordpress
      - ./certs:/bitnami/apache/conf/bitnami/certs:ro

mkcertで生成した証明書をDockerコンテナーにマウントして使用できます。 上記はbitnami/wordpressイメージを使ってカスタム証明書をマウントしています。

1# 証明書を生成
2$ mkcert -cert-file ./certs/server.crt -key-file ./certs/server.key localhost

上記で生成した証明書ファイルを./certs/ディレクトリに配置してください。

注釈

Bitnamiのイメージ(bitnami/wordpress)はSSL/TLS対応が簡単です。 WordPressの公式イメージ(wordpress)ではApache設定ファイルの編集が必要です。

証明書を再発行したい

$ rm localhost.pem localhost-key.pem
$ mkcert localhost

証明書の秘密鍵が漏洩したり、証明書の有効期限が切れてしまった場合は、 いったんファイルを削除し、新しく生成する必要があります。

リファレンス