Contents
1.SSL証明書を取得する ( Let's Encrypt )
1.1 事前準備
1.パッケージ管理システムSnappyインストール
Let’s EncryptのSSL証明書発行ツール「certbot」は2021年以降は「snap」を利用したインストールが推奨されていますので、まずSnapdをインストールします。(dnfまたはyumでの従来の方法でもインストールできます)
| 1 | # dnf -y install snapd | 
メインのスナップ通信ソケットを管理するsystemdユニットを有効化する
| 1 | # systemctl enable --now snapd.socket | 
クラシックスナップのサポートを有効にする
| 1 | # ln -s /var/lib/snapd/snap /snap | 
バージョン確認
| 1 2 3 4 5 6 | # snap --version snap    2.67-0.el10_0 snapd   2.67-0.el10_0 series  16 ol      10.0 kernel  6.12.0-101.33.4.3.el10uek.x86_64 | 
ログアウトして再度ログインするか、システムを再起動して、snapのパスが正しく更新されていることを確認
2.certbot パッケージインストール
| 1 2 | # snap install --classic certbot certbot 4.1.1 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 Nov 30 12:29 /usr/bin/certbot -> /snap/bin/certbot # ls -la /snap/bin/certbot lrwxrwxrwx 1 root root 13 Nov 30 12:29 /snap/bin/certbot -> /usr/bin/snap | 
1.2 証明書の取得
| 1 | # certbot certonly --webroot -w /var/www/html/[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 35 | 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 2025-10-27. 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
「Successfully received certificate.」と表示されれば成功
メッセージ中に記載の通り [/etc/letsencrypt/live/[FQDN]/] 配下に次の証明書が取得されている
cert.pem ⇒ SSLサーバー証明書(公開鍵含む)
chain.pem ⇒ 中間証明書
fullchain.pem ⇒ cert.pem と chain.pem が結合されたファイル
privkey.pem ⇒ 公開鍵に対する秘密鍵
※Webサーバーが稼働していない場合のLet's Encrypt証明書の取得
インターネット側から当作業を実施するサーバーの 80 ポート宛てにアクセス可能であることは前提となります
[--standalone] 指定で 簡易 Webサーバー機能を使用
| 1 | # certbot certonly --standalone -d [FQDN] | 
取得済みの証明書を更新する
# 有効期限が 30日未満の証明書を全て更新
# 有効期限の残り日数に関わらず更新したい場合は [--force-renewal] を合わせて指定
| 1 | # certbot [--force-renewal] renew | 
1.2 証明書を自動更新 (Let's Encrypt)
①登録前のテスト
まず以下の--dry-runオプションを使って自動更新をテストしてみる。このオプションでは、証明書は更新されずに動作確認のみ実施されるため、証明書の取得回数制限に引っかかる心配もない
| 1 | # certbot renew --dry-run | 
| 1 2 3 4 5 6 7 8 9 10 11 12 | Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/[FQDN].conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Account registered. Simulating renewal of an existing certificate for [FQDN] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations, all simulated renewals succeeded:   /etc/letsencrypt/live/[FQDN]/fullchain.pem (success) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
②Snap版certbotをインストールすると、証明書自動更新機能も合わせてインストールされます
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # systemctl list-timers | less NEXT                            LEFT LAST                              PASSED UNIT                         ACTIVATES Tue 2025-07-29 14:40:00 JST     8min Tue 2025-07-29 14:30:00 JST 1min 56s ago sysstat-collect.timer        sysstat-collect.service Tue 2025-07-29 14:55:00 JST    23min Tue 2025-07-29 14:25:00 JST     6min ago pmlogger_check.timer         pmlogger_check.service Tue 2025-07-29 14:55:10 JST    23min Tue 2025-07-29 14:25:10 JST     6min ago pmlogger_farm_check.timer    pmlogger_farm_check.service Tue 2025-07-29 14:58:00 JST    26min Tue 2025-07-29 14:28:00 JST 3min 56s ago pmie_check.timer             pmie_check.service Tue 2025-07-29 14:58:10 JST    26min Tue 2025-07-29 14:28:10 JST 3min 46s ago pmie_farm_check.timer        pmie_farm_check.service Tue 2025-07-29 15:30:20 JST    58min Tue 2025-07-29 13:33:19 JST    58min ago dnf-makecache.timer          dnf-makecache.service Tue 2025-07-29 20:08:00 JST 5h 36min -                                      - snap.certbot.renew.timer     snap.certbot.renew.service Wed 2025-07-30 00:00:00 JST       9h -                                      - sa-update.timer              sa-update.service Wed 2025-07-30 00:00:00 JST       9h -                                      - sysstat-rotate.timer         sysstat-rotate.service Wed 2025-07-30 00:00:00 JST       9h Tue 2025-07-29 08:59:06 JST 5h 32min ago unbound-anchor.timer         unbound-anchor.service Wed 2025-07-30 00:07:00 JST       9h -                                      - sysstat-summary.timer        sysstat-summary.service Wed 2025-07-30 00:08:00 JST       9h Tue 2025-07-29 08:59:09 JST 5h 32min ago pmie_daily.timer             pmie_daily.service Wed 2025-07-30 00:08:02 JST       9h Tue 2025-07-29 09:12:27 JST 5h 19min ago logrotate.timer              logrotate.service Wed 2025-07-30 00:10:00 JST       9h Tue 2025-07-29 08:59:10 JST 5h 32min ago pmlogger_daily.timer         pmlogger_daily.service Wed 2025-07-30 00:38:46 JST      10h Tue 2025-07-29 09:39:08 JST 4h 52min ago plocate-updatedb.timer       plocate-updatedb.service Wed 2025-07-30 09:13:56 JST      18h Tue 2025-07-29 09:13:56 JST 5h 18min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service Sun 2025-08-03 01:00:00 JST   4 days Sun 2025-07-27 16:05:18 JST            - raid-check.timer             raid-check.service Mon 2025-08-04 00:01:47 JST   5 days Mon 2025-07-28 09:48:40 JST            - fstrim.timer                 fstrim.service 18 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 | # vi /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-4737.mount After=var-lib-snapd-snap-certbot-4737.mount X-Snappy=yes [Timer] Unit=snap.certbot.renew.service OnCalendar=*-*-* 10:18 OnCalendar=*-*-* 20:08 [Install] WantedBy=timers.target | 
上記設定によるとOnCalenderパラメータで指定されている毎日10時18分と20時08分に更新を試みます(ただし、更新ごとにランダムに設定時刻が変更します)
snap.certbot.renew.serviceのユニットファイルを確認
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # vi /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-4737.mount Wants=network.target After=var-lib-snapd-snap-certbot-4737.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/4737 TimeoutStopSec=30 Type=oneshot | 
ただし、証明書を使用するWebサーバーの再起動は行われませんので、更新後に自動的に実行されるスクリプトを設定します
| 1 2 3 4 | # vi /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 化
下記をインストールしておく
| 1 | # dnf -y install mod_ssl | 
2.1 ssl.conf ファイルの編集
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # vi /etc/httpd/conf.d/ssl.conf 43 行目 コメント解除して変更 DocumentRoot "/var/www/html/[FQDN]" 44 行目 コメント解除して変更 ServerName [FQDN]:443 85行目 コメントにしてその下に追加 # SSLCertificateFile /etc/pki/tls/certs/localhost.crt SSLCertificateFile /etc/letsencrypt/live/[FQDN]/cert.pem 93行目 コメントにしてその下に追加 # SSLCertificateKeyFile /etc/pki/tls/private/localhost.key SSLCertificateKeyFile /etc/letsencrypt/live/[FQDN]/privkey.pem 103行目 追加 SSLCertificateChainFile /etc/letsencrypt/live/[FQDN]/chain.pem | 
Apache を再起動
| 1 | # systemctl restart httpd | 
Firewallでhttpsを許可する
| 1 2 3 4 | # firewall-cmd --add-service=https --permanent success # firewall-cmd --reload success | 
2.2 HTTP 通信を HTTPS へリダイレクト
バーチャルホスト設定ファイルに追記する
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #  vi /etc/httpd/conf.d/vhost.conf <VirtualHost *:80> DocumentRoot /var/www/html/[FQDN] ServerName [FQDN] ServerAdmin [email address] ErrorLog logs/[FQDN].error_log CustomLog logs/[FQDN].access_log combined RewriteEngine On ←追加 RewriteCond %{HTTPS} off ←追加 RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] ←追加 </VirtualHost> <Directory "/var/www/html/[FQDN]"> Options FollowSymLinks AllowOverride All </Directory> | 
Apache を再起動
| 1 | # systemctl restart httpd | 
3. Mail サーバーにSSL/TLS(Let's Encrypt) の設定
3.1 メールサーバー用証明書の取得
メールサーバー用の証明書を取得するが上記と同様の方法では取得できないので「--standalone」オプションをつけて下記のようにしても失敗する。
| 1 | # certbot certonly --standalone -d mail.[domain name] | 
一度web サーバーを止めてから行うと下記のとおり成功する
| 1 2 | # systemctl stop httpd.service # certbot certonly --standalone -d mail.[domain name] | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Saving debug log to /var/log/letsencrypt/letsencrypt.log Requesting a certificate for mail.[domain name] Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/mail.[domain name]/fullchain.pem Key is saved at:         /etc/letsencrypt/live/mail.[domain name]/privkey.pem This certificate expires on 2025-10-27. 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
| 1 | # systemctl restart httpd | 
3.2 Postfixの設定
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | # vi /etc/postfix/main.cf 718, 724行目 あたり: コメント化 #smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem #smtpd_tls_key_file = /etc/pki/tls/private/postfix.key 最終行に追記 smtpd_use_tls = yes smtp_tls_mandatory_protocols = !SSLv2, !SSLv3 smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3 smtpd_tls_cert_file = /etc/letsencrypt/live/mail.[domain name]/fullchain.pem smtpd_tls_key_file = /etc/letsencrypt/live/mail.[domain name]/privkey.pem smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | # vi /etc/postfix/master.cf 19-22行目 : コメント解除 submission inet n       -       n       -       -       smtpd     -o syslog_name=postfix/submission     -o smtpd_tls_security_level=encrypt     -o smtpd_sasl_auth_enable=yes 38-41行目 : コメント解除 submissions     inet  n       -       n       -       -       smtpd     -o syslog_name=postfix/smtps     -o smtpd_tls_wrappermode=yes     -o smtpd_sasl_auth_enable=yes | 
3.3 Dovecotの設定
| 1 2 3 4 5 6 7 8 9 10 | # vi /etc/dovecot/conf.d/10-ssl.conf 8行目:確認 ssl = yes 14,15行目:コメントにして下に証明書/鍵ファイル指定追加 #ssl_cert = </etc/pki/dovecot/certs/dovecot.pem #ssl_key = </etc/pki/dovecot/private/dovecot.pem ssl_cert = </etc/letsencrypt/live/mail.[domain name]/fullchain.pem ssl_key = </etc/letsencrypt/live/mail.[domain name]/privkey.pem | 
firewallでPort 587を許可する
| 1 2 3 | # firewall-cmd --add-port=587/tcp --permanent # firewall-cmd --reload # systemctl restart postfix dovecot | 
3.4 Thunderbirdの設定
受信サーバー
Port  :  143
Connection security   :  STARTTLS
Authentication method  :  Normal password

送信サーバー
Port   :  587
Connection security   :  STARTTLS
Authentication method  :  Normal password


 
  
  
  
  