Raspberry PiにSSL証明書導入(Let’s Encrypt)
概要
certbotのインストールの参考記事は多くあるものの、SSL証明書取得の部分の解説が少なかったので備忘録として投稿します。
実行環境
MCU:Raspberry Pi 2B+
OS:Raspberry Pi OS
Webサーバー:Apache/2.4.56 (Raspbian)
※apache2のドキュメントルートはデフォルトのままで進めています。変更した場合はユーザー権限の関係で403エラーになります。
色々設定してしまっていてまっさらに戻したいときは、以下のコマンドで初期状態に戻ります。
sudo apt purge apache2 sudo apt install apache2
certbotのインストール
GithubからクローンしたものをインストールするとRaspberry Pi特有の問題が発生するそうなので、aptからインストールします。
sudo apt install certbot
certbotの実行
以下のコマンドでcertbotを実行します。
sudo certbot certonly
実行すると以下のメッセージが表示されます。今回は永続的にSSL認証をしたいので「2」を入力してエンターを押します。
How would you like to authenticate with the ACME CA? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: Spin up a temporary webserver (standalone) 2: Place files in webroot directory (webroot) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel): ~和訳~ ACME CA でどのように認証しますか? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: 一時的な Web サーバー (スタンドアロン) を起動します。 2: ファイルをウェブルート ディレクトリ (ウェブルート) に配置します。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 適切な番号 [1-2] を選択し、[Enter] を押します (キャンセルするには「c」を押します):
次に以下のメッセージが表示されるので自分のE-mailアドレスを入力します。
Plugins selected: Authenticator webroot, Installer None Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): ~和訳~ 選択したプラグイン: ウェブルートで認証、インストーラーなし メールアドレスを入力してください(緊急の更新やセキュリティに関する通知に使用されます) (キャンセルするには「c」を入力します):
利用規約の同意を求められるので「y」を入力してエンター。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must agree in order to register with the ACME server. Do you agree? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: ~和訳~ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 次のサイトで利用規約をお読みください。 https://letsencrypt.org/documents/LE-SA-v1.3- September-21-2022.pdf ACME サーバーに登録するには、同意する必要があります。 同意しますか? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (はい・いいえ:
ニュース等をメール配信してもいいですか?と聞かれます。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: ~和訳~ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 最初の証明書が正常に発行されたら、Let's Encrypt プロジェクトの創設パートナーであり、 Certbot を開発する非営利団体である Electronic Frontier Foundation と電子メール アドレスを共有してもよろしいでしょうか? Web の暗号化に関する取り組み、EFF ニュース、キャンペーン、デジタルの自由をサポートする方法について電子メールをお送りしたいと考えています。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (はい・いいえ:
ドメイン名を求められるので、SSL認証したいドメインを入力してエンター。
Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel): ~和訳~ ドメイン名を入力してください (カンマまたはスペースで区切ります) (キャンセルするには「c」と入力します):
ドキュメントルートの入力を求められるので、index.html等が置いてあるフォルダのパスを入力します。デフォルトから変えていなければ/var/www/html/です。
Performing the following challenges: http-01 challenge for example.com Input the webroot for example.com: (Enter 'c' to cancel): /var/www/html/ ~和訳~ 次のチャレンジを実行します。 example.comのhttp-01チャレンジ example.comのウェブルートを入力してください。(キャンセルするには「c」と入力します):
以下のメッセージが表示されれば認証完了です。証明書とチェーン、キーファイルの保存場所は後で使うのでメモ帳等にコピーしておいてください。
Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your certificate will expire on 2023-10-15. 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" - 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/example.com/fullchain.pem キー ファイルは次の場所に保存されています。 /etc/letsencrypt/live/example.com/privkey.pem 証明書の有効期限は 2023 年 10 月 15 日に切れます。 今後、この証明書の新しいバージョンまたは調整されたバージョンを取得するには、certbot を再度実行するだけです。 証明書の *すべて* を非対話的に更新するには、「certbot renew」を実行します。 Certbot が気に入った場合は、次の方法で私たちの取り組みをサポートすることを検討してください。 ISRG / Let's Encrypt への寄付: https://letsencrypt.org/donate EFFへの寄付: https://eff.org/donate-le
SSLの有効化
SSLの認証が出来たのでサーバーに適用していきます。
以下のコマンドを実行します。($がついているのがコマンドです)
& sudo a2enmod ssl Considering dependency setenvif for ssl: Module setenvif already enabled Considering dependency mime for ssl: Module mime already enabled Considering dependency socache_shmcb for ssl: Enabling module socache_shmcb. Enabling module ssl. See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates. To activate the new configuration, you need to run: systemctl restart apache2 $ sudo a2ensite default-ssl Enabling site default-ssl. To activate the new configuration, you need to run: systemctl reload apache2
次に以下のコマンドで設定ファイルをバックアップした上で開きます。
sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.org sudo nano /etc/apache2/sites-available/default-ssl.conf
以下の3点を変更します。
SSLEngine onはもとからこの記述になっていましたが念のため。
証明書とチェーン、キーファイルのパスはメモしておいたものを使用します。
※Ctrl+Sで保存、Ctrl+Xで終了
# SSL Engine Switch: # Enable/Disable SSL for this virtual host. SSLEngine on
#SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem #SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
#SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
設定ファイルが変更出来たらapache2を再起動します。
再起動後、「https://」でアクセス出来れば成功です。
SSL証明書の自動更新
今回取得した証明書の有効期限は90日なので、定期的に更新する必要があります。
以下のコマンドを実行すると設定はそのままで更新することが出来ます。(このコマンドは有効期限が1か月未満のときのみ更新を行うようで、今回は「更新の必要なし」とメッセージが出ています)
$ sudo certbot renew Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/example.com.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cert not yet due for renewal - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The following certificates are not due for renewal yet: /etc/letsencrypt/live/example.com/fullchain.pem expires on 2023-10-15 (skipped) No renewals were attempted. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
このコマンドをcrontabで定期実行させます。以下のコマンドでcrontabの変種画面を開きます。
sudo crontab -e
以下の文を末尾に追記します。毎月1日の朝5時に更新する設定となります。
実行ログは/var/log/certbot.logに保存されます。
0 5 1 * 7 certbot renew >> /var/log/certbot.log 2>&1
ディスカッション
コメント一覧
まだ、コメントがありません