Debian11.3 : Let's Encrypt WEB , MailサーバーSSL化

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

1.1 事前準備

①mod_sslを有効にする

# a2enmod ssl

②Let's Encrypt証明書を取得するためのクライアントツールをインストール

# apt -y install certbot

1.2 Let's Encrypt証明書の取得

Apache httpd や Nginx などの Webサーバーが稼働していることが前提となります。
作業を実施するサーバーで Webサーバーが稼働していない場合は 下記※の手順を実行。
また、インターネット側から、作業を実施するサーバー (証明書を取得したい FQDN のサーバー) の 80 ポート宛てにアクセス可能であることも前提です。

# certbot certonly --webroot -w /var/www/html/<Domain name> -d <Domain name>

# [--webroot] 指定で稼働中 Web サーバーの公開ディレクトリ配下を認証用の一時領域に使用
# -w [ドキュメントルート] -d [証明書を取得したいFQDN] # FQDN (Fully Qualified Domain Name) : ホスト名.ドメイン名を省略なしで表記
# ドキュメントルートはバーチャルホストで複数のホスト定義がある場合、該当するホスト定義のものを指定
# ドキュメントルート指定の動作としては, 指定したドキュメントルート配下に
# [.well-known] ディレクトリが作成され, 認証用のファイルが自動的,一時的に設置されるのみ
# 初回のみメールアドレスの登録と利用条件への同意が必要
# 受信可能なメールアドレスを指定

 Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel):<Email-address>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.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 <Domain name>
Performing the following challenges:
http-01 challenge for <Domain name>
Using the webroot path /var/www/html/<Domain name> for all unmatched domains.
Waiting for verification...
Cleaning up challenges
Subscribe to the EFF mailing list (email: <Email-address>).
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.
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/<Domain name>/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/<Domain name>/privkey.pem
Your certificate will expire on 2022-08-27. To obtain a new or
tweaked version of this certificate in the future, simply run
certbot again. To non-interactively renew *all* of your
certificates, run "certbot renew"
- 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
「Congratulations! Your certificate and chain have been saved at:」と表示されれば成功

# メッセージ中に記載の通り [/etc/letsencrypt/live/<Domain name>/] 配下に次の証明書が取得されている
# 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] を複数指定

# certbot certonly --standalone -d <Domain name>

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

# certbot  [--force-renewal]  renew

2. Apache2にSSL/TLS(Let's Encrypt) の設定

①Apache2のSSL関連設定ファイルの編集

# cd /etc/apache2/sites-available/
# cp default-ssl.conf hoge.com-ssl.conf ← hoge.com-sslは任意の名称でよい
# vi hoge.com-ssl.conf
# 3行目:管理者アドレス変更
ServerAdmin <管理者Email Address>>
# 5行目:変更
DocumentRoot /var/www/html/<domain name>/
# 13,14行目:変更
ErrorLog ${APACHE_LOG_DIR}/<domain name>.error.log
CustomLog ${APACHE_LOG_DIR}/<domain name>.access.log combined
# 32,33行目:[1]で取得した証明書に変更
SSLCertificateFile      /etc/letsencrypt/live/<domain name>/cert.pem
SSLCertificateKeyFile   /etc/letsencrypt/live/<domain name>/privkey.pem
# 42行目:コメント解除して[1]で取得したチェインファイルに変更
SSLCertificateChainFile /etc/letsencrypt/live/<domain name>/chain.pem

②設定ファイルの反映と有効化

# a2ensite hoge.com-ssl.conf
Enabling site hoge.com-ssl.conf.
To activate the new configuration, you need to run:
systemctl reload apache2
# systemctl restart apache2
#  デフォルト無効化
# a2dissite default-ssl.conf
# systemctl restart apache2

③httpからhttpsリダイレクト

# a2enmod rewrite
次のいずれかの方法

1. .htaccessファイルを作成する方法
.htaccessを/var/www/html/<domain name>/に作成して以下記入
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

2.vhost-yourdomain.conf に記入する方法
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

④設定反映と起動

# a2ensite vhost-yourdomain.conf
# a2enmod ssl
Apache再起動
# systemctl restart apache2

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

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

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

# certbot certonly --standalone -d mail.<domain name>

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

# systemctl stop apache2.service
# certbot certonly --standalone -d mail.<domain name>
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Requesting a certificate for mail.<domain name>
Performing the following challenges:
http-01 challenge for mail.<domain name>
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/mail.<domain name>/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/mail.<domain name>/privkey.pem
Your certificate will expire on 2022-08-27. To obtain a new or
tweaked version of this certificate in the future, simply run
certbot again. To non-interactively renew *all* of your
certificates, run "certbot renew"
- 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の設定

# vi /etc/postfix/main.cf
# 最終行に追記
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
# vi /etc/postfix/master.cf
# 17-20行目 : コメント解除
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
# 29-32行目 : コメント解除
smtps inet n - y - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes

3.3 Dovecotの設定

# vi /etc/dovecot/conf.d/10-ssl.conf
# 6行目:変更
ssl = yes
# 12,13行目:コメント解除して証明書/鍵ファイル指定
ssl_cert = </etc/letsencrypt/live/mail.<domain name>/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.<domain name>/privkey.pem
# systemctl restart postfix dovecot
タイトルとURLをコピーしました