最近Webサイトを立ち上げるときSSL化するのがトレンドになっていますが、認証を得た機関が発行する証明書が必要になりますよね。ただ、それほど重要なやり取りをしない場合や個人サイトなどでは安い証明書でも気軽に使えないので困ってしまいます。
そこで無料の証明書を利用したくなりますが、幾つかあるなかでもLet’s Encrypt(レッツエンクリプト)は運営元の信頼性も高く候補に上がるのではないでしょうか。
サーバーのログイン権限があれば直ぐに発行が行われ、慣れれば更新もラクチンですので、簡単なインストール方法をガイドしていきますね。
(ApacheのSSL設定までが行われている状態での説明になります)
■CentOS6系の場合(7系は不要)
下準備から!Let’s EncryptはPython2.7以上が必要になりますが、CentOS6系ではデフォルトで入っていないので先ずはPython2.7のインストールをします。SCLを利用し既に入ってるパッケージのバージョン管理を行います。
1 2 |
yum install centos-release-SCL yum install python27 python27-python-tools |
■Let’s Encryptのプログラムをダウンロード(6系7系共通)
Let’s Encryptのプログラムをダウンロードしてパーミッションを変更します。ディレクトリは任意で変更しても大丈夫です。
1 2 3 |
cd /usr/local/ wget https://dl.eff.org/certbot-auto chmod a+x certbot-auto |
■証明書の発行
次に証明書を発行します。発行にあたりドメインが正確かDNSのチェックが入ります。違うドメインの証明書の発行は出来ないので気をつけて下さい。
またcertonlyオプションは証明書の発行のみを行います。SSL設定を行ってない場合このオプションをつけないと自動で設定を行ってくれますが、ssl.confが勝手に書き換わりますのでお気をつけを。
6系の場合(Python2.7で実行します)
1 |
scl enable python27 "./certbot-auto certonly --apache" |
7系の場合
1 |
./certbot-auto certonly --apache |
コマンドを実行すると発行URLの確認、登録メールアドレス、認証などの質問が表示されますので間違えないか確認しつつ進んで下さい。
■Apacheに証明書を設定(6系7系共通)
無事証明書が発行されると/etc/letsencrypt/live/<ドメイン名>/のディレクトリが作られ証明書が保存されています。
証明書 | cert.pem |
証明書+中間CA証明書(Apacheでは使わない) | fullchain.pem |
秘密鍵 | privkey.pem |
中間CA証明書 | chain.pem |
これをApacheのssl.confにて指定しましょう
1 |
vi /etc/httpd/conf.d/ssl.conf |
以下を書き換える
1 2 3 |
SSLCertificateFile /etc/letsencrypt/live/<ドメイン名>/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/<ドメイン名>/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/<ドメイン名>/chain.pem |
これでApacheを再起動し、コンフィグに間違えがなければhttpsにてアクセス出来るようになり無事組み込み完了です。安全なサイトになりましたね。
■Let’s Encryptの自動更新
無料で簡単に導入できるLet’s Encryptですが、証明書の期間が3ヶ月と短い短所もあります。頻繁に変更する事で安全を確保するとのことですが、3ヶ月毎に作業をするにはメンドウなのでcrontabにて自動更新を設定します。
毎月1日の午前4時に更新する設定です。Apacheの再起動があるのでWeb系のプログラムなどを動かしている場合は調整してください。
6系の場合
/etc/crontabに直接書いて問題ないと思います。
1 |
00 04 01 * * root /usr/bin/scl enable python27 "/usr/local/certbot-auto renew --force-renew" && /sbin/service httpd reload |
7系の場合
/etc/crontabだとサーバーの設定かうまく動かないのでユーザー毎のcron(/var/spool/cron/root)に書くと動きました。
1 |
00 04 01 * * /usr/local/certbot-auto renew --force-renew && /bin/systemctl reload httpd |
以上で、毎月自動で証明書が更新されるので、商用SSL証明書よりラクチン運用になります。
cronの設定がうまく動かない場合は以下のコマンドが正常に完了するか試して下さい。一日で発行出来る回数が決まっているようなので「–dry-run」オプションをつけてテストしてください。
6系の更新テスト
1 |
scl enable python27 "/usr/local/certbot-auto renew --force-renew --dry-run" |
7系の更新テスト
1 |
/usr/local/certbot-auto renew --force-renew --dry-run |
それではラクチンで安全サイト運営をしていきましょう!