Contents
1.SSL証明書を取得する ( Let's Encrypt )
最新のopen sslをインストールしておく
|
1 |
# dnf install openssl-devel |
1.1 事前準備
1.パッケージ管理システムSnappyインストール
Let’s EncryptのSSL証明書発行ツール「certbot」は2021年以降は「snap」を利用したインストールが推奨されていますので、まずSnapdをインストールします。(dnfまたはyumでの従来の方法でもインストールできます)
|
1 2 3 |
# dnf install epel-release # dnf upgrade # dnf -y install snapd |
メインのスナップ通信ソケットを管理する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 |
snapd のバージョンを最新にする
|
1 |
# snap install core |
上記でエラーになる場合は、代わりに以下のコマンドを実行する(hello-world というパッケージがインストールされるのに伴い、core パッケージもインストールされます)
|
1 |
# snap install hello-world |
core パッケージを更新
|
1 |
# snap refresh core |
バージョン確認
|
1 2 3 4 5 6 7 |
# snap --version snap 2.72-1.el9 snapd 2.72-1.el9 series 16 almalinux 9.7 kernel 5.14.0-611.16.1.el9_7.x86_64 architecture amd64 |
ログアウトして再度ログインするか、システムを再起動して、snapのパスが正しく更新されていることを確認
2.certbot パッケージインストール
|
1 2 |
# snap install --classic certbot certbot 5.2.2 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 Apr 12 13:44 /usr/bin/certbot -> /snap/bin/certbot # ls -la /snap/bin/certbot lrwxrwxrwx 1 root root 13 Apr 12 13:43 /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): <Administrator e-mail address> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.4-April-3-2024.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 2026-04-01. 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サーバー機能を使用
・-d [証明書を取得したいFQDN]
・FQDN (Fully Qualified Domain Name) : ホスト名.ドメイン名を省略なしで表記
・証明書を取得したいFQDNが複数ある場合は、-d [証明書を取得したいFQDN] を複数指定
|
1 |
# certbot certonly --standalone -d <FQDN> |
取得済みの証明書を更新する
# 有効期限が 30日未満の証明書を全て更新
# 有効期限の残り日数に関わらず更新したい場合は [--force-renewal] を合わせて指定
|
1 |
# certbot [--force-renewal] renew |
1.2 証明書を自動更新 (Let's Encrypt)
①登録前のテスト
まず以下の--dry-runオプションを使って自動更新をテストしてみる。このオプションでは、証明書は更新されずに動作確認のみ実施されるため、証明書の取得回数制限に引っかかる心配もない
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# certbot renew --dry-run 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 |
# systemctl list-timers | less NEXT LEFT LAST PASSED UNIT ACTIVATES Thu 2026-01-01 10:50:00 JST 6min left Thu 2026-01-01 10:40:01 JST 3min 15s ago sysstat-collect.timer sysstat-collect.service Thu 2026-01-01 10:55:00 JST 11min left Thu 2026-01-01 10:25:04 JST 18min ago pmlogger_check.timer pmlogger_check.service Thu 2026-01-01 10:55:10 JST 11min left Thu 2026-01-01 10:25:14 JST 18min ago pmlogger_farm_check.timer pmlogger_farm_check.service Thu 2026-01-01 10:58:00 JST 14min left Thu 2026-01-01 10:28:00 JST 15min ago pmie_check.timer pmie_check.service Thu 2026-01-01 10:58:10 JST 14min left Thu 2026-01-01 10:28:10 JST 15min ago pmie_farm_check.timer pmie_farm_check.service Thu 2026-01-01 11:15:11 JST 31min left Thu 2026-01-01 09:39:43 JST 1h 3min ago dnf-makecache.timer dnf-makecache.service Thu 2026-01-01 22:14:00 JST 11h left - - snap.certbot.renew.timer snap.certbot.renew.service Fri 2026-01-02 00:00:00 JST 13h left Thu 2026-01-01 08:44:29 JST 1h 58min ago logrotate.timer logrotate.service Fri 2026-01-02 00:00:00 JST 13h left Thu 2026-01-01 08:44:29 JST 1h 58min ago mlocate-updatedb.timer mlocate-updatedb.service Fri 2026-01-02 00:00:00 JST 13h left - - sa-update.timer sa-update.service Fri 2026-01-02 00:00:00 JST 13h left Thu 2026-01-01 08:44:29 JST 1h 58min ago unbound-anchor.timer unbound-anchor.service Fri 2026-01-02 00:07:00 JST 13h left - - sysstat-summary.timer sysstat-summary.service Fri 2026-01-02 00:08:00 JST 13h left Thu 2026-01-01 08:44:56 JST 1h 58min ago pmie_daily.timer pmie_daily.service Fri 2026-01-02 00:10:00 JST 13h left Thu 2026-01-01 08:44:57 JST 1h 58min ago pmlogger_daily.timer pmlogger_daily.service Fri 2026-01-02 08:59:13 JST 22h left Thu 2026-01-01 08:59:13 JST 1h 44min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service Sun 2026-01-04 01:00:00 JST 2 days left Tue 2025-12-30 18:49:06 JST 1 day 15h ago raid-check.timer raid-check.service 16 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 16 |
# 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-5234.mount After=var-lib-snapd-snap-certbot-5234.mount X-Snappy=yes [Timer] Unit=snap.certbot.renew.service OnCalendar=*-*-* 06:19 OnCalendar=*-*-* 22:14 [Install] WantedBy=timers.target |
上記設定によるとOnCalenderパラメータで指定されている毎日6時19分と22時14分に更新を試みます(ただし、更新ごとにランダムに設定時刻が変更します)
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-5234.mount Wants=network.target After=var-lib-snapd-snap-certbot-5234.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/5234 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 |
# 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 |
# 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 2026-04-01. 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
3.2 Postfixの設定
|
1 |
# vi /etc/postfix/main.cf |
● 709, 715行目あたり : コメント化
#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]/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.[domain]/privkey.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
|
1 |
# vi /etc/postfix/master.cf |
● 17-20行目 : コメント解除
submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
# -o smtpd_tls_auth_only=yes
● 29-32行目 : コメント解除
smtps inet n - n - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
# -o smtpd_reject_unlisted_recipient=no
3.3 Dovecotの設定
|
1 |
# vi /etc/dovecot/conf.d/10-ssl.conf |
● 8行目:確認
ssl = yes
● 14,15行目:コメントにして下記証明書/鍵ファイル指定追加
ssl_cert = </etc/letsencrypt/live/mail.[domain]/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.[domain]/privkey.pem
firewallでPort 587を許可する
|
1 2 |
# firewall-cmd --add-port=587/tcp --permanent # firewall-cmd --reload |
|
1 |
# 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


