それなりに適当にやってます

なんとなくそれっぽいメモとか備忘録とか適当に。 2018年5月にブログ移転しました。 古い記事は未整理です。

Let's Encrypt の無料SSL証明書を簡単に試してみた

職場で"無償で使えるSSL証明あるみたいですけど、どないですかね?"と言われたので試してみた。

参考URL

Let's Encrypt とは?

日本語の総合ポータルから引用、独自ドメインさえ持っていれば商用利用もOKらしい(ただ公開ベータの終了後をお勧めとか) (2016/03/16時点)

Let's Encrypt は、認証局(CA)として「SSL/TLSサーバ証明書」を無料で発行するとともに、証明書の発行・インストール・更新のプロセスを自動化することにより、TLS や HTTPS(TLSプロトコルによって提供されるセキュアな接続の上でのHTTP通信)を普及させることを目的としているプロジェクトです。 非営利団体の ISRG(Internet Security Research Group)が運営しており、シスコ(Cisco Systems)、Akamai、電子フロンティア財団(Electronic Frontier Foundation)、モジラ財団(Mozilla Foundation)などの大手企業・団体が、ISRG のスポンサーとして Let's Encrypt を支援しています。 Let's Encrypt の「SSL/TLSサーバ証明書」は、独自ドメインの所有者であれば、誰でも簡単に、無料で取得することができ、商用サイトでの使用も可能です。導入方法については Let's Encrypt の使い方 をご覧ください。 ※商用サイトでの使用は、Let's Encrypt 公開ベータプログラム(Public Beta Program)の終了後をお勧めします。

利用について

  • ドメイン認証(DV) SSL/TLS証明書が利用出来る。
  • 専用のクライアントソフトウェアを用いて証明書の取得・更新を行う。
  • 証明書の期限はデフォルトで3ヶ月(90日)、上記クライアントを用いた自動更新が可能
  • Let's Encrypt のサーバから、正引き(Aレコード)したIPアドレスの 80 番ポート(http)にアクセス出来ること。

証明書の導入手順

Let's Encrypt 総合ポータルにある、Let's Encrypt の使い方 および 公式サイトGetting Startedを参考にやってみた。

テスト環境

  • さくらVPS
  • CentOS7.x (2016/03/16時点)
  • 独自ドメイン取得、DNS設定済

Let's Encrypt の利用手順

以下、試してみた例

専用クライアントの取得

# git clone https://github.com/letsencrypt/letsencrypt# cd letsencrypt# ./letsencrypt-auto --help  =>環境に応じてTCLなどの追加パッケージがインストールされる

証明書の取得

DebianベースのOSだと"--apache"オプションで勝手にやるみたいな事を書いていたけど、CentOSなので "certonly" で行う。起動済みのWEBサーバがある場合はドキュメントルートとドメインを指定する ("-w","-d"は複数指定出来るみたい)

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

まだウェブサーバが立っていない場合や、なんか面倒な場合はウェブサーバ止めてから "standalone" で行えば良いらしい。

# ./letsencrypt-auto certonly --standalone -d example.com -d www.example.com

メールアドレスの入力

上記コマンドを実行するとメールアドレスの入力を求められるので入力して進める。

利用規約への同意

同意を求められるので、内容を確認して問題なければ先へ進める。

証明書の取得

完了すると以下のメッセージが表示された。証明書のパスも書かれている通り。

IMPORTANT NOTES:   - If you lose your account credentials, you can recover through   e-mails sent to <email address>. - Congratulations! Your certificate and chain have been saved at   /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will   expire on 2016-06-15. To obtain a new version of the certificate in   the future, simply run Let's Encrypt again. - Your account credentials have been saved in your Let's Encrypt   configuration directory at /etc/letsencrypt. You should make a   secure backup of this folder now. This configuration directory will   also contain certificates and private keys obtained by Let's   Encrypt so making regular backups of this folder is ideal. - If you like Let's Encrypt, please consider supporting our work by:   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate   Donating to EFF:                    https://eff.org/donate-le

ちなみにNginxのログを確認したら、Let's Encrypt側からのアクセスが来てた。

Nginx でテスト

すでに動作している環境があるので、nginx.conf にテスト用に適用に設定を追加

# vi /etc/nginx/nginx.conf...server {      listen 443 ssl;    server_name example.com;    server_tokens off;    access_log  /var/log/nginx/example.com.ssl-access.log  main;    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;    location / {      root /var/www/html;    }}

確認とNginxの再起動

# nginx -t -c /etc/nginx/nginx.conf# service nginx restart

"firewalld" の穴あけ。テスト目的なので"--pernament"はつけてない。

# firewall-cmd --add-service=https --zone=public# firewall-cmd --list-all...  services: dhcpv6-client http https ssh-cm

適当なブラウザで https 表示して、Let's Encrypt の証明書で表示された事を確認した。

自動更新の設定

デフォルトだと90日で証明書の期限が切れるので自動更新の設定をする。期日前に更新するには"renew"に"--force-renewal" オプションを付けてコマンドを実行するだけ。なので月半ばあたりで適当に更新するよう"cron"に入れてみた。

# crontab -e* * 15 * * /root/letsencrypt/letsencrypt-auto renew --force-renewal && service nginx restart

証明書を更新した後、Nginxを再起動する必要があるので、それも追記している。 実際に運用する際にはスクリプトにしてメール通知とかするようにした方が良いんだろうな・・・まあ(´・ω・`)

とりあえず利用出来た。

以上