6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

IDCF CloudAdvent Calendar 2015

Day 19

IDCFクラウドを用いてざっくりとSSLに対応させる

Posted at

この記事は、IDCFクラウド Advent Calendar 19日目の内容です。普通に2日前に出てきましたが、こっちが本来記述する予定日でしたが、気にしないことにしましょう。

先日構築した、IDCFクラウドでざっくりとa-blog cmsを構築する記事の環境をベースにします。(LAMP)

全面SSLのメリット

全面SSLをすることによるメリットを記載すると、以下の点です。

  • GoogleからのSEO評価があがるかもしれない
  • どうせお金かけるのであれば、全部対応させたほうがリダイレクト処理が楽
  • サイトの改ざんが難しくなる
  • 全体が暗号化されることによって、プライバシーが高まる。

しかし、SSL証明書を導入する時に迷う点が“ お金が予想以上にかかる ”という点であると思います。さくらのSSLでは年額1,500円(税抜, RapidSSL)ネットオウルが提供するSSL BOXであっても、年額990円(税抜き, CoreSSL)からとなっています。

1つのサイトを管理しているのであれば、金額をかけてちゃんとしたのを取得したほうが良いですが、法人でなければ無料のでも良いとは思います。

無償でSSL証明書を発行する事業者を以下に挙げます。

  • StartSSL(少し前話題になった事業者。更新が超絶面倒)
  • WoSign(よくわからない)
  • Let's Encrypt(2015年12月現在ではBeta版。コマンドラインから取得・更新が可能)

どれを使うかもう一択しかないですね!Let's Encryptを用います。今までStartSSLで難なく更新出来ている人は別にそれでも良いと思います。しかし、私は少しでも手間を省きたいと思うので選びました。

Let's Encryptとは?

Let's Encryptとは、無料で自動的にSSL証明書を発行するプロジェクトです。従来のSSL証明書と比較して、異なる点は以下のとおり。

  • SSL証明書の更新スパンが短い(3ヶ月)
  • GUI操作なしに更新できる

他にも多くあるかもしれませんが、とりあえずこれだけ覚えていれば大丈夫でしょう。

無料で発行できますし、ブラウザの対応状況も良いです。まだベータ版ではありますが、正式版になっても同じだとは思います。

SSL証明書を導入する

認証局はLet's Encryptを利用するので、サーバー側で以下のようにします。

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto

./letsencrypt-autoを実行する前に、EPELレポジトリが入っているか確認したほうが良いですが、続きなので割愛。(yum install epel-releaseでインストールできます)

しばらく待っていると、以下の様なメッセージが出てきます。

Creating virtual environment...
Updating letsencrypt and virtual environment dependencies.......
Running with virtualenv: /root/.local/share/letsencrypt/bin/letsencrypt
No installers are available on your OS yet; try running "letsencrypt-auto certonly" to get a cert you can install manually

このようなメッセージが出れば、成功しています。実際に証明書を取得するためには、以下のコマンドで取得します。

./letsencrypt-auto certonly --webroot -w /var/www/html -d ac2015.arealv.net

-wの後ろはディレクトリ、 -dはドメイン名です。なので、wwwありなしどちらとも取得する場合は以下のようになります。(以下の例ではwwwありが先ですが、wwwなしが先でも問題ない)

./letsencrypt-auto certonly --webroot -w /var/www/html -d www.example.com -d example.com

更新を手動でするのは面倒なので、自動化してしまいます。

crontab -e
00 05 01 * * /usr/local/letsencrypt/letsencrypt-auto certonly --webroot -w /var/www/html -d www.example.com -d example.com --renew-by-default && /bin/systemctl reload httpd

この設定だと、毎月1日の朝5時に更新するという設定になっています。

SSL証明書をApacheに組み込む

Apacheに組み込む方法は難しくなく、mod_sslを導入していれば簡単に行うことができます。

/etc/httpd/conf.d/99-exvhost.conf
<VirtualHost *:443>
   DocumentRoot /var/www/html/
   ServerName www.example.com
   SSLEngine on
   SSLProtocol all -SSLv2 -SSLv3
   SSLCipherSuite "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK"
   SSLCertificateFile /etc/letsencrypt/live/www.example.com/cert.pem
   SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
   SSLCertificateChainFile /etc/letsencrypt/live/www.example.com/chain.pem
   Header set Strict-Transport-Security "max-age=31536000; preload"
   SSLHonorCipherOrder  on
</VirtualHost>

上から解説すると、

  • ドキュメントルート(ウェブサイトを公開するディレクトリ)
  • ドメイン名
  • SSLの有効化
  • SSLの暗号化の設定
  • SSLの証明書ファイルのパス
  • HSTSの設定(本来ならサブドメインなども〜と言われそうですが、割愛)
  • サーバーサイドでSSL暗号化の指定

という感じになっています。設定はMozillaのドキュメントを一部参考にしています。

参考

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?