Contents
1.SSL証明書を取得する ( Let's Encrypt )
最新のopen sslをインストールしておく
1 |
# pacman -S openssl |
1.1 事前準備
1.パッケージ管理システムSnappyインストール
Let’s EncryptのSSL証明書発行ツール「certbot」は2021年以降は「snap」を利用したインストールが推奨されていますので、まずSnapdをインストールします。
1 2 3 |
$ git clone https://aur.archlinux.org/snapd.git $ cd snapd $ makepkg -si |
メインのスナップ通信ソケットを管理するsystemdユニットを有効化する
1 2 |
# systemctl enable --now snapd.socket Created symlink /etc/systemd/system/sockets.target.wants/snapd.socket → /usr/lib/systemd/system/snapd.socket. |
クラシックスナップのサポートを有効にする
1 |
# ln -s /var/lib/snapd/snap /snap |
バージョン確認
1 2 3 4 5 6 |
# snap --version snap 2.61-2 snapd 2.61-2 series 16 arch - kernel 6.6.7-arch1-1 |
ログアウトして再度ログインするか、システムを再起動して、snapのパスが正しく更新されていることを確認
2.certbot パッケージインストール
1 2 |
# snap install --classic certbot certbot 2.8.0 from Certbot Project (certbot-eff?) installed |
/snap/bin/certbotへのシンボリックリンクを作成
1 |
# ln -s /snap/bin/certbot /usr/bin/certbot |
確認する
1 2 3 4 5 |
# ls -la /usr/bin/certbot lrwxrwxrwx 1 root root 17 Dec 20 18:27 /usr/bin/certbot -> /snap/bin/certbot # ls -la /snap/bin/certbot lrwxrwxrwx 1 root root 13 Dec 20 18:27 /snap/bin/certbot -> /usr/bin/snap |
1.2 証明書の取得
1 |
# certbot certonly --webroot -w /srv/[FQDN] -d [FQDN] |
初回のみメールアドレスの登録と利用条件への同意が必要
受信可能なメールアドレスを指定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
Saving debug log to /var/log/letsencrypt/letsencrypt.log Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): <mail address> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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: y - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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: y Account registered. Requesting a certificate for <FQDN> Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/<FQDN>/fullchain.pem Key is saved at: /etc/letsencrypt/live/<FQDN>/privkey.pem This certificate expires on 2024-03-19. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. We were unable to subscribe you the EFF mailing list because your e-mail address appears to be invalid. You can try again later by visiting https://act.eff.org. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
1.2 証明書を自動更新 (Let's Encrypt)
①登録前のテスト
まず以下の--dry-runオプションを使って自動更新をテストしてみる。このオプションでは、証明書は更新されずに動作確認のみ実施されるため、証明書の取得回数制限に引っかかる心配もない
1 |
# certbot renew --dry-run |
②Snap版certbotをインストールすると、証明書自動更新機能も合わせてインストールされます
1 2 3 4 5 6 7 8 9 10 11 |
# systemctl list-timers | less NEXT LEFT LAST PASSED UNIT ACTIVATES Wed 2023-12-20 22:38:00 JST 4h 5min - - snap.certbot.renew.timer snap.certbot.renew.service Thu 2023-12-21 00:00:00 JST 5h 27min Wed 2023-12-20 08:40:03 JST - shadow.timer shadow.service Thu 2023-12-21 01:09:28 JST 6h Wed 2023-12-20 09:27:35 JST - man-db.timer man-db.service Thu 2023-12-21 13:21:47 JST 18h Wed 2023-12-20 13:21:47 JST 5h 10min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service Sat 2023-12-30 20:16:50 JST 1 week 3 days Mon 2023-12-18 17:47:25 JST - archlinux-keyring-wkd-sync.timer archlinux-keyring-wkd-sync.service - - Wed 2023-12-20 11:45:00 JST - spamassassin-update.timer - 6 timers listed. Pass --all to see loaded but inactive timers, too. |
snap.certbot.renew.timer が登録されています
snap.certbot.renew.timer のユニットファイルを確認
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# vim /etc/systemd/system/snap.certbot.renew.timer [Unit] # Auto-generated, DO NOT EDIT Description=Timer renew for snap application certbot.renew Requires=var-lib-snapd-snap-certbot-3566.mount After=var-lib-snapd-snap-certbot-3566.mount X-Snappy=yes [Timer] Unit=snap.certbot.renew.service OnCalendar=*-*-* 05:54 OnCalendar=*-*-* 22:38 [Install] WantedBy=timers.target |
上記設定によるとOnCalenderパラメータで指定されている毎日5時54分と22時38分に更新を試みます(ただし、更新ごとにランダムに設定時刻が変更します)
snap.certbot.renew.serviceのユニットファイルを確認
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# vim /etc/systemd/system/snap.certbot.renew.service [Unit] # Auto-generated, DO NOT EDIT Description=Service for snap application certbot.renew Requires=var-lib-snapd-snap-certbot-3566.mount Wants=network.target After=var-lib-snapd-snap-certbot-3566.mount network.target snapd.apparmor.service X-Snappy=yes [Service] EnvironmentFile=-/etc/environment ExecStart=/usr/bin/snap run --timer="00:00~24:00/2" certbot.renew SyslogIdentifier=certbot.renew Restart=no WorkingDirectory=/var/snap/certbot/3566 TimeoutStopSec=30 Type=oneshot |
ただし、証明書を使用するWebサーバーの再起動は行われませんので、更新後に自動的に実行されるスクリプトを設定します
1 2 3 4 |
# vim /etc/letsencrypt/renewal-hooks/post/web_restart.sh #!/bin/bash systemctl reload httpd |
1 |
# chmod 755 /etc/letsencrypt/renewal-hooks/post/web_restart.sh |
2. Apache のhttps 化
2.1 ssl.conf ファイルの編集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# vim /etc/httpd/conf/extra/httpd-ssl.conf ●124 行目 変更 DocumentRoot "/srv/<FQDN>" ●125 行目 変更 ServerName <FQDN>:443 ●126 行目 変更 ServerAdmin <Mail Address> ●127 行目 変更 ErrorLog "/var/log/httpd/[FQDN]-error_log" ●144行目 コメントにして147行目に追加 # SSLCertificateFile "/etc/httpd/conf/server.crt" SSLCertificateFile "/etc/letsencrypt/live/<FQDN>/cert.pem" ●154行目 コメントにして157行目に追加 # SSLCertificateKeyFile "/etc/httpd/conf/server.key" SSLCertificateKeyFile "/etc/letsencrypt/live/<FQDN>/privkey.pem" ●166行目 に追加 #SSLCertificateKeyFile "/etc/httpd/conf/server.key" SSLCertificateChainFile "/etc/letsencrypt/live/<FQDN>/chain.pem" ●256-260行目 に追加 <Directory "/srv/[FQDN]"> Options FollowSymLinks AllowOverride All Require all granted </Directory> ●末尾の2行をコメントアウトにし下に追加 CustomLog "/var/log/httpd/[FQDN]-access_log" common |
httpd.conf編集
1 2 3 4 5 6 7 8 9 10 |
# vim /etc/httpd/conf/httpd.conf 93行目コメント解除 LoadModule socache_shmcb_module modules/mod_socache_shmcb.so 155行目コメント解除 LoadModule ssl_module modules/mod_ssl.so 191行目コメント解除 LoadModule rewrite_module modules/mod_rewrite.so 533行目コメント解除 Include conf/extra/httpd-ssl.conf |
Apache を再起動します。
1 |
# systemctl restart httpd |
UFWでhttpsを許可する
1 2 3 |
# ufw allow https # ufw reload |
2.2 HTTP 通信を HTTPS へリダイレクト
.htaccessを/srv/[FQDN]/ 配下に作成
.htaccessの内容
1 2 3 |
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] |