昔は一部のコンテンツのみが導入していたHTTPS接続ですが、現在はSEOにも影響があるなどの理由からほぼ必須だと言われています。ただし通常のSSL証明書は費用がかかるため個人サイトやブログといったサイトへの適用には躊躇してしまいがちです。そんな場合は「Let’s Encrypt」という無料のSSL証明書があるのでこちらの利用をすることで解決できます(有効期限が90日と短いのですが自動更新できます)
snapをインストール
Let’s EncryptのSSL証明書を発行するには「certbot」というプログラムが必要になります。以前は「certbot」を直接インストールできたのですが、2021年以降は「snap」を利用したインストールが推奨されています。「snap」をまだインストールしていない場合は「AWS(AmazonLinux2)にsnapをインストールする方法」を参照してインストールしてください。
certbotをインストール
「snap」のインストールが完了したら以下のコマンドを実行して「certbot」のインストールを行います。
※以降はrootユーザーで実行してください。
$ snap install --classic certbot
certbot 1.16.0 from Certbot Project (certbot-eff✓) installed
certbotにシンボリックリンクを設定する
インストールした「certbot」にはパスが通っていないため、シンボリックリンクを設定します。
$ ln -s /snap/bin/certbot /usr/bin/certbot
設定したらcertbotコマンドでインストールされたバージョンを確認してみましょう。
$ certbot --version
certbot 1.16.0
Let’s Encryptの発行
ここまで準備ができたら、Let’sEncryptのSSL証明書の発行ができます。発行は以下のコマンドを実行するだけなので簡単に完了することができます。ただし、発行の際はドメインチェックが行われるためDNS登録前の未公開なドメインのSSL証明書は発行できません。
$ certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com
オプション | 説明 |
certonly | 証明書の作成のみを行います |
–webroot | ウェブサーバーモードを指定 |
-w /var/www/html | 対象ドメインのドキュメントルートを指定してください |
-d example.com | 対象ドメインを指定してください。複数指定することも可能です |
コマンドを実行すると最初にメールアドレスの入力を求められます。更新状況など重要なメールが届くので適切なメールアドレスを入力しておきましょう。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): 登録メールアドレス
次に規約に同意するかを聞かれるので「Y(Yes)」を入力します(同意しないと利用できません)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
次にメーリングリストに登録するかを聞かれます(Noでも発行に影響はありません)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N
入力後、ドメインチェックなど問題がなければ以下のメッセージが表示され完了となります。
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example.com/privkey.pem
This certificate expires on 2020-12-31-.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
証明書を設置する
Let’s Encryptで発行されたSSL証明書は以下のディレクトリにドメイン単位で保存されます(複数ドメインを指定して発行した場合は、最初に記載してあったドメイン名で登録されます)
$ cd /etc/letsencrypt/live/
$ ll
example1.com
example2.com
・・・
ドメイン名のフォルダには「cert.pem」「chain.pem」「fullchain.pem」「privkey.pem」の4ファイルが保存されています。Apacheの場合はその中の3ファイルを以下のように設定して再起動すればSSL証明書が反映されます。
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
自動更新設定
Let’s EncryptのSSL証明書は無料で便利なのですが、有効期限が90日と短いため定期的な証明書の更新作業が必要になります。90日ごとに更新作業が必要と言われると利用をためらいたくなりますが、「certbot」では自動更新が可能なため設定しておけば更新忘れなども心配ありません。
※snapを利用してcertbotをインストールした場合は自動更新対応がすでに設定されていました。ただし、Apacheなどは再起動されないためSSL証明書の反映にはWEBサーバーの再起動が必要になります(WEBサーバーも自動で再起動するようにすれば完全自動化できます)
それではみなさん、自由なWEBライフをお過ごしください!