SSL 無料証明書(Let's Encrypt) - トラブルシュート - Invalid Content-Type header


 クラウディア


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」を再インストール後。  うまく動作するようになりました。  すでに、期限の切れた証明書もあったのですが、やっと更新することができました。

ハイスピードプラン