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 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 |
バージョン確認
1 2 3 4 5 6 |
# snap --version snap 2.68.3-0.el9 snapd 2.68.3-0.el9 series 16 miraclelinux 9.6 kernel 5.14.0-570.17.1.el9_6.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 Sep 10 17:35 /usr/bin/certbot -> /snap/bin/certbot # ls -la /snap/bin/certbot lrwxrwxrwx 1 root root 13 Sep 10 17:34 /snap/bin/certbot -> /usr/bin/snap |
1.2 証明書の取得
1 |
# certbot certonly --webroot -w /var/www/html/[FQDN] -d [FQDN] |
初回のみメールアドレスの登録と利用条件への同意が必要
受信可能なメールアドレスを指定
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address or hit Enter to skip.
(Enter 'c' to cancel): [E-mail address]
------------------------------------------------------------------------------------------------------------
Please read the Terms of Service at:
https://letsencrypt.org/documents/LE-SA-v1.5-February-24-2025.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-15.
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
---------------------------------------------------------------------------------------------------------
「Successfully received certificate.」と表示されれば成功
メッセージ中に記載の通り [/etc/letsencrypt/live/[FQDN]/] 配下に次の証明書が取得されている
cert.pem ⇒ SSLサーバー証明書(公開鍵含む)
chain.pem ⇒ 中間証明書
fullchain.pem ⇒ cert.pem と chain.pem が結合されたファイル
privkey.pem ⇒ 公開鍵に対する秘密鍵
インターネット側から当作業を実施するサーバーの 80 ポート宛てにアクセス可能であることは前提となります
FQDN (Fully Qualified Domain Name) : ホスト名.ドメイン名を省略なしで表記
証明書を取得したいFQDNが複数ある場合は、-d [証明書を取得したいFQDN] を複数指定
取得済みの証明書を更新する
# 有効期限が 30日未満の証明書を全て更新
# 有効期限の残り日数に関わらず更新したい場合は [--force-renewal] を合わせて指定
# certbot --force-renewal renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log
---------------------------------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/[FQDN].conf
---------------------------------------------------------------------------------------------------------
Renewing an existing certificate for [FQDN]
---------------------------------------------------------------------------------------------------------
Congratulations, all renewals succeeded:
/etc/letsencrypt/live/[FQDN]/fullchain.pem (success)
1.2 証明書を自動更新 (Let's Encrypt)
①登録前のテスト
まず以下の--dry-runオプションを使って自動更新をテストしてみる。このオプションでは、証明書は更新されずに動作確認のみ実施されるため、証明書の取得回数制限に引っかかる心配もない
1 |
# 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 |
# systemctl list-timers | less NEXT LEFT LAST PASSED UNIT ACTIVATES Thu 2025-07-17 15:10:00 JST 5min left Thu 2025-07-17 15:00:01 JST 4min 9s ago sysstat-collect.timer sysstat-collect.service Thu 2025-07-17 15:25:00 JST 20min left Thu 2025-07-17 14:55:01 JST 9min ago pmlogger_check.timer pmlogger_check.service Thu 2025-07-17 15:25:10 JST 20min left Thu 2025-07-17 14:55:14 JST 8min ago pmlogger_farm_check.timer pmlogger_farm_check.service Thu 2025-07-17 15:25:52 JST 21min left - - dnf-makecache.timer dnf-makecache.service Thu 2025-07-17 15:28:00 JST 23min left Thu 2025-07-17 14:58:05 JST 6min ago pmie_check.timer pmie_check.service Thu 2025-07-17 15:28:10 JST 23min left Thu 2025-07-17 14:58:14 JST 5min ago pmie_farm_check.timer pmie_farm_check.service Thu 2025-07-17 18:08:00 JST 3h 3min left - - snap.certbot.renew.timer snap.certbot.renew.service Fri 2025-07-18 00:00:00 JST 8h left Thu 2025-07-17 08:30:12 JST 6h ago logrotate.timer logrotate.service Fri 2025-07-18 00:00:00 JST 8h left Thu 2025-07-17 08:30:12 JST 6h ago mlocate-updatedb.timer mlocate-updatedb.service Fri 2025-07-18 00:00:00 JST 8h left - - sa-update.timer sa-update.service Fri 2025-07-18 00:07:00 JST 9h left - - sysstat-summary.timer sysstat-summary.service Fri 2025-07-18 00:08:00 JST 9h left Thu 2025-07-17 08:30:15 JST 6h ago pmie_daily.timer pmie_daily.service Fri 2025-07-18 00:10:00 JST 9h left Thu 2025-07-17 08:30:15 JST 6h ago pmlogger_daily.timer pmlogger_daily.service Fri 2025-07-18 14:53:54 JST 23h left Thu 2025-07-17 14:53:54 JST 10min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service 14 timers listed. Pass --all to see loaded but inactive timers, too. |
snap.certbot.renew.timer が登録されています
snap.certbot.renew.timer のユニットファイルを確認
1 |
# vi /etc/systemd/system/timers.target.wants/snap.certbot.renew.timer |
#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
Unit=snap.certbot.renew.service
OnCalendar=--* 06:07
OnCalendar=--* 18:08 [Install]
WantedBy=timers.target
上記設定によるとOnCalenderパラメータで指定されている毎日6時7分と18時8分に更新を試みます(ただし、更新ごとにランダムに設定時刻が変更します)
snap.certbot.renew.serviceのユニットファイルを確認
1 |
# vi /etc/systemd/system/snap.certbot.renew.service |
#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
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 |
# vi /etc/httpd/conf.d/vhost.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<VirtualHost *:80> DocumentRoot /var/www/html/miracle.korodes.com ServerName miracle.korodes.com ServerAdmin mhori@hera.eonet.ne.jp ErrorLog logs/miracle.korodes.com.error_log CustomLog logs/miracle.korodes.com.access_log combined #下記3行追加 RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </VirtualHost> <Directory "/var/www/html/miracle.korodes.com"> 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] |
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for mail.[Domain]
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/mail.[Domain]/fullchain.pem
Key is saved at: /etc/letsencrypt/live/mail.[Domain]/privkey.pem
This certificate expires on 2025-10-15.
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
----------------------------------------------------------------------------------------------------------
Apache 再起動
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 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 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 17-20行目 : コメント解除 submission inet n - n - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes 29-32行目 : コメント解除 smtps 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 9行目:確認 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 |
# 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
