今回はCertbotというツールを使って証明書を取得し、HTTPS通信によってサイトを公開しました。
記事の内容について間違った記述などありましたら遠慮せず教えていただけると幸いです。
環境
OS: Ubuntu 20.04.2
サーバー: Apache
前提: ドメインを設定してhttpでの公開までできている段階を想定しています。
※ドメイン設定についてのわかりやすい記事です。
ApacheのVirtualHostってなんだ(Qiita記事)
Certbotとは
Webサイトをhttps://
で始まる安全な通信で公開するためのサービスのひとつです。
(ざっくり)
Let'sEncryptという証明書発行サービスが提供しているツールで、ドメインが設定されたサーバー上でこのCertbot(サートボット)を実行すると、ドメインとサーバーの管理者が一致しているか検証します。無事検証できれば自動的に証明書が発行され、安全が担保されるというわけですね。
インストールする
まずはサーバー上でapt-get
コマンドでもってCertbotをインストールします。
$ sudo apt-get install certbot
初手から不穏ですね。。
インストールの時は文字がダーーーと流れそうですが、4行しか表示されませんでした。
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package certbot <-- 特にこの1行がなんか怪しい
何やらCertbotのパッケージが見つからないそうです。
パッケージをインストールする
レポジトリを追加するようにしてあげるといいとグーグル先生が申しておりましたので、add-apt-repository
を実行します。
ちなみにppa
とは「パーソナルパッケージアーカイブ」というUbuntu非公式のレポジトリのことだそうです。
$ sudo add-apt-repository ppa:certbot/certbot
すると以下のようなメッセージが
sudo: add-apt-repository: command not found
明らかに上手くいってません。
add-apt-repository
ってなんだよと怒られました。
僕だって知りませんよ、と逆ギレしそうです。
続:パッケージをインストールする
apt-get install
でパッケージ名を指定してもインストールできない原因は、デフォルトでリポジトリに登録されていないからだそうです。
ですので、まずは諸々のパッケージが入ったsoftware-properties-common
をインストールしましょう。
$ sudo apt-get install software-properties-common
文字がダーーーっと流れると少し安心します。
さて、再度add-apt-repository
を試してみます。
$ sudo add-apt-repository ppa:certbot/certbot
今度はいけました。(この時の安堵感ってなんとも言えないですね)
一応apt-get
を更新してから、certbot
をインストールします。
$ sudo apt-get update
$ sudo apt-get install certbot
確認します。
$ certbot --version
certbot 0.40.0
気持ちいいです。
Apache用プラグインをインストールする
続いてApache用のプラグインをaptからインストールします。
$ sudo apt-get install python3-certbot-apache
TLS証明書を発行する
インストールできたら、次のコマンドで証明書を発行できます。
~~は記述しなくて大丈夫です。
$ certbot --apache --domains ~~ここにドメインを記述~~ --email ~~ServerAdminに設定したアドレス~~
すると、対話式で利用規約やら登録用のメールアドレスやらを聞かれます。
細かい記述やパスは作業環境によって異なってくると思います。
なお、実際のドメイン名は伏せ字にしています。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Cert not yet due for renewal
You have an existing certificate that has exactly the same domains or certificate name you requested and isn't close to expiry.
(ref: /etc/letsencrypt/renewal/~~ここにドメイン~~.conf) <--確認で2回目だからrenewalついてる
What would you like to do?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Attempt to reinstall this existing certificate
2: Renew & replace the cert (limit ~5 per 7 days)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
今回はrenewにしときたいので2でEnterキー押下
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
HTTP通信をHTTPSにリダイレクトするかしないか
よく分からないので1でEnterキー押下
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Your existing certificate has been successfully renewed, and the new certificate
has been installed.
The new certificate covers the following domains:
https://www.~~~~
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=www.~~~~
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/www.~~~~/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/www.~~~~/privkey.pem
Your cert will expire on 2021-08-31. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
無事に証明書をインストールできました。
試しにhttps://~~登録したドメイン~~
でアクセスしてみましょう。
また、証明書には有効期限(90日間)があります。古くなった証明書を手作業で更新するのは面倒なので、更新作業を自動化することもできます。
自動化手続きについては以下のサイトでわかりやすくまとめられていますので、参考にしてみてください。
Certbotを使い3分で無料のSSL証明書を取得する<外部リンク>
おわりに
SSL/TLSには「暗号化」「改ざん検出」「認証」という3つの機能があるそうです。
今やHTTP通信だと警告が出るようになっていたりするので、基本はHTTPS通信で公開しておきたいですよね。
ということは、一連の手続きは今後もお目にかかることが多そうです。