0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Qiita100万記事感謝祭!記事投稿キャンペーン開催のお知らせ

WSL2 上のアプリケーションを HTTPS 化して別ホストからアクセスする方法

Last updated at Posted at 2025-01-17

(2025 年)初投稿です。1 3 年ほど前に WSL2 上のアプリケーションに別ホストからアクセスする方法(管理者権限なし) という記事を投稿しました。その間 Chrome 94 以降で HTTPS ファーストが推進されたり、Safari 18.2 以降も同様だったりで、開発時に別ホストからアクセスする際もセキュア化を求められる機運はありそうです。

実は、上記の記事でご紹介した stone には HTTPS 化機能が備わっています。便利そうですよね。

stone localhost:http 443/ssl

ところが、Windows 版バイナリで実行しても以下のエラーが発生し HTTPS 化できません。

Jan 16 22:34:26.171000 46656 start (2.3e) [47036]
Jan 16 22:34:26.187000 46656 SSL_CTX_use_PrivateKey_file(/usr/local/ssl/certs/stone.pem) error:02001003:system library:fopen:No such process

フォーク版(takuya_ono/stone)で TLS 1.2 に対応した Windows 版 stone のコンパイル方法が共有されていますが、バイナリ配布がないためお手軽ではありません。そんな時は mkcertlocal-ssl-proxy を stone に組み合わせると便利です。

なお、この 3 年の間に WSL2 のミラーモードネットワークが実装されました。これを有効にしている場合、stone を介さず別ホストから直接アクセス可能になっています。しかし、ファイアウォールの構成によっては引き続き Windows 側のプロセスを踏み台にすると便利なケースがあります。2

mkcert で証明書を作成・インストールする

mkcert は、ローカルで信頼された証明書を作成するツールです。51.7k Star の超有名 OSS で、例えば Next.js の next dev --experimental-https でも内部的に利用されています。

# インストール
choco install mkcert

# ローカル CA のインストール
mkcert -install

# ルート証明書のあるディレクトリを表示
mkcert -CAROOT

# 証明書の作成
mkcert -key-file key.pem -cert-file cert.pem <Windows側のIPもしくはホスト名>

本来はローカル検証用の証明書ではありますが、$(mkcert -CAROOT)\rootCA.pem をインストールすることで他端末からもエラーなく HTTPS 接続可能となります。3

local-ssl-proxy と stone で別ホストからアクセス可能にする

local-ssl-proxy はローカルで信頼された開発証明書を使用したシンプルな HTTPS プロキシです。mkcert で作成した証明書を使用し、HTTP 通信を HTTPS にアップグレードできます。

# インストール
npm install -g local-ssl-proxy

# 実行
local-ssl-proxy --key key.pem --cert cert.pem --source <HTTPS 用のポート> --target <WSL2 側のポート>

このとき、--source が HTTPS 用のポート、--target が WSL2 側のポート(HTTP)なのがポイントです。

最後に、local-ssl-proxy がリッスンする HTTPS 用のポートを stone でポートフォワードすれば別ホストからアクセス可能となります。

# stone でポートフォワード
stone <HTTPS 用のポート> <ファイアウォールで解放されたポート>

参考リンク

  1. 7 年連続投稿かつ 31 ヶ月連続投稿でもあります:image.png

  2. プロセス名単位で許可リスト・禁止リストが制御されている場合など。local-ssl-proxy は実体として node.exe であるため、許可対象としては広範すぎる可能性があります。stone を含む多段プロキシ構成であれば、許可対象は stone.exe に絞られます。

  3. mkcert はあくまで開発用途であり、本番用途に適さないことには注意が必要です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?