##動機とか##
Caveman2でLMSっぽいものを作るにあたって,HTTPS使わないと駄目だろうと思って調べたものの,ドキュメントにそれっぽい記述を見つけられませんでした。
Clackのhunchentootのhandlerのrun
とかを見るとssl
を使えそうなので試してみました。
##準備##
###環境###
Mac OSX 10.10.1
Clozure Common Lisp 1.10
quicklisp 2014-12-17
OpenSSL 0.9.8za 5 Jun 2014
サーバはHunchentootです。 (tootとwookieでも同様かも?)
###証明書作成###
最近はOpenSSLから派生したLibreSSLとかGoogleのとかもあるんですね。
とりあえずOpenSSLを使います。
$ openssl genrsa 2048 > oreore.key
$ openssl req -new -key oreore.key > oreore.csr
生成されたcsrファイルを認証局に署名してもらいます。
今回は動けば良いのでオレオレします。
$ openssl x509 -days 3652 -req -signkey oreore.key < oreore.csr > oreore.crt
生成したkeyファイルとcrtファイルはプロジェクト直下にssl
ディレクトリ作って放り込みました。
##アプリケーション側の設定##
main.lispあたりにファイルパスを書いておきます。
(defvar *ssl-key-file*
(merge-pathnames "ssl/oreore.key" myapp.config:*application-root*))
(defvar *ssl-cert-file*
(merge-pathnames "ssl/oreore.crt" myapp.config:*application-root*))
これだけ。あとは
>(start :port 5000 :ssl t :ssl-key-file *ssl-key-file* :ssl-cert-file *ssl-cert-file*)
すれば動くはずです。
(password設定した場合は:ssl-key-password "password"
を追加します。)
これでhttps://localhost:5000/
にアクセスすると,
見事にブラウザに怒られて,
[2014-12-31 01:48:01 [ERROR]] Error while processing connection: A failure in the SSL library occurred on handle #<A Foreign Pointer #x626B60> (return code: 1). SSL error queue:
error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca
なんて言われます。オレオレなので我慢します。
ブラウザで例外を許可すればサイトを見れます。
(Chromeだとこの段階で証明書の中まで見れるんですね。)
ちなみに:port 443
を指定すると
Error #<USOCKET:OPERATION-NOT-PERMITTED-ERROR #x302003EFD40D>
[Condition of type USOCKET:OPERATION-NOT-PERMITTED-ERROR]
ですって。めんどくさそうなのでport 5000で使う事にします。
##おわりに##
とりあえず動いたので満足です。
本番では証明書はちゃんと買う予定です。
当初は自分でコード書かないと駄目だろうと思っておっかなびっくりソース読んでたのですが,
結局1行も書かずに済みました。
これで安心してフォーム認証ができます。