nginxに1万円以下のワイルドカード証明書を導入してみた

5d65507aafdae177d1ae8fa88974b562_s

いろいろやろうと思うとどうしても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

で終わり!

安かったし、とりあえず動いているみたいだし、いいんじゃないかな。