絖綛 N@i.jp  昨日:00031073
 今日:00083524
 総計:00114597
keywords
管理者専用
  Post   Add link   Control Panel 































新しいトピック
最新:04/16 19:55


新しいコメント
最新:07/28 16:47






管理人へMAIL

プライバシーポリシー

Let's EncryptクライアントをcertbotからApacheモジュール mod_md に変えてみた

参照:The Apache HTTP Server


こっちの方が楽かも?


 昨年、突然Let's Encryptの証明書更新が失敗するようになったのですが、引っ越しなどもあって復旧にかなりの時間がかかってしまいました。詳しい原因は不明ですが、Let's EncryptのACMEv2への移行や、それに伴う仕様変更などが原因ではないかと思っています。
 そこで、今後同じようなLet's Encryptの認証の仕組みに仕様変更があっても柔軟に対応できるよう、他のLet's Encryptクライアントも試してみることにしました。具体的にはApacheのモジュール"mod_md"へ移行させてみようと思います。
 手順としては以下のようになります。

  1. Apacheのビルド時に"mod_md"を有効化
  2. 設定ファイルに"mod_md"の設定を追加。先ずはテスト用のURLでFake(偽物)の証明書が取得できるようにする。
  3. 本番用のURLに変更して正式な証明書を取得
  4. cronによるcertbotでの証明書更新を止める

 また、これは自分のための備忘録なので、他のマシン環境では当てはまらない部分もあろうかと思いますのでご容赦ください。

1. Apacheのビルド時に"mod_md"を有効化

 Apacheは現時点での最新版2.4.46を使いました。これのビルド時にmod_mdを有効化します(mod_sslも必要ですが、こちらは既に実施済み)。

./configure 
    --prefix=/usr/local/apache2 
    --enable-dav 
    --enable-md 
    --enable-so 
    --enable-ssl 
    --enable-http2 
    --enable-mods-shared=most 
    --with-apr=/usr/local/apache2 
    --with-apr-util=/usr/local/apache2 
    --with-curl=/usr/local/lib 
    --with-ssl=/usr/local/ssl 
    --with-z=/usr
make

2. 設定ファイルに"mod_md"の設定を追加

 Apacheの設定ファイル"httpd.conf", "extra/httpd-ssl.conf"に"mod_md"の設定を追加します。このとき、もしうまくできなかったら簡単に元に戻せるよう <IfModule> を使うようにしました。
 詳しい設定内容については、他に親切丁寧に解説されているサイトが一杯あるので割愛。
 以下ではMDCertificateAuthorityにテスト用のURLを指定しています。先ずはこれでFake(偽物)の証明書が取得できるか試します。

[httpd.conf]

LoadModule md_module          modules/mod_md.so
〜
<IfModule md_module>
    MDBaseServer            on
    MDCertificateProtocol   ACME
    MDCAChallenges          http-01
    MDRenewMode             auto
    MDPrivateKeys           RSA 2048
    MDRenewWindow           33%
    MDStoreDir              md

# テスト用URL(これでFake証明書が取得できるか試す)
    MDCertificateAuthority https://acme-staging-v02.api.letsencrypt.org/directory
# 本番用URL(正式な証明書を取得する際に使用)
#   MDCertificateAuthority https://acme-v02.api.letsencrypt.org/directory

    MDCertificateAgreement https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf

    MDomain y-naito.ddo.jp
    <VirtualHost *:80>
        ServerName y-naito.ddo.jp
        DocumentRoot "/usr/local/apache2/htdocs"
    </VirtualHost>
</IfModule>

# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf
〜

[extra/httpd-ssl.conf]

##
## SSL Virtual Host Context
##
<VirtualHost _default_:443>
    ServerName y-naito.ddo.jp
    DocumentRoot "/usr/local/apache2/htdocs"
    ServerAdmin mailaddr@xxxx.ne.jp
    SSLEngine on

<IfModule !md_module>
# certbotで取得した証明書。mod_mdが有効の場合は不要
    SSLCertificateFile "/etc/letsencrypt/live/y-naito.ddo.jp/fullchain.pem"
    SSLCertificateKeyFile "/etc/letsencrypt/live/y-naito.ddo.jp/privkey.pem"
</IfModule>

〜
</VirtualHost>

 念のため設定を確認しておきます。

$ sudo /usr/local/apache2/bin/apachectl configtest
Syntax OK

 大丈夫そうですね。この後Apacheを2回再起動します。1回目の再起動でmod_mdが有効になり、"/usr/local/apache2/md"ディレクトリが作成されます。この時点ではApacheのダミー証明書(以下)を使って起動した状態のため、

https接続すると不当なSSL証明書というエラーになります。
 2回目の再起動でFake(偽物)の証明書がLet's Encryptから発行される筈なので、https接続して証明書を確認します。以下のような証明書であればOK。

3. 本番用のURLに変更して正式な証明書を取得

 Fake(偽物)の証明書が取得できていたら正しく設定できていると思われますので、本番用のURLに変更して正式な証明書を取得します。

[httpd.conf]
<IfModule md_module>
〜
# テスト用URL(これでFake証明書が取得できるか試す)
#   MDCertificateAuthority https://acme-staging-v02.api.letsencrypt.org/directory
# 本番用URL(正式な証明書を取得する際に使用)
    MDCertificateAuthority https://acme-v02.api.letsencrypt.org/directory
〜
</IfModule>

 Apacheを再起動する前にFake(偽物)証明書を削除しておく必要があります。

# cd /usr/local/apache2
# rm -rf md/

 この後、前回と同じようにApacheを2回再起動します。1回目の再起動では前回同様Apacheのダミー証明書ですが、2回目の再起動で正式な証明書になっている筈です。

4. cronによるcertbotでの証明書更新を止める

 以前cronで証明書を自動更新するようにした設定を削除します。

 以上で移行作業は完了です。


< 過去の記事 [ 1月の 全てのカテゴリ リスト ] 新しい記事 >

2021 calendar
1月
12
3456789
10111213141516
17181920212223
24252627282930
31


掲示板
最新:08/15 17:19


GsBlog was developed by GUSTAV, Copyright(C) 2003, Web Application Factory All Rights Reserved.