今回は自己証明書を作ってローカル環境でHTTPS通信を行う方法をご紹介します。
ブラウザを使っているとHTTP通信だとcookieが保存されない場合もあります。
そういった動作確認に自己証明書は便利です。
動作環境
動作環境はWSL2を使います。WSL2はWindowsで使える仮想環境です。
OSはUbuntuを使用します。
従来のハイパーバイザー型の仮想マシンと違い完全に独立して動いてるわけではなくファイルシステムの相互アクセスやネットワークの共有、さらにはCPUやメモリなども共有されています。
必要なパッケージをダウンロード
証明書を作る際に必要なパッケージをダウンロードします。以下のコマンドを実行します
sudo apt update
sudo apt install openssl
OpenSSLは暗号化通信を設定するためのパッケージです。
証明書を作る手順
WSLのCLIで操作していきます。
証明書の情報を書き込む設定ファイルを作ります。以下のコマンドで設定ファイルを作成します。
sanはSubject Alternative Nameの略称です。
sudo nano san.cnf
san.cnfのテンプレートを作りました。コピペして使えます
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
x509_extensions = v3_req
prompt = no
[ req_distinguished_name ]
C = JP
ST = Tokyo
L = Shibuya
O = Localhost
OU = Dev
CN = example.com
[ req_ext ]
subjectAltName = @alt_names
[ v3_req ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = example.com
DNS.2 = *.example.com
[ alt_names ]
DNS.1 = example.com
DNS.2 = *.example.com
この部分は使いたいドメインを書く場所です。開発時に分かりやすい名前でいいと思います。
次に暗号化に使う秘密鍵を作ります。以下のコマンドを使います
openssl genpkey -algorithm RSA -out example.com.key -pkeyopt rsa_keygen_bits:2048
そうするとexample.com.keyという秘密鍵が生成されました。
開発時に使うドメインと同様の名前を使うと開発環境が増えたときもわかりやすいと思います。
次に証明書を作ります。先ほど作ったsan.cnfのテンプレートと秘密鍵を使って以下のコマンドを実行します。
openssl req -new -x509 -days 3650 -key example.com.key -out example.com.crt -config san.cnf
-outは出力するファイルです。example.com.crtが自己証明書です。
-daysは証明書の有効期限です。上記のコマンドでは作成した日から10年間は有効です。
これで自己証明書が作成できました。
自己証明書をインストールする
作成した証明書をインストールします。
- WindowsとWSL環境ならエクスプローラーを開いて
作成したexample.com.crtファイルがある場所まで行ってダブルクリックで開きます。 - 警告が出ますが、無視して開く
- 「証明書をインストール」を押す。証明書のインポートウィザードが起動すると思います。
- 現在のユーザーを選択して「次へ」を押す
- 「証明書を全て次のストアへ配置する」を選択して、「参照」をクリックする。
- 「信頼されたルート証明機関」をクリックして「OK」を押して、「次へ」をクリックする。
- 「完了」を押して証明書をインストールします。
これで証明書がインストールできました。
Hostsファイルを編集する
HostsファイルとはDNSを使用する前に特定のドメイン名の解決を行うための設定ファイルです。
このファイルを使ってexample.comをブラウザで指定した際に
自分自身を指すように設定を変更します。
Windows環境ならHostsファイルは\Windows\System32\drivers\etc\hostsにあると思います。
管理者権限を使ってhostファイルを開きます。
今回はWindows環境なので標準搭載されているメモ帳アプリを使います。
「スタート」を押してメモ帳を探します。
メモ帳を右クリックで選択して「管理者権限で実行」を選択します。
メモ帳の「ファイル」ー>「開く」からHostsファイルを探して開きます。
ちなみにデフォルトだとtxtファイルだけを開く設定になっているとHostsファイルは表示されません。
探す際には「すべてのファイル」を選択します。
Hostsファイルを開いたら以下のように記述して保存します。
IPアドレス127.0.0.1は自分自身を指す特殊なアドレスです
127.0.0.1 example.com
これでブラウザのurlでexample.comを指定した際に自分自身を指すようになりました。
まとめ
ここまででHTTPS通信をローカル環境で行う設定は完了しました。
しかし、これだけでは完成ではなく実際にHTTPS通信ができているか確認ためには
nginx等のwebサーバーが必要です。
webサーバーを使用した動作確認はまた別の記事で行いたいと思います。
以上、お疲れさまでした。