Windowsで簡単にオレオレ証明書を作れるmkcertを使ってみた

当初はWindowsでは使えなかったためか、Windows環境でmkcertを使うための日本語情報が見当たらなかった。

本日(2019/1/8)リリースされたv1.2.0で、出力されるファイル名を変更できるようになったので、その方法も合わせてメモ。

github.com

環境

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)}... で証明書を作成できる。

複数のドメイン名、およびIPアドレスを指定可能。

公開鍵は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 ExplorerMicrosoft EdgeChromium系ブラウザではmkcertで作成した証明書が有効となるが、Firefoxには別途CA証明書のインストールが必要。

mkcert -install すると、「Note: Firefox support is not available on your platform.」が表示される。

また、README.mdにも記載があるが、あくまで開発用のため、エンドユーザーにCA証明書をインストールさせたりは厳禁。

感想

従来はsubjectAltNameを設定ファイルに出力し、証明書署名要求を作成、それをオレオレルート認証局で書名、といった運用をしていたため、mkcertを使うことで簡略化できそう。

公開鍵がRSA 2048bitなのも、自端末での使用が前提なら問題ないかと思う。