ひとり認証局したい(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 Keychains → System Roots → Certificates)
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
証明書の秘密鍵が漏洩したり、証明書の有効期限が切れてしまった場合は、 いったんファイルを削除し、新しく生成する必要があります。