2020年8月23日日曜日

Lets's Encryptで無料のサーバー証明書でhttps化する!

 はいどうもマッスルハンターです。

久々のまともな投稿です。

最近httpだとブラウザに怪しげな文言が表示されますよね。

こういうやつ↓


やはりちゃんとしたサイトを運営しようとするとこれはよろしくないので

長年放置していたhttps化をやってやりました。


手順としてはCertbotというツールが公開されているのでこれをインストールするだけって感じでとても簡単でした。


Let's Encryptっていうのがアメリカの無料の認証局だそうなんです。

企業の寄付で認証局運用のコストをなんとかしているそうです。

(詳しく知りたい人は別途調べてください)

参考:無料証明書と有料証明書の違い|さくらのSSL

なのでひとまずこちらを利用しようということで開いてみましたら

Let's Encrypt お優しい事に日本語でした。

こちらの証明書は90日毎に更新しなきゃないそうなんですが

certBotっていうのを使えば自動化できるとのことだったので

certBotさんをお訪ねして下記キャプチャ部分のsoftwareとsystemを選択すると設定方法の書いてあるページに飛びますのでその通りに設定するだけでございます。

certbotのsoftwareとsystemの選択ボックス

私の場合はsoftwareはnginx

systemはCentOS7だったのでCentOS/RHEL 7を選択しました。


記載の手順通りですが


  1. SSH into the server

    サーバーにSSHでログインします。

  2. Enable EPEL repo

    EPELレポジトリが有効でなければ有効にします。
    CentOS7ならこんな感じっぽい
    yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    その他はこちらからどうぞ
    https://fedoraproject.org/wiki/EPEL#Quickstart

  3. Install Certbot

    Certbotさんをインストールします。

    sudo yum install certbot python2-certbot-nginx

  4. Choose how you'd like to run Certbot
    • Either get and install your certificates...

      certbotさんにnginxさんをごにょごにょして頂きます。

      sudo certbot --nginx
    • メアドとか聞かれます。たぶん期限切れが近くなると通知とかくんのかなぁくらいに捕らえました。本当のところは英語を解読してください。
    • 最初nginx側でドメインを設定していなかったのでなんたらかんたら言われました。
    • ngnx.confにserver_name を設定してからやり直したらよさげでした。
    • 上記コマンド実行後にnginx.confを確認すると
    •  # managed by Certbotというコメントがついた行が追加されてました。
    • 証明書のパスとかも書き込んどいてくれてるみたいなので特にいじる必要はなかったです。
    • ここでいったんhttpsでアクセスし、無事に閲覧可能な事を確認しました。

  5. Set up automatic renewal
    これはたぶん証明書が90日で切れるので更新を自動かする処理をcronに登録しておけってことだと思われます。
    いつの間にか切れてると面倒なので登録しておきましょう。

    echo "0 0,12 * * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | sudo tee -a /etc/crontab > /dev/null
というわけで無事に鍵付きになりました。めでたしめでたし。