当初はWindowsでは使えなかったためか、Windows環境でmkcertを使うための日本語情報が見当たらなかった。
本日(2019/1/8)リリースされたv1.2.0で、出力されるファイル名を変更できるようになったので、その方法も合わせてメモ。
環境
Windows 10 Pro 64bit、mkcert v1.2.0で確認。
インストール方法
現在はChocolateyでインストール可能。 cinst -y mkcert
。
CA証明書の作成および証明書ストアへのインストール
管理者権限で mkcert -install
を実行。
生成されたCA証明書が、Windowsの証明書ストアにインストールされる。
環境変数「JAVA_HOME」を設定しておけば、Javaにもインストールされるようだが未確認。
公開鍵はRSA 3072bit、有効期限は10年間。
CA証明書保存ディレクトリの確認
mkcert -CAROOT
で確認可能。
デフォルトでは「%USERPROFILE%\AppData\Local\mkcert」が保存ディレクトリとなる。
ディレクトリ配下にはCA証明書の「rootCA.pem」、および秘密鍵の「rootCA-key.pem」が保存されている。
また、環境変数「CAROOT」に任意のディレクトリを設定することで変更可能な模様(未確認)。
使い方
mkcert -help
で各種コマンドが確認できる。
証明書の作成
mkcert ${ドメイン名(ワイルドカード可) or IPアドレス(v4 or v6)}...
で証明書を作成できる。
公開鍵はRSA 2048bit、有効期限は10年間。
カレントディレクトリに証明書ファイル「${ファイル名}.pem」および秘密鍵ファイル「${ファイル名}-key.pem」が出力される。
ファイル名は以下のルールで生成される模様。
- ワイルドカード未使用のドメイン名、またはIPv4アドレスを指定した場合、指定文字列
mkcert myapp
の場合、「myapp」mkcert 127.0.0.1
の場合、「127.0.0.1」
- IPv6アドレスを指定した場合、「:」を「_」に変換した指定文字列
mkcert ::1
の場合、「__1」
- ワイルドカードを使用したドメイン名を指定した場合、「*」を「_wildcard」に変換した指定文字列
mkcert *.myapp
の場合、「_wildcard.myapp」
- 複数のドメイン名やIPアドレスを指定した場合、これまでの方式で変換した文字列に「+(指定した数 - 1)」が付与された文字列
mkcert myapp myapp.dev *.myapp *.myapp.dev
の場合、「myapp+3」
出力ファイルパス指定
v1.2.0より、出力ファイルパスをオプションで指定できるようになった。
mkcert -cert-file ${証明書ファイルパス} -key-file ${秘密鍵ファイルパス} ${ドメイン名 or IPアドレス}
で指定できる。
mkcert -cert-file myapp.crt -key-file myapp.key myapp myapp.dev *.myapp *.myapp.dev
を実行すると、カレントディレクトリに証明書ファイル「myapp.crt」および秘密鍵ファイル「myapp.key」が出力される。
PKCS #12形式ファイルの作成
mkcert -pkcs12 ${ドメイン名 or IPアドレス}...
でPKCS #12形式ファイルを作成できる。
ファイル名のルールは証明書と同様だが、拡張子が「.p12」となる。
パスワードは「changeit」で固定の模様。
また、v1.2.0より、 mkcert -pkcs12 -p12-file ${PKCS #12形式ファイルパス} ${ドメイン名 or IPアドレス}...
でファイルパス指定が可能。
別端末へのCA証明書インストール
「rootCA.pem」を別端末のCA証明書保存ディレクトリにコピーし、その端末上で mkcert -install
を実行すると、コピーしたCA証明書が証明書ストアにインストールされる。
コピー元の端末を、ルート認証局として使用したい場合などに使用できる。
ただし、コピー先の端末で証明書を作成しようとすると、「rootCA-key.pem」が存在しないためエラーとなる。
CA証明書のアンインストール
管理者権限で mkcert -uninstall
を実行。
証明書ストアからは削除されるが、「rootCA.pem」および「rootCA-key.pem」は削除されない。
注意点
v1.2.0時点では、Windowsの証明書ストアを使用するInternet ExplorerやMicrosoft Edge、Chromium系ブラウザではmkcertで作成した証明書が有効となるが、Firefoxには別途CA証明書のインストールが必要。
mkcert -install
すると、「Note: Firefox support is not available on your platform.」が表示される。
また、README.mdにも記載があるが、あくまで開発用のため、エンドユーザーにCA証明書をインストールさせたりは厳禁。
感想
従来はsubjectAltNameを設定ファイルに出力し、証明書署名要求を作成、それをオレオレルート認証局で書名、といった運用をしていたため、mkcertを使うことで簡略化できそう。
公開鍵がRSA 2048bitなのも、自端末での使用が前提なら問題ないかと思う。