開発時にファイルをhttps経由で配信する必要があったため調べて実装した物をメモする。
前提
- Java/Clojureの開発環境がインストールされている
- 今回は
[ring/ring-core "1.6.2"]
を使用した
keystoreを作る
以下を実行するとhttpsに必要な公開鍵、秘密鍵の情報が含まれるkeystoreを生成することができる。
[詳細な手順](https://www.eclipse.org/jetty/documentation/9.4.x/configuring-ssl.html#generating-key-pairs-and-certificat
es)
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
ファイルを配信するring-middleware
ringに標準で入っているfileミドルウェアを使用すると指定したディレクトリ以下のファイルを配信することができる。
HTTPS用にサーバーを設定する
今回はringに標準で含まれているring-jetty-adapterを使用する。
(require '[ring.adapter.jetty :as j]
'[ring.middleware.file :as rf])
(def jetty
(j/run-jetty
(rf/wrap-file identity ;;ファイルの配信しかしないので何もしないハンドラ
"." ;;プロジェクトルートディレクトリ以下を配信したい
)
{:host "localhost"
:http? false ;;httpが不要なため
:ssl? true ;;httpsを有効にする
:ssl-port 9443 ;;任意の値
:keystore "keystore" ;;最初に作成したkeystoreへのパス
:key-password "password";;keystore作成に使用した値
:join? false ;; 起動後、REPLにコントロールが戻ってくる
}))
感想
以前はPythonに付属してたhttpsサーバーモジュールを使用していたが、Clojure/Javaだけで手軽に完結できるので嬉しさを感じた。