- 1. 概要
- 2. 状況
- 3. 対応
1. 概要
2025年2月28日から、発生しています。
そろそろ危ないので、手を打たないといけない。
2. 状況
ログに、こんなのが出ています。
Failed to renew certificate freebsd.sing.ne.jp with error: urn:ietf:params:acme:error:malformed :: The request message was malformed :: Invalid Content-Type header on POST. Content-Type must be "application/jose+json"
/var/log/letsencrypt/letsencrypt.log
を調べてみると、この辺が怪しい。
2025-03-19 11:05:53,209:ERROR:certbot._internal.renewal:Failed to renew certificate freebsdnt.sing.ne.jp with error: urn:ietf:params:acme:error:malformed :: The request message was malformed :: Invalid Content-Type header on POST. Content-Type must be "application/jose+json"
2025-03-19 11:05:53,212:DEBUG:certbot._internal.renewal:Traceback was:
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/certbot/_internal/renewal.py", line 540, in handle_renewal_request
main.renew_cert(lineage_config, plugins, renewal_candidate)
File "/usr/local/lib/python3.11/site-packages/certbot/_internal/main.py", line 1529, in renew_cert
renewed_lineage = _get_and_save_cert(le_client, config, lineage=lineage)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/certbot/_internal/main.py", line 130, in _get_and_save_cert
renewal.renew_cert(config, domains, le_client, lineage)
File "/usr/local/lib/python3.11/site-packages/certbot/_internal/renewal.py", line 399, in renew_cert
new_cert, new_chain, new_key, _ = le_client.obtain_certificate(domains, new_key)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/certbot/_internal/client.py", line 429, in obtain_certificate
orderr = self._get_order_and_authorizations(csr.data, self.config.allow_subset_of_names)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/certbot/_internal/client.py", line 479, in _get_order_and_authorizations
orderr = self.acme.new_order(csr_pem)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/acme/client.py", line 142, in new_order
response = self._post(self.directory['newOrder'], order)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/acme/client.py", line 370, in _post
return self.net.post(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/acme/client.py", line 743, in post
return self._post_once(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/acme/client.py", line 756, in _post_once
response = self._check_response(response, content_type=content_type)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/acme/client.py", line 607, in _check_response
raise messages.Error.from_json(jobj)
acme.messages.Error: urn:ietf:params:acme:error:malformed :: The request message was malformed :: Invalid Content-Type header on POST. Content-Type must be "application/jose+json"
3. 対応
あせって、あれこれ試行錯誤しましたが、解決するまでにずいぶん時間がかかりました(2025年4月10日)。
最終的には、「certbot」関連の「ports」を再インストールするときに見つかりました。
再インストールしたものは、下記のものです(順番どおりに記述)。
/usr/ports/security/py-acme
/usr/ports/security/py-josepy
/usr/ports/sysutils/py-distro
/usr/ports/textproc/py-charset-normalizer
/usr/ports/www/py-requests
/usr/ports/security/py-certbot
これらを、ディレクトリ移動して。
make
make reinstall
しているときに。
「py-requests」のところで、原因らしいものが見つかりました。
「py-urllib3」に、依存しているのですが、これが「py-urllib3-future」と、「conflict」していることがわかりました。
「py-urllib3-future」は、通信モジュールをいじっているときに「py-urllib3」と置き換えたような記憶があります。
結局。
cd /usr/ports/net/py-urllib3-future
make deinstall clean
cd /usr/ports/net/py-urllib3
make
make reinstall
cd /usr/ports/www/py-requests
make
make reinstall
の後に、「py-certbot」を再インストール後。
うまく動作するようになりました。
すでに、期限の切れた証明書もあったのですが、やっと更新することができました。
|