Let’s Encryptの使い方

Let’s Encryptインストール

Let’s Encryptは無料でsslの証明書を発行してくれる機関です。
/etc/letsencrypt/liveと/etc/letsencrypt/archiveに、作成したドメインごとのディレクトリが作成されます。
7日で5証明書しか発行できないのでご注意ください。 CentOS以外の設定は、Let’s Encrypt 総合ポータルをご確認ください。

letsencryptをインストール前の確認(2017/10/24追記)

初歩的なところで、エラーになったので、念のため追記しておきます。

ファイアーウォール関連の設定確認

firewalldでhttpsの接続を許可しているか
②サーバーのWEB管理画面などにあるファイアーウォールで443(https)ポートの接続を許可しているか
を確認してください。

http接続用のディレクトリとhttp接続用のディレクトリを別で準備

また、新規ドメインでは問題にならないのですが、既にhttpで運用しているドメインをhttpsに移行する場合では、Let’s Encryptをインストールする前に、
http接続用のディレクトリ(例えば、/var/www/example.com)
http接続用のディレクトリ(例えば、/var/www/https.example.com)
みたいな感じでディレクトリを複製して、https接続用のディレクトリの方だけ、ファイル内のリンクなどをhttpsに変更してください。
そして、Let’s Encryptをインストールする時に、1番のhttp接続とhttps接続の両方を認める設定でインストールしてください。
次に、virtual.confにはhttp接続(80)で接続した際に表示するディレクトリは、
そのまま「DocumentRoot /var/www/html/example.com」で、
virtual-le-ssl.confにはhttps接続(443)で接続した際に表示するディレクトリは、
「DocumentRoot /var/www/html/https.example.com」にしてください。

最後に、以下のコマンドで、設定を反映することを忘れないように注意してください。
上記のステップで問題がないことが確認できたら、後からvirtual.confに以下の修正をすることで、常時ssl接続に変更できます。変更後に、再度「systemctl restart httpd」を実行してください。

certbot等のインストール

まずは、下記のコマンドでインストール作業をしてください。

sslにするドメインを入力

複数ドメインがあるときは、「certbot run -d ドメイン名」を再度実行してください。
「certbot run –apache -d ドメイン名」とし、–apacheを挿入すると、自動でssl.confを設定してくれるのですが、色々エラーが発生したので「–apache」を挿入せずにコマンドを実行することにしました。また「certbot certonly –standalone -d ドメイン名」と説明しているサイトもあったのですが、当サイトでは最終的に「certbot run -d ドメイン名」とすることとしました。

①メールアドレスの入力が求められます。

メールアドレスを入力してください。

②サービス同意を求められます。

a」で同意してください。

③メーリングリストへの登録を求められます。

任意ですので、「N」を選択します。

④HTTPSとHTTP接続を両方できるようにするのか問われます

任意で好きな方を選択してください。 2017/8/19追記
上記で「2」のセキュアを選択すると、http接続できた訪問者もhttps接続へとばせるだけでなく、下記の「virtual.confの設定」と「virtual-le-ssl.confの設定」を設定する必要がなく、そのまますぐに利用できました。
同一サーバーで複数のドメインを運用する場合は、ドメインごとに「certbot run -d ドメイン名」を実行してください。

virtual.confの設定

virtual.confを編集してください。 以下の内容を追記してください。 http接続をhttps接続にリダイレクトしないのであれば、下記だけでも大丈夫です。

virtual-le-ssl.confの設定

Let’s Encryptで>「certbot run –apache -d ドメイン名」を実行すると、virtual-le-ssl.confの内容が自動で作成・書き換えられます。
virtual-le-ssl.confの「VirtualHost _default_:443」のところをごっそり削除してください。 削除後が下記の1行のみとなります。 2017/8/9訂正
下記の2行となります。上記の1行だと「certbot renew」するときにエラーで更新できませんでした。

httpdのエラー確認

httpdの再起動

Let’s Encryptの期限

「90日」で期限が切れるので、その都度、下記のコマンドが必要となります。
※cerbot renewは、期限が切れる30日前になれば更新してくれます。つまり、cronで更新設定をしておけば90-30=60日後に更新されます。
/etc/letsencrypt/renewalディレクトリにあるファイルで更新日を確認できます。

Let’s Encryptをcronを使って自動更新

cronをインストールする

cronie-noanacronをインストールした後にcronie-anacronを削除
必ずcronie-anacronを削除するようにしてください。

/etc/cron.d/dailyjobsを編集

certbot renewは、1日何回やってもペナルティーが課されないので、cronを使って2回実行することにします。 /etc/cron.d/dailyjobsを編集してください。 以下の内容を追記してください。 追記後の内容は以下の通りになります。

cron再起動

cronの記載方法

分 時間 日 月 曜 命令の順番に書く
root権限が必要な場合は、
分 時間 日 月 曜 root 命令
「*」はすべてを意味する。
「–quiet」は、補足メッセージを表示しない。
2,4のようにカンマ区切りにすると、2時と4時と2回指定することができる。

cronのログ確認方法

Let’s Encryptの削除

何故かどう頑張っても、Let’s Encryptで証明書を発行してもエラーになった場合に、Let’s Encryptの削除する方法です。

以下のコマンド2つを実行してください。

1つ目のコマンド。

2018/03/06追記

上記のコマンドを実行ししたら、下記のように問われるので、「y」を選択すると、「certbot delete」コマンドを実行しなくてもdeleteしてくれました。
2つめ。上記でyを選択したら必要ない。
/etc/letsencrypt/live/や/etc/letsencrypt/archive/あたりがごっそり削除されているのでご確認ください。
参照:https://certbot.eff.org/docs/using.html#changing-a-certificate-s-domains