CloudFlareで無料の証明書付きワイルドカードSSLを取得する方法

スポンサーリンク

サイトのSSL化に四苦八苦していたそらちです。

さて、Googleから常時SSLのサイトの検索表示順位を上げるとの発表がありましたね。
→「GoogleのHTTPSサイト優遇方針で待ったなし! Webサイト常時SSL化の効果と実装ポイント

これにより、個人のブログなどでも常時SSL化したいという、ニーズが高まっているように思います。

僕の場合は、あまりSEOとか気にしないで、好きに書きたいことを書いてるだけなので、SSL化は不要かなと思ってました。
しかし、現在Ruby on Railsによるwebサービスの制作を趣味で始めていて、ログイン機能を付けたので、リリースするにあたってSSL化が必要になりました。

本記事では、CloudFlareというサービスを使って、無料で証明書付きのワイルドカードSSLの取得に成功しましたので、その方法を残しておこうと思います。
ご参考になれば幸いです。

また、僕も手探りでやっておりますので、誤りがございましたらコメントいただけると幸いです。

前提

本記事では、以下のことは把握済みという前提で話しを進めますので、もし分からないという場合はリンク先をご参照いただければと思います。

また、求めるSSLの水準は以下を前提にしております。

  • 通信全区間で暗号化
  • アドレスバーにSSL通信の錠前マークを表示
  • ドメイン認証

企業等で使う場合は、ドメイン認証では不十分かと思いますので、信頼できる認証局からSSLをご購入された方が良いかと思います。
 

CloudFlareで使える3種類のSSL

CloudFlareは本来のCDNの機能の他に、DNSやSSLの機能を提供してくれます。

SSLの機能は、暗号・証明のレベルで3種類に分かれています。

  1. Flexible
  2. Full
  3. Full(strict)

まず1のFlexibleですが、これはCloudFlareとブラウザ間のみ暗号化する、最も簡易的な方法になります。

  webサーバ ←(☓普通通信)→ CloudFlare ←(◯SSL通信)→ ブラウザ

そのため、訪問者から見ると、あたかもSSL通信しているかのように、アドレスバーに錠前マークが表示されます。
Googleの検索エンジンが、どこまでSSL化されているかチェックしているかは不明ですが、多少のSEO効果は期待できるかもしれません。

この方法は、webサーバに秘密鍵や証明書を設置する作業は一切不要で、CloudFlareのサイト上だけの設定だけで完結します。

しかし、webサーバとCloudFlare間は暗号化されておりませんので、webサービスで使用する場合は、ログインIDやパスワードを盗聴されてしまう可能性があるので、不十分でしょう。
Wordpressのログイン時も、盗聴の危険があると思います。
 
 
次に2のFullですが、こちらは全区間で暗号化されますが、証明書の検証は無しということらしいです。

  webサーバ ←(◯SSL通信)→ CloudFlare ←(◯SSL通信)→ ブラウザ
        ※証明書検証なし(オレオレ証明書?)

申し訳ございませんが、僕は試していませんので、どのような挙動になるか不明です。
 
 
最後に3のFull(strict)ですが、こちちらは全区間で暗号化されて、かつ証明書の検証有りという方法になります。

  webサーバ ←(◯SSL通信)→ CloudFlare ←(◯SSL通信)→ ブラウザ
        ※証明書検証あり

今回は、こちらを実装していきます。

SSL証明書をどう用意するか

SSL証明書は、通常どこかの認証局が発行しているものを、年間いくらという形で購入しなければなりません。

Start SSLや、Let’s Encryptなどの無料で使用できるものも最近はあるようですが、ワイルドカード証明書は2017年2月現在では対応していないようです。
(Let’s EncryptはSANという仕組みを使って、疑似ワイルドカードのようにも使えるようですが)

僕の場合はサブドメインをたくさん作っているので、ワイルドカード証明書が必要でした。

CloudFlareの場合は、無料でワイルドカード証明書を発行してくれるので、私の今回のニーズにピッタリでした。

実装①:証明書の取得

CloudFlareは全て英語で記述されておりますので、日本語訳が知りたい場合は、以下のブログに翻訳がありましたので、ご参照下さい。
→「cloudflare 設定 – 高速化できる設定方法 / PERSONAL

CloudFlareにログインし、上部のメニューからCryptoを選択します。

Origin CertificatesからCreate Certificateを選択します。

暗号方式や、作成したい証明書のドメインを選択します。
CloudFlareに登録しているドメインと、ワイルドカードが表示されるので、僕の場合はデフォルトのままです。

証明書の有効期限。今回はデフォルトのまま15年。
次へを選択します。

証明書のフォーマットを選択します。今回はデフォルトのままPEM。
この下に表示されているものが、サーバに格納するSSLサーバ証明書になりますので、メモ帳などに控えておきます。

さらに、この下にサーバに格納する秘密鍵が表示されますので、同様にメモ帳などに控えておきます。

使用するwebサーバを選択します。
僕の場合はApacheを使用しておりますので、デフォルトのままOKを選択します。

実装②:webサーバの設定

webサーバの以下ディレクトリに、先ほど控えておいた、証明書と秘密鍵のファイルを格納します。
ちなみに、僕の環境ではCentOS6.7、Apache2.2.15になります。

ファイルの拡張子は、CloudFlareの説明の例にあった通り、証明書を「.pem」、秘密鍵を「.key」にしております。
ご自分のドメインに合わせて、名前を付与して下さい。

ファイル ディレクトリ
SSLサーバ証明書 /etc/pki/tls/certs/caprug.com.pem
秘密鍵 /etc/pki/tls/private/caprug.com.key

次に、サーバ証明書の権限をrootユーザの読み込み権限に制限します。

sudo chown root:root /etc/pki/tls/certs/caprug.com.pem
sudo chmod 400 /etc/pki/tls/certs/caprug.com.pem

秘密鍵は、CloudFlareの説明にもある通り、apacheユーザの読み込み権限に制限します。

sudo chown apache:apache /etc/pki/tls/private/caprug.com.key
sudo chmod 400 /etc/pki/tls/private/caprug.com.key

次に、ApacheのVirtualHostの設定をしていきます。
僕の場合は、サブドメインで色んなサイトを運営しているので、confファイルをサイトごとに分けています。

そのため、まずはポート番号443(HTTPS通信)の全体に適用される、デフォルト設定を削除します。
デフォルトが設定されているままでは、個別のconfファイルにVirtualHostを記述しても、反映されませんでした。

以下の箇所をメモ帳などに控えてから、削除して下さい。
(後に個別のconfファイルで使用します)

【ファイル:ssl.conf】
<VirtualHost _default_:443> 〜 </VirtualHost>

その後、削除した箇所に以下を記述します。

NameVirtualHost *:443

次に、個別のサイトごとのconfファイルに、443ポートのVirtualHostを追記していきます。
こちらの方法は、一様ではないかと思いますので、ご自身の環境に応じて設定して下さい。

以下は、このブログのvanshiptrip.confの設定です。

基本的には、ポート番号80(HTTP通信)のものをコピーしてきて、先ほど控えたssl.confのVirtualHostタグの中の、コメントアウトされていなかったコードを追記しております。
また、SSLサーバ証明書の格納場所を示すSSLCertificateFileと、秘密鍵の格納場所を示すSSLCertificateKeyFileも追記しております。

この辺は、あまり詳しくありませんので、こうやればとりあえば出来ましたという例で記載しておきます。

最後に、文法のチェックを行い、OKならApacheを再起動しておきます。

httpd -t

→文法OKなら
sudo service httpd restart

実装③:CloudFlareでSSLのFull(strict)を起動する

いよいよ、CloudFlareでFull(strict)をONにしましょう。

この後、自分のサイトにhttpsアクセスし、繋がれば成功です。

ではー。


スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です