業務用エアコン関連の技術情報、エラーコード、環境問題対策に関する別サイト「エアコンの安全な修理・適切なフロン回収」

RockyLinux9.7 : WEBサーバー、MailサーバーSSL化

1.SSL証明書を取得する ( Let's Encrypt )

最新のopen sslをインストールしておく

1.1 事前準備

1.パッケージ管理システムSnappyインストール
Let’s EncryptのSSL証明書発行ツール「certbot」は2021年以降は「snap」を利用したインストールが推奨されていますので、まずSnapdをインストールします。(dnfまたはyumでの従来の方法でもインストールできます)

メインのスナップ通信ソケットを管理するsystemdユニットを有効化する

クラシックスナップのサポートを有効にする

snapd のバージョンを最新にする

上記でエラーになる場合は、代わりに以下のコマンドを実行する(hello-world というパッケージがインストールされるのに伴い、core パッケージもインストールされます)

core パッケージを更新

バージョン確認

ログアウトして再度ログインするか、システムを再起動して、snapのパスが正しく更新されていることを確認

2.certbot パッケージインストール

/snap/bin/certbotへのシンボリックリンクを作成

確認する

1.2 証明書の取得

初回のみメールアドレスの登録と利用条件への同意が必要
受信可能なメールアドレスを指定

「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] を複数指定

取得済みの証明書を更新する
# 有効期限が 30日未満の証明書を全て更新
# 有効期限の残り日数に関わらず更新したい場合は [--force-renewal] を合わせて指定

1.2 証明書を自動更新 (Let's Encrypt)

①登録前のテスト
まず以下の--dry-runオプションを使って自動更新をテストしてみる。このオプションでは、証明書は更新されずに動作確認のみ実施されるため、証明書の取得回数制限に引っかかる心配もない

②Snap版certbotをインストールすると、証明書自動更新機能も合わせてインストールされます

snap.certbot.renew.timer が登録されています

snap.certbot.renew.timer のユニットファイルを確認

上記設定によるとOnCalenderパラメータで指定されている毎日9時38分と22時14分に更新を試みます(ただし、更新ごとにランダムに設定時刻が変更します)

snap.certbot.renew.serviceのユニットファイルを確認

ただし、証明書を使用するWebサーバーの再起動は行われませんので、更新後に自動的に実行されるスクリプトを設定します

2. Apache のhttps 化

下記をインストールしておく

2.1 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 を再起動します。

Firewallでhttpsを許可する

2.2 HTTP 通信を HTTPS へリダイレクト

バーチャルホスト設定ファイルに追記する

編集内容

<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再起動

3. Mail サーバーにSSL/TLS(Let's Encrypt) の設定

3.1 メールサーバー用証明書の取得

メールサーバー用の証明書を取得するが上記と同様の方法では取得できないので「--standalone」オプションをつけて下記のようにしても失敗する。

一度web サーバーを止めてから行うと下記のとおり成功する

3.2 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

[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の設定

[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を許可する

3.4 Thunderbirdの設定

受信サーバー
Port  :  143
Connection security   :  STARTTLS
Authentication method  :  Normal password

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

タイトルとURLをコピーしました