【2020年10月注記】この記事は Caddyバージョン0.10.xのもので Let's Encrypt にサーバー証明書を取りに行くプロトコルがサポートされなくなっています。というわけで現在このバージョンは使用できません。
javascriptファイルをローカルに置いて手直ししながら色々なサイトにロードしてテストしたいのだが、httpsサイトだとhttpサーバーに置いたスクリプトは混在アクティブコンテンツとしてブラウザに蹴られる。でWindowsでhttpsサーバーをローカル(127.0.0.1)運用することにした。
IISとかApacheとか大げさなサーバーはいらないしSSL証明書だの面倒なこともしたくない。何か簡単に立てられて軽量なサーバーはないかと探したらCaddyというのがあった。CaddyはサーバーやSSLの知識がほとんどなくても簡単にhttpsサーバーを立てられる。Caddyは一定の設定・手順で起動すれば自動で証明書を取得してくれる。
Caddyで取得した証明書 |
以下にCaddyによるローカルhttpsサーバー立ち上げの手順を失敗談を交えて紹介する。
- ドメイン名を用意する。ダイナミックDNSのドメイン名で構わない。以下 mydomain.com とする
- web サーバー Caddy をダウンロードする。zip なので適当なところに展開する。以下 c:\caddy に展開したものとする
- サーバーで公開するファイルを置くディレクトリを用意する。以下 c:\www とする
- Caddy の設定ファイル Caddyfile を作成して c:\www に置く。Caddyfile はテキストファイルで1行目に mydomain.com と書いておく
- ポート 80 と 443 を開放して外部から Caddy に接続できるようにする
- mydomain.com に Caddy に接続するための IP アドレスを設定する
- コマンドプロンプトを開く
- c:\www に移動する
- c:\caddy にパスを通す
- caddy を起動しSSLサーバー証明書を取得させる。 Caddy はポート80と443をリッスンしつつ Let's Encrypt のサービスに接続し証明書を取得する。 途中メールアドレスの入力を求められるが任意
- 証明書さえ取得すればローカルでの運用にはポートを開放しておく必要はないのでポート 80 と 443 を閉じる
- テキストエディタを管理者として実行し %windir%\system32\drivers\etc\hosts ファイルを開き次の1行を追加して保存する
- 以上でローカルに SSL 対応 HTTPサーバーが出来た。必要な時に caddy を起動してブラウザで
https://mydomain.com/anyscript.js
にアクセスすれば c:\www にある anyscript.js を読み込み実行できる
mydomain.com
c:\users\foo>cd c:\www
c:\www>path %path%;c:\caddy
c:\www>caddy
Activating privacy features...
Your sites will be served over HTTPS automatically using Let's Encrypt.
By continuing, you agree to the Let's Encrypt Subscriber Agreement at:
https://acme-v01.api.letsencrypt.org/terms
Please enter your email address so you can recover your account if needed.
You can leave it blank, but you'll lose the ability to recover your account.
Email address: メールアドレス(任意)
2017/10/18 13:45:39 [コンピュータ名] failed to get certificate: acme: Error 400 - urn:acme:
error:malformed - Error creating new authz :: DNS name does not have enough labels
c:\www>
最初よく分からずCaddyfileにドメイン名を書くべきところコンピュータ名を書いて上記のようなエラーで証明書の取得に失敗した。証明書を発行するため外部から接続してくるのでドメイン名である必要がある。
さらにドメイン名は正しく書いたがポートを適切に開放できていなかったために失敗した。その時のメッセージを以下に示す。
c:\www>caddy
Activating privacy features...
2017/10/18 15:35:16 [mydomain.com] failed to get certificate: acme: Error 400 - urn:acme:
error:connection - Timeout
Error Detail:
Validation for mydomain.com:443
Resolved to:
1**.\*\*.**.253
Used: 1**.\*\*.**.253
c:\www>
下はようやく成功したときのメッセージ。最初の時のようにメールアドレスの入力を求めたりするメッセージは出なかった。一番最初失敗したときに入力したメールアドレスが有効なのかなと思ったりするが委細不明
c:\www>caddy
Activating privacy features... done.
https://mydomain.com
http://mydomain.com
これで証明書の取得に成功してサーバーが稼働している。Ctrl+C で caddy を終了させる
127.0.0.1 mydomain.com
注1) gistで公開した記事だがmarkdownに馴染めないので今後こちらで保守する
0 件のコメント:
コメントを投稿