nginxに1万円以下のワイルドカード証明書を導入してみた
|いろいろやろうと思うとどうしてもWebサーバにSSL証明書が必要になる。 それも特定のホスト名(FQDN)だけじゃなくて、まとめて複数ホスト名 に対応してくれる「ワイルドカード証明書」がいい。 *.hilotech.jp 対応みたいな意味。
といっても数万もする高いのは要らない。SSL証明書の値段というのは ほぼ「信用料」みたいなもので、しかも裏付けがなかったりするし。 会社で買うときはさすがに十万とかのやつ買う(買わされる)けどね。
で、安いワイルドカード証明書を探すとだいたい「RapidSSL」の代理店 になる。今回は、国内でむちゃくちゃ安いところを見つけた。
なんといま現在で 9,720円/年 だよ。しかも税込!
が、それだけにいくぶん怪しいところがあって、カンジンの購入画面が しょっちゅうメンテナンス中になっている。「欲しけりゃ電話しろ」と 書いてあったので電話したら、3時間くらい経って利用できるようになっ た…。なんだったんだ。
まあ、それはともかく。CentOS 6.5 + nginx 1.6(TLS SNI support) でRapidSSLのワイルドカード証明書の導入手順をまとめておく。
まず、手元のサーバーでの作業。
- 秘密鍵をつくる
- CSR(証明書業者に出す署名リクエストデータ)をつくる
実手順としては、
# mkdir -p /etc/nginx/ssl
# cd !$
# openssl req -new -newkey rsa:2048 -nodes -keyout hilotech-jp.key -out hilotech-jp.csr
という感じ。いろいろサイト(所有者)の情報を聞いてくるので答える。
Country Name (2 letter code) [XX]: JP
State or Province Name (full name) []: Tokyo
Locality Name (eg, city) [Default City]: Itabasi-ku
Organization Name (eg, company) [Default Company Ltd]: HiLoTECH Ltd.
Organizational Unit Name (eg, section) []: HQ
Common Name (eg, your name or your server's hostname) []: *.hilotech.jp
Email Address []: xxxxxxx@hilotech.jp
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
/etc/nginx/ssl に
- 秘密鍵ファイル: hilotech-jp.key
- CSRファイル: hilotech-jp.csr
ができあがる。
あとはSSLストア(というか実態はRapidSSLだけどね)にCSRファイルを送りつける だけ。このとき、CSR作成時に入力したメールアドレスに実在証明確認用のURLが送 られてくるので注意すること。
で、ひととおり支払なども済まして数分もすると、メールでポンと
- SSL証明書
- 中間証明書
これは簡単に言うとRapidSSLが対応してないブラウザに対応するための 補助データみたいなもんです
が送られてきます。
SSL証明書と中間証明書を合わせて、/etc/nginx/ssl/joined-hilotech-jp.crt とでもして置いておきましょう。
SSLの設定だけ切り出して /etc/nginx/ssl/ssl.conf にしておくとよいと思います。
listen 80;
listen 443;
ssl on;
ssl_certificate ssl/joined-hilotech-jp.crt;
ssl_certificate_key ssl/hilotech-jp.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
で、ぼくの場合は /etc/nginx/vhosts/FQDN.conf として名前ベースバーチャルホス トの設定を切り出しているので、SSL対応にしたいホストの server コンテキストの 中で、
include ssl/ssl.conf;
と一行入れて呼び出すとお手軽な気がする。
最後に、いちおう秘密鍵とか(今回パスフレーズかけてないし)漏れるとまずいので、 /etc/nginx/ssl は適切なパーミッションにしておきます。
# chown -R nginx.root /etc/nginx/ssl
# chmod og-rw /etc/nginx/ssl/*
で、
# service nginx restart
で終わり!
安かったし、とりあえず動いているみたいだし、いいんじゃないかな。