mkcert: ローカル開発用の信頼されたSSL証明書を作成
もしローカルで開発用にHTTPSを設定しようとしたことがあるなら、おそらく複雑さの壁にぶつかったことでしょう。自己署名証明書を生成し、ブラウザに信頼させ、警告に対処するのは本当に面倒です。そんな時に役立つのがmkcertです。
mkcert は、開発者やシステム管理者が開発やテストのためにローカルで信頼された SSL 証明書を作成できるシンプルなツールで、煩わしいブラウザの警告をなくすことができます。そして、そうです、それは無料でオープンソースであり、Linux でも美しく動作します。
このガイドでは、mkcert とは何か、それがどのように機能するか、インストール方法、そして Linux 環境で効果的に使用する方法について説明します。
なぜローカルでHTTPSが必要なのか?
mkcertに入る前に、開発環境でHTTPSを使用したい理由を簡単に見てみましょう。
- 現代のウェブアプリにはHTTPSが必要です – 多くのAPI、サービスワーカー、クッキー、ブラウザ機能は安全な接続を必要とします。HTTPSがない場合、開発環境と本番環境でアプリの挙動が異なることがあります。
- 本番環境との一致 – 本番環境の設定で HTTPS を使用している場合(使用すべきですが)、開発中にも同じ条件で全てをテストするのが賢明です。
- ブラウザ互換性とテスト – Chrome、Firefox、および他のモダンブラウザは、安全でないオリジン(HTTP)に対してより厳しいセキュリティポリシーを適用します。
しかし、ここで問題があります:ブラウザは自己署名証明書を嫌い、証明書が信頼できる認証機関(CA)によって署名されていない限り、怖い警告を表示します。
mkcertとは何ですか?
mkcert は、ローカルで信頼される開発用証明書を作成するコマンドラインツールです。
これは次の方法で行われます:
- システム上で独自の認証局(CA)を作成すること
- このローカルCAをOSやブラウザで信頼させる
- このCAによって署名されたTLS証明書を生成するので、ブラウザがそれを信頼します
簡単に言うと、mkcert はあなたの個人的な 認証局 (CA) のように振る舞い、ブラウザはそれが生成する証明書を有効なものとして扱います。警告もなく、ブラウザのハックもなく、あなたのローカル開発のためにクリーンで信頼できる HTTPS を提供します。
Linuxにmkcertをインストールする
mkcertをインストールする前に、必要なシステムライブラリが利用可能であることを確認する必要があります。これらのライブラリは、mkcertがシステムの証明書ストアと統合するのを助け、特にFirefoxのサポート(NSSデータベースを使用)に役立ちます。
sudo apt install libnss3-tools -y #Debian-based
sudo dnf install nss-tools -y #RHEL-based
sudo zypper install mozilla-nss-tools #OpenSUSE
sudo pacman -S nss #Arch
次に、mkcert をインストールする主な方法は二つあります:Linuxディストリビューションのパッケージマネージャを使用する方法、またはバイナリを手動でダウンロードする方法です。自分の環境に合った方法を選んでください。
オプションA:パッケージマネージャーを通じてmkcertをインストールする
sudo apt install mkcert #Debian-based
sudo dnf install mkcert #RHEL-based
sudo zypper install mkcert #OpenSUSE
sudo pacman -S mkcert #Arch
オプションB:手動インストール(他のディストリビューション用)
もし mkcert があなたのディストリビューションのリポジトリにない場合、または最新のリリースを好む場合は、バイナリを手動でダウンロードしてインストールすることができます。
まず、最新の mkcert バイナリを GitHub からダウンロードします:
wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64
次に、それをシステムの PATH 内のディレクトリに移動し、実行可能にします:
sudo mv mkcert-v1.4.4-linux-amd64 /usr/local/bin/mkcert
sudo chmod +x /usr/local/bin/mkcert
最後に、バージョンを確認してインストールを検証します:
mkcert --version
バージョン番号が表示されれば、mkcertはあなたのLinuxマシンで使用する準備が整っています。
ローカル証明書機関を信頼する
mkcertをインストールしたら、次のステップはローカルの認証局(CA)を作成して信頼することです。これは一度だけの設定で、mkcertを使って生成するすべての証明書が自動的にシステムとブラウザに信頼されるようになります。
始めるには、端末で次のコマンドを実行してください:
mkcert -install
上記のコマンドは新しいローカルCAを生成し、それをホームディレクトリの~/.local/share/mkcertに保存します。その後、このCAをLinuxシステムの信頼できるストアに追加し、オペレーティングシステムがそれによって署名された任意の証明書を有効と認識するようにします。
もし libnss3-tools パッケージがインストールされている場合(Firefox を使用している場合はインストールされているはずです)、mkcert は Firefox の内部証明書データベースにも CA を追加します。これは、Firefox が開発用証明書を問題なく信頼することを意味します。
コマンドが完了すると、次のような出力が表示されます:
Created a new local CA at "/home/you/.local/share/mkcert"
The local CA is now installed in the system trust store!
あなたのシステムは現在、mkcertによって生成された任意のTLS/SSL証明書を信頼するように設定されており、自己署名証明書で通常発生するブラウザの警告を回避し、ローカル開発中の安全で信頼されたHTTPSの基盤を構築します。
mkcertでローカル証明書を作成する
ここからが楽しい部分です。実際に mkcert を使ってローカルのSSL証明書を生成します。例えば、ウェブアプリを開発していて、myapp.local で HTTPS 経由で提供したいとします。
次のコマンドを実行するだけで、そのドメインの証明書を生成できます:
mkcert myapp.local
実行されると、mkcert は現在のディレクトリに2つのファイルを生成します:証明書である myapp.local.pem と、秘密鍵である myapp.local-key.pem です。
これらのファイルは、Nginx、Apache、あるいはPythonのhttp.serverのような軽量の開発サーバーでも、SSLをサポートするように設定されていれば、直接ローカルのウェブサーバーで使用できます。
複数のドメイン、サブドメイン、あるいは localhost へのアクセスを含むより複雑な開発環境で作業している場合、mkcert を使用すると、単一のコマンドでそれらすべてをカバーする証明書を生成することができます。
例えば:
mkcert myapp.local "*.myapp.local" localhost 127.0.0.1 ::1
上記のコマンドは、myapp.local、api.myapp.localのような任意のサブドメイン、さらにlocalhostおよびそのIPアドレスの等価物であるIPv4の127.0.0.1やIPv6の::1に対して有効な証明書を生成します。
ローカルNginxサーバーでmkcertを使用する
mkcert を使用して、Nginx を使ってローカルウェブアプリを HTTPS で提供する実践的な例を見てみましょう。ローカル開発サーバーが http://localhost:3000 で実行されていて、https://myapp.local で安全にアクセスしたいとします。
まず、myapp.local ドメインをローカルマシンにマッピングする必要があります。お気に入りのテキストエディタで /etc/hosts ファイルを開きます。
sudo nano /etc/hosts
次の行を追加します。この行は、システムにmyapp.localをローカルのループバックインターフェースに解決するよう指示します。
127.0.0.1 myapp.local
次に、そのドメイン用の開発用証明書を mkcert を使用して生成します。これにより、現在のディレクトリに次の2つのファイルが作成されます:myapp.local.pem(証明書)と myapp.local-key.pem(秘密鍵)。
mkcert myapp.local
次に、Nginx の設定を開いて(通常は /etc/nginx/sites-available/ または /etc/nginx/conf.d/ にあります)、これらの証明書を使用するように Nginx を構成し、次のようにサーバーブロックを作成または更新します:
server {
listen 443 ssl;
server_name myapp.local;
ssl_certificate /path/to/myapp.local.pem;
ssl_certificate_key /path/to/myapp.local-key.pem;
location / {
proxy_pass http://localhost:3000;
}
}
必ず /path/to/ を、mkcert によって生成された証明書とキーのファイルの実際のパスに置き換えてください。
設定が完了したら、変更を適用するために Nginx を再読み込みするか再起動してください:
sudo systemctl restart nginx
ブラウザを開き、https://myapp.local にアクセスしてください。実際の本番環境と同様に、HTTPS で安全にアプリが動作しており、証明書の警告は表示されないはずです。
セキュリティに関する注意
セキュリティ注意: mkcert は厳密に開発およびテスト目的のためのものです。mkcert によって生成された証明書は、本番環境で使用してはいけません。このツールは、グローバルなシステムやブラウザから認識されないローカルの認証局(CA)を作成するためです。
さらに、このCAの秘密鍵はローカルマシン上に平文で保存されており、誤用されるとセキュリティ上のリスクがあります。本番環境での展開では、適切な検証とセキュリティコンプライアンスを確保するために、常に信頼できる認証局(例えば Let’s Encrypt)を使用してください。
mkcert をアンインストールしてローカル CA を削除する方法
もしシステムをクリーンアップする必要がある場合や、mkcert を完全に削除したい場合、手順は簡単です。まず、次のコマンドを実行してローカルにインストールされた認証局 (CA) を削除できます。
mkcert -uninstall
このコマンドは、システムの信頼ストアから mkcert によって生成されたルート CA を削除し、必要に応じて Firefox の NSS データベースからも削除します。これにより、mkcert によって署名された証明書は、ブラウザやローカルツールによっても信頼されなくなります。
もし mkcert を手動でインストールした場合(例えば、バイナリを直接ダウンロードした場合)、システムから実行ファイルも削除する必要があります。
sudo rm /usr/local/bin/mkcert
これはあなたのローカルマシンから mkcert バイナリを削除します。両方のコマンドを実行した後、mkcert とその CA はシステムから完全に削除され、残留する信頼設定は一切残りません。
結論
ローカル開発用にHTTPSを設定するのは、複雑である必要はありません。mkcertを使えば、開発者やシステム管理者は、ブラウザの警告なしで、またOpenSSLや複雑な証明書チェーンに悩まされることなく、ローカルで信頼された証明書を素早く確実に生成する方法を手に入れることができます。