ページコンテンツ
【概要】
SSLは格安でもいいので、とにかく通信を暗号化するために必要だと思っており、なるべく安いところを探していた。
一昔前はRupid SSLを使っていたが、数年前からgogetを使っており、あまりにも購入数が増えて優良顧客扱いされたのか、1年間500円で購入できる。
https://gogetssl.com/
会社では上記の金額で購入できるが、個人でアカウント作って購入しようとしたところ、2000円ぐらいかかることが分かった。
hetemlでのサーバ作業をすることもあり、以前から「Let’s Encrypt」は気になっていたが、「まさか無料で運用に耐えうるSSLを使えるわけがない」とスルーしていたが、ドメイン認証型のSSLで2000円はないわーと思い、思い切って導入してみた。
【導入について】
まず「Let’s Encrypt」でググると、以下のサイトがあった。
上のサイトを見て分かったことは、
・無料で利用できる。
・利用するためにはいくつか技術的な条件がある。
・寄付で成り立っている。
稼げるようになったら、寄付しないとな、と思った。。。
(利用のための条件)
いろいろあるが、自分に当てはまったものとして、以下がある。
・サーバのroot権限を持っている。(オンプレミスだろうがVPSだろうがrootをもっていればOK)
・自分のサーバにて運用したいサイトについてポート80でアクセスできること。(プロキシとかあって、本サーバには8080とかでアクセスしている場合はどうなんだろうと思ったけど、自サーバは普通に80でサイト運用しているので、問題なし。)
・該当サイトのドメインを管理していること。
→これはサブドメインを運用するためのオプション条件として記載されていたが、不要かも?後日ちゃんと検証する予定。
例えば、自分でサーバを持っておらず、レンタルサーバを間借りしている(共有サーバ)という場合は、サービスによってできたりできなかったりする、みたいなことが書かれていたが、詳細はよくわからなかった。
(後述の手順を考えると、無理だろう。。。と思ったのだが。)
(具体的な手順)
●「 certbot 」のインストール手順を調べる。
自分のサーバはCentOS7だが、これならモジュールをインストールすれば使えるようになるらしいということが分かった。
そのモジュールを「certbot」というらしい。
以下のサイトにてインストール方法を教えてもらえる。
上のページの「Software」で使っているwebサービスモジュール(apacheとかnginxとか)を「system」でOSを選択すると、その下にインストール手順が表示される。
自分の場合は、「apache」で「CentOS7」だったので、その手順を下に記載する。
●「apache」で「CentOS7」の場合のインストール手順
まずは、サーバにSSHアクセスする。
そして、「snapd」なるもの(パッケージ管理サービスらしい。yumみたいな?)をyumでインストールするが、EPELレポジトリが必要なので、有効にする。
sudo yum install epel-release
でsnapdをインストール
sudo yum install snapd
再起動時も自動起動するようにする。
sudo systemctl enable --now snapd.socket
で、なんかシンボリックリンクが必要らしい。
(classic snapdをサポートするためらしいが、過去との整合性という意味だろうか。これをしないと動かない部分もあるかもだが、 certbotに必要かどうかは不明)
sudo ln -s /var/lib/snapd/snap /snap
で、一度sshをログアウトして、再度ログインするか、サーバを再起動する必要がある。
(実はこれをやらなくて、あとの手順で躓いた。躓いたときにsshのログアウト/ログインを実施して動いたのだが、手順を見ると「これやれ」って書いてあった。。。)
snapdの情報を最新にする。
sudo snap install core; sudo snap refresh core
ここで、もし以前にcertbotを使っていた場合は、一度削除しろと言われる。
以前に使ってないのだが、念のため削除コマンドを実行しておいた。
sudo yum remove certbot
ここで「certbot」をインストールする。
sudo snap install --classic certbot
今見たら「classic」オプションを付けてるな。もしかしたら、上のシンボリックリンクはやはり必要だったのかも。でも理由はわからない。(amaっぽい)
インストールされたら、コマンドにパスを通す。
sudo ln -s /snap/bin/certbot /usr/bin/certbot
これで利用できるようになった。
●実際に使ってみる
実際に使ってみるのだが、次の作業手順というのが、「apacheと連携させる」か「とりあえずSSLサーバ証明書を取得する」かの2つの道を選ぶことになる。
apacheのconfigとかデフォルトでやっている人は「apacheと連携させる」がいいのかもだが、自分の環境ではvirtual hostを乱用してるし、apacheのconfigも手を入れてるしといろいろやっているので、 「とりあえずSSLサーバ証明書を取得する」 を選んだ。
sudo certbot certonly --apache
上記を実行すると、以下の質問をされた。
・emailアドレス入力して。(certbotの挙動情報とか問題があったら連絡がきたりするのかな?)
→ 自分のemailアドレスを入力
・利用規約を承認しますか?
→ 「これを使ったことで不利益があっても補償せんよ。不具合とかあってもね。」とか「法律に違反するようなことには使うなよ」とかが書いてある。問題なければ「Yes」を入力する。
・「lets ecrypsとcertbotにメアドを共有する?いろんな情報もらえるよ。」みたいなことを聞かれる(正確にはちょっとわからなかったが、多分そんな雰囲気かなと)。 問題なければ「Yes」を入力する。
→ 自分は「Yes」にしたが、「No」にしたらキャンセルになるのかな?文章からするとそんなことない気もするけど。
・おそらくapacheのconfigをなめたのだろうが、「どのFQDNのSSLサーバ証明書を発行する?」って聞いてきて、apacheに設定しているServerNameがリストアップされる。発行したいFQDNの番号を入力してEnterする。
すると、ぶわーっと文字が表示されるが、その中に「crtファイル(証明書)」と「keyファイル(鍵ファイル)」のパスが書かれている。
そのパスのディレクトリを見てみると、それらが生成されていた。
試しにその二つを対象のvirtual hostに設定してみたところ、問題なくhttps化された。
(その後)
発行された証明書の更新は自動で行われるとのこと。おそらく前提として、対象のFQDNのDNSレコードがそのサーバを向いている必要があると思う。
また、更新処理が問題なく行われるかどうかの確認として、以下のコマンドを実行してみたらよいとのこと。
sudo certbot renew --dry-run
するとログが表示されるが、その中に以下の記載がある。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
これが実行ログらしく、中身を確認して、末尾に「no renewal failures」とあれば、問題なく更新されるとのこと。
今後は自動で更新されるとのことなので、cronか何か設定されているのかなと思ってみてみたが、それらしきものは見当たらなかった。
今回設置したSSLサーバ証明書の期限間近に、ちゃんと更新されるかどうか確認したほうがいいかも。