Let’s EncryptのSSL/TLSサーバ証明書を取得する方法

ウェブブラウザのアクセスでは,当然のごとく通信の暗号化が求められています.

近年は特に厳しくなっており,HTTPSのウェブサイトでないとGoogleは検索にヒットしないなどの対策が行われています.

たとえ社内ネットワークでも暗号化すべきという考え方も主流になっています.

もともとは暗号化や通信技術の知識が求められていましたが,最近は難しいことは考えずに無料でHTTPS化ができるようになっているので,その方法について記載しています.

目次

この記事でできるようになること

・SSL/TLSサーバ証明書発行
・SSL/TLSサーバ証明書の自動更新

SSL/TLSサーバ証明書とは

SSLは”Secure Socket Layer”の略で,安全に通信するためのセキュリティプロトコルです.また,TLSは”Transport Layer Security”の略です.TLSはSSLの後継であり,SSLの脆弱性が改善されたものです.

一般的にはSSLが有名ですが,実質的にTLSを示している場合が多いです.厳密には別物ですが,一般的な用途では,SSLとTLSのいずれにしても,接続を暗号化し安全な通信をするためのセキュリティプロトコルと理解しておくとよいでしょう.

SSL/TLSサーバ証明書を発行する認証局

SSL/TLSサーバ証明書は,認証局(CA:Certification Authority)によって発行されます.認証局は,第三者機関であり申請した申請者がドメインを所持しているかを確認して証明書を発行します.認証局には無料/有料の両者がありますが,暗号化に関するセキュリティレベルは全く同じです.違いは,証明書の内容であり,企業の情報などを付加することができます.個人の用途では無料の認証局で十分であり,ここではLet’s Encryptという認証局を使用します

また,証明書には期限があるため,定期的に更新する必要があります.

Let’s Encryptについては下記に詳しく記載されています.

あわせて読みたい
Let's Encrypt について - Let's Encrypt - フリーな SSL/TLS 証明書 Let’s Encrypt は、公共の利益のために運営されている、フリーで自動化されたオープンな認証局 (certificate authority; CA) です。 インターネット・セキュリティ・...

前提条件

SSL/TLSサーバ証明書の発行にあたって,以下のような設定が済んでいる必要があります.

・管理者権限がある
・ドメインが設定済みであり,ポートが80,および443がアクセス可能状態であること

Let’s Encryptは,証明書の取得の際にデフォルトポート(80)の変更は推奨しておらず,80以外を利用すると証明書の取得が非常に困難になります.

あわせて読みたい
ベスト・プラクティス - 80 番ポートを開放しよう - Let's Encrypt - フリーな SSL/TLS 証明書 ウェブサーバーへアクセスする 80 番ポートがファイアウォールでブロックされているため、HTTP-01 タイプのチャレンジを使用している人が問題につまずくという報告をときど...

SSL/TLSサーバ証明書の発行

パッケージのインストール

下記コマンドで,必要なパッケージをインストールします.Debian系とRHEL系でそれぞれインストールコマンドが異なります.

Debian/Ubuntuの場合


apt install certbot

CentOS/RHELの場合


yum install -y certbot

証明書の発行

下記コマンドで証明書を発行します.


certbot certonly --webroot -w /var/www/html -d bar.com

メールアドレスをfoo@example.com,DNSをbar.comと表記しています.適宜,自分の環境に合わせて変更してください.
/var/www/htmlがない場合,mkdir -p /var/www/htmlで作成します.

次のような対話型のコンソールが表示されるので,下記のように打ち込む.


Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): foo@example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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 at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing 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: Y
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for bar.com
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/bar.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/bar.com/privkey.pem
   Your cert will expire on 2022-05-24. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - 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

/etc/letsencrypt/live/bar.comに下記の5つのファイルが作成されれば,成功です.

privkey.pemfullchain.pemchain.pemcert.pemREADME

SSL/TLSサーバ証明書の更新

SSL/TLSサーバ証明書には期限があるため,定期的に更新する必要があります.Let’s Encryptで発行される証明書の有効期限は90日間です

証明書を有効期限を確認

有効期限の確認は下記コマンドで確認できます.


certbot certificates

Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
  Certificate Name: bar.com
    Domains: bar.com
    Expiry Date: 2022-05-24 15:36:37+00:00 (VALID: 88 days)
    Certificate Path: /etc/letsencrypt/live/bar.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/bar.com/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


手動で証明書の有効期限を更新する

期限の更新は下記コマンドで実行できます.


certbot renew

証明書の更新は30日前から可能になります.今回は証明書の発行して間もないため,”Cert not yet due for renewal”というメッセージが出ており,更新がスキップされています.


Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/bar.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not yet due for renewal
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
The following certs are not due for renewal yet:
  /etc/letsencrypt/live/bar.com/fullchain.pem expires on 2022-05-24 (skipped)
No renewals were attempted.

更新可能かをチェックする

--dry-runオプションを付けることで,更新可能かどうかをチェックします.


certbot renew --dry-run


Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/bar.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator webroot, Installer None
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for bar.com
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/bar.com/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)
Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/bar.com/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates above have not been saved.)
IMPORTANT NOTES:
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder i

認証の制限

--dry-runを使用しない場合,何度もトライするとアクセスの制限に引っかかるため,注意が必要です.詳細に関しては,下記をご覧ください.

あわせて読みたい
Rate Limits - Let's Encrypt Let’s Encrypt provides rate limits to ensure fair usage by as many people as possible. We believe these rate limits are high enough to work for most peopl...

自動で証明書の有効期限を更新する

手動で更新することもできますが,いちいち更新するのは面倒なので自動で更新するように設定します.

下記コマンドで,スケジューラの設定ファイルを開きます.


crontab -e

開いたファイルの末尾に以下のような記述します.毎月1日の3時にcrertbot renewを実行するという意味です.


0 3 1 * * certbot renew

スケジューラ(cron)の起動確認

設定後にcronが起動していることを確認しておきます.


systemctl is-active cron
active

activeとなっていない場合,下記コマンドで,cronを実行します


systemctl start cron

よかったらシェアしてね!
目次