OpenSSLで鍵ペアと証明書を作成
パスフレーズなしの秘密鍵(server.key)を作成する。
$ openssl genrsa 2048 > server.key
公開鍵(server.csr)を作成する。
-subjの部分は必要に応じて編集する。
$ openssl req -new -key server.key -out server.csr -subj '/C=JP/ST=Tokyo/L=Tokyo/O=Example Ltd./OU=Web/CN=example.com'
証明書(server.crt)を作成する。
$ openssl x509 -in server.csr -days 365 -req -signkey server.key > server.crt
plackupコマンド
Plackに同封のHTTP::Server::PSGIでサーバを立ち上げる。
その際に、「ssl」「ssl-key-file」「ssl-cert-file」オプションで、
先ほど作成したファイルを指定してSSLを有効にする。
$ plackup -s HTTP::Server::PSGI --ssl-key-file server.key --ssl-cert-file server.crt --ssl 1 app.psgi
HTTP::Server::PSGI: Accepting connections at https://0:5000/
これで、httpsでListenするサーバが立ち上がる。
ヘッダの追加
ばあいによっては、
アプリに渡すヘッダにX-Forwarded-HTTPSのような情報を渡す必要が出てくる。
Mojoliciousでは、X-Forwarded-HTTPSを渡さないと、
リダイレクト処理が正常に動作しなくなる。
コマンドから追加する方法が見つからなかったので、
Plack::Builder内で以下のような感じで追加するようにした。
use Plack::Builder;
builder {
enable sub {
my $app = shift;
sub {
my $env = shift;
$env->{"HTTP_X_Forwarded_HTTPS"} = 1;
my $res = $app->($env);
return $res;
};
};
$app;
};
追記)
コマンドから追加する方法を見つけた。
以下のようなファイルを用意する。
enable sub {
my $app = shift;
sub {
my $env = shift;
$env->{"HTTP_X_Forwarded_HTTPS"} = 1;
my $res = $app->($env);
return $res;
};
};
plackupの-eオプションで、このファイルの内容を渡すようにする。
$ plackup -e "`cat httpxforwardedhttps.pl`" -s HTTP::Server::PSGI --ssl-key-file server.key --ssl-cert-file server.crt --ssl 1 app.psgi
HTTP::Server::PSGI: Accepting connections at https://0:5000/
これで、アプリに手を入れずに、ヘッダを追加することができた。
参考
Apache+OpenSSLで簡単に自己認証したい
http://qiita.com/cs_sonar/items/81b30c7a1d86d729c7fc