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


クラウディア 


1. 概要
2. 状況
3. 対策
4. 参考サイト

1. 概要

 発生は、2025年9月9日です。

2. 状況

 「cron」に仕込んである「certbot」が、こけております。

Traceback (most recent call last):
  File "/usr/local/bin/certbot", line 5, in <module>
    from certbot.main import main
  File "/usr/local/lib/python3.11/site-packages/certbot/main.py", line 6, in <module>
    from certbot._internal import main as internal_main
  File "/usr/local/lib/python3.11/site-packages/certbot/_internal/main.py", line 20, in <module>
    from cryptography import x509
  File "/usr/local/lib/python3.11/site-packages/cryptography/x509/__init__.py", line 7, in <module>
    from cryptography.x509 import certificate_transparency, verification
  File "/usr/local/lib/python3.11/site-packages/cryptography/x509/certificate_transparency.py", line 8, in <module>
    from cryptography.hazmat.bindings._rust import x509 as rust_x509
RuntimeError: OpenSSL 3.0's legacy provider failed to load. This is a fatal error by default, but cryptography supports running without legacy algorithms by setting the environment variable CRYPTOGRAPHY_OPENSSL_NO_LEGACY. If you did not expect this error, you have likely made a mistake with your OpenSSL configuration.
 「ChatGPT」くんに言われるがまま、下記のコマンドを実行します。

$ pkg info | grep openssl
openssl-3.0.17,1               TLSv1.3 capable SSL and crypto library
py311-openssl-25.0.0_1,1       Python interface to the OpenSSL library
 その結果。
FreeBSD 13.4 の base は OpenSSL 1.1.1 ですが、あなたの環境には

	・openssl-3.0.17,1 (ports/pkg 版 OpenSSL 3.0)
	・py311-openssl

が入っており、cryptography も OpenSSL 3 にリンクしている状態です。
つまり OpenSSL 3 が使われているのに、legacy provider が無効 なのでエラーになっています。
 なんですと。  解消方法として。 ・OpenSSL 3 の legacy provider を有効化 ・legacy provider を使わずに動かす ・cryptography を再ビルド  1番目の「OpenSSL 3」の「legacy provider」を有効化ちゅうのは。

/usr/local/etc/ssl/openssl.cnf
 に、下記を記述するらしい。

openssl_conf = openssl_init

[openssl_init]
providers = provider_sect

[provider_sect]
default = default_sect
legacy = legacy_sect

[default_sect]
activate = 1

[legacy_sect]
activate = 1
 しかし、これは、やってみていないですが、面倒。  3番目の「cryptography」を再ビルドちゅうのは(これが推奨らしい)。

/etc/make.conf
 に。

DEFAULT_VERSIONS+= ssl=openssl30
 を記述して。

/usr/ports/security/py-cryptography
 をビルドしなおす。  ちゅうんですが、言われるとおりに、やろうとしたら。

make config
 でエラーになるのでやめました。  2番目のを採用します。

3. 対策

 「certbot」をシェルスクリプトで起動しているのですが。  冒頭に。

#!/bin/sh
export CRYPTOGRAPHY_OPENSSL_NO_LEGACY=1
 と記述します。  これで、うまく動作しました。  気になったのは。  2行目が、このまま書いて、「#」でコメントアウトされていたのですな。  どうも、つけたり外したりしている風がある。  なんかの影響で、有効にしたり、無効にしたりしているような気がする。  安定してほしいなぁ。

4. 参考サイト

 本ページは、「ChatGPT」くんを参考にさせていただきました。

AbemaTV 無料体験