概要
- HTTPSプロトコルのWebサーバー等を立てるためには、SSLサーバー証明書が必要です。
- 3か月有効期間のSSLサーバー証明書を無料で発行してくれる、Let's Encryptのような機関は存在しますので、そちらをお使いいただくのが一般的ですが、
- ubuntu22.04には、お気軽に自己署名証明書を作成するパッケージ、mkcert が存在します。
- 今回は、mkcertの使い方の簡単な説明をしてみたいとおもいます。
前提
- ubuntu22.04 はインストール済であると仮定します。(WSL2でもおそらく可能なはず)
手順
- まず、mkcertパッケージを導入してください
$ sudo apt install mkcert
- 次に、ローカルのルート証明書を作成します。
$ mkcert -install
- 生成される場所は各ユーザーのホームディレクトリ内になります。
~/.local/share/mkcert/rootCA.pem ・・・ローカルのルート証明書
~/.local/share/mkcert/rootCA-key.pem ・・・秘密鍵
- 出来上がった rootCA.pem をWindows上にコピーしたのち、拡張子 .crt を追加します。
rootCA.pem.crt
- これをWindowsでダブルクリックして、
-- 「証明書のインストール」--> 「現在のユーザー」 --> 「証明書を次のストアに配置する」--> 「信頼されたルート証明機関」
-- インストールを実行します。
ここまでの操作で、ルート証明書作成と、Windowsへのインストールは完了です。
SSLサーバー証明書
次は、Webサイトごとの SSLサーバー証明書を作成します。(複数作成可能)
- 再びLinux環境にて、
$ mkcert www.example.com
www.example.com.pem ・・・SSLサーバー証明書
www.example.com-key.pem ・・・秘密鍵
- 「www.example.com」のところは、実際の設置予定のWebサーバーのURL(ドメイン名)を記述します。
- 上記 SSLサーバー証明書と秘密鍵をWebサーバー上の
/etc/ssl/certs/www.example.com.pem
/etc/ssl/private/www.example.com-key.pem
のように配置して、Apache等のSSL証明書ファイルとして指定してください。
補足情報
-
この方法で作成した SSLサーバー証明書 の有効期間は27か月です。(約2年3か月)
-
自己署名したローカル・ルート証明書は有効期限10年で作成されているようですので、2年3か月後はWebサイトごとの SSLサーバー証明書を再作成してWebサーバー側に設置するだけで継続できるようです。
-
Android端末にも導入可能です。
-
以前(10年ぐらい前?)は、opensslコマンドを使用して、自己署名SSL証明書の有効期間10年が使えていたのですが、現在は主要なブラウザが3年以上の有効期間の証明書を無効にする扱いになっているようです。(そして、さらに短くされるという話もあります)
-
ローカルLAN内にHTTPSサーバーを設置する場合、Let's Encryptでは外部からのIPアドレスのバリデーションが不可能なので、自己署名証明書を使う用途はあると思います。(※1)
-
また、非公開サーバーでテストする場合も、テスト端末だけにルート証明書を入れてLet's Encryptを使わない、というのもありなのかな、と。(まあ事情によりますが)
-
;
-
(※1) 一応裏技があって、3か月ごとの更新時のみ、ローカルサーバーをグローバルIP(ルーターからstaticルートを設定して引き込む)にして、外部からアクセス可能にしてLetsの更新を掛ける手とか、DNSのTXTレコードでLetsの認証を掛ける方法とか・・・(色々面倒ですけど)