OpenLiteSpeed (lsws)を使用してローカル環境にHTTP/3サーバを構築する手順を記載します。構築したサーバにはGoogle Chromeでアクセス可能になります。
ローカル環境にHTTP/3サーバを構築する際の課題
HTTP/3 (QUIC) はTLS 1.3が必須です。すなわちhttpsのみ使用でき、httpによるアクセスは出来ません。ローカル環境でちょっと試したい時には少々面倒になります。オレオレ証明書(自己証明書)を作成することでhttpsでアクセス可能になりますが、デフォルトではHTTP/3でアクセスできません(証明書の警告が出てHTTP/2にフォールバックされます)。HTTP/3でアクセス可能にするためには、Chromeの起動オプションによって警告を無視するようにする必要があります。
実行環境
実行環境は下記のようにWidows PCとUbuntuが直結した構成です。WindowのChromeから”https://myserver.com”と指定してHTTPサーバにアクセスします。
OpenLiteSpeedのインストール
OpenLiteSpeedのリポジトリを追加してパッケージをインストールします。
$ sudo wget -O - http://rpms.litespeedtech.com/debian/enable_lst_debian_repo.sh | sudo bash
$ sudo apt install openlitespeed
インストール後、下記のシェルを実行してOpenLiteSpeedの管理画面にログインするためのユーザ名、パスワードを設定します。
$ sudo /usr/local/lsws/admin/misc/admpass.sh
http://<HTTPサーバのIPアドレス>:7080にアクセスすることで管理画面にログインすることができます。
参考:Ubuntu Linux 20.04 LTSにLiteSpeedのオープンソース版(OpenLiteSpeed)をインストールしてみる
オレオレ証明書の作成
証明書にSubjectAltName(SAN)を設定するため下記ファイルを用意します。
$ cat subjectnames.txt
subjectAltName = DNS:myserver.com, IP:192.168.232.100
下記コマンドを実行して証明書を作成します。
$ openssl genrsa 2048 > server.key
$ openssl req -new -key server.key -subj "/C=JP/CN=myserver.com" > server.csr
$ openssl x509 -days 3650 -req -extfile subjectnames.txt -signkey server.key < server.csr > server.crt
Certificate request self-signature ok
subject=C = JP, CN = myserver.com
下記のコマンドで証明書の内容を確認できます。
$ openssl x509 -in server.crt -text -noout
OpenLiteSpeedの設定・証明書の配置
Listener・Virtual Hostの作成
HTTP/3でアクセスするためのListenerを作成します。この例では443ポートをHTTP/3でアクセスできるようにします。
左のメニューからListenerを作成します。
続いてListenerの名前、ポート番号、Secure情報(https有無)の情報を入力します。
Listnerを新規作成後、作成したListenerをクリックして編集画面を開き、Virtual Host Mapping(対応するページの情報)を追加します。
とりあえずVirtual Hostには最初から存在するデモページ(Example)を指定します。
証明書の配置
/usr/local/lsws/sslにディレクトリを掘って配下に先ほど作成したオレオレ証明書を配置します。
mokulog@myserver:/usr/local/lsws/ssl$ pwd
/usr/local/lsws/ssl
mokulog@myserver:/usr/local/lsws/ssl$ ls -lrth
total 8.0K
-rw-r--r-- 1 root root 1.7K Apr 25 12:15 server.key
-rw-r--r-- 1 root root 1.2K Apr 25 12:15 server.crt
OpenLiteSpeedのListenerの編集画面を開き、Private Key FileおよびCertificate Fileに証明書のパスを記載します。$SERVER_ROOTが/usr/local/lswsに対応します。
パスを記載したらOpenLiteSpeedの更新ボタンを押して設定を反映します。
Google Chromeの起動パラメータ
下記のコマンドで証明書のハッシュ値を求めます。Chromeに警告を無視してもらうために必要になります。
$ openssl x509 -noout -pubkey -in server.crt | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64
L64j4lvYpywaaReKzV2OwXgkV1VZNg61Phvvi38iSJM=
Chromeの起動パラメータ “–ignore-certificate-errors-spki-list=” に先ほど求めたハッシュ値を指定します。その他、HTTP/3でアクセスしにいくようにいくつかパラメータを追加します。下記のようなbatファイルにすると楽です。
$ cat chrome.bat
"C:\Program Files\Google\Chrome\Application\chrome.exe" --new-window --enable-quic --quic-version=h3 --origin-to-force-quic-on=myserver.com:443 --ignore-certificate-errors-spki-list="L64j4lvYpywaaReKzV2OwXgkV1VZNg61Phvvi38iSJM=" https://myserver.com
参考:ChromeでHTTP/3サーバーをlocalhostに立てて自己証明書を信頼させてもHTTP/3通信できない + 解決策
ホスト名の登録
myserver.comがHTTPサーバのIPアドレス(192.168.232.100)に変換されるようにWindows PC上のhostsファイル編集します。
mokulog@WSL:/mnt/c/Windows/System32/drivers/etc$ cat hosts
...(途中省略)...
192.168.232.100 myserver.com
実行結果
batファイルをクリックしてChromeを起動し、ChromeでOpenLiteSpeedのデモページが表示できること、通信プロトコルがh3になっていることが確認できれば成功です。