LoginSignup
6
2
この記事誰得? 私しか得しないニッチな技術で記事投稿!

新しいPythonで古いTLSv1やSSLv3を使いたい

Last updated at Posted at 2023-06-15

概要

Python3.10以降OpenSSLが1.1以上必須になったため、デフォルトではTLSv1が使えません。
OSのOpenSSLではたぶんSSLv3は無効にされているので使えません。

もちろん使えなくていいのですが、古いSSLv3を使っているサーバーがあるのかどうかをチェックする場合や大人の事情で必要な場合もあるでしょう。

ということで、OpenSSLとPythonを自前でインストールします。

ポイントは

  • OpenSSLをSSLv3が使えるようにコンパイルする
  • SSLv3、TLS1や脆弱なcipherが使えるように設定する
  • Pythonを上でコンパイルしたOpenSSLを使用するようにしてコンパイルする
  • CipherをpythonのものではなくOpenSSLのものを使用するようにしてコンパイルする

です。

今回はOpenSSL3.0.8、Python3.11.3の組み合わせで書きましたが、OpenSSL1.1や3.1、Python3.10との組み合わせでも動作します。

必要なライブラリのインストール

debian11の場合。他のOSは適宜変更してください

apt install -y wget make gcc g++ perl libffi-dev xz-utils libz-dev ca-certificates libreadline-dev

OpenSSLのビルド

wget https://www.openssl.org/source/openssl-3.0.8.tar.gz
tar xzf openssl-3.0.8.tar.gz
cd openssl-3.0.8
./config --prefix=/usr/local/openssl --openssldir=/usr/local/ssl enable-ssl3 enable-ssl3-method enable-weak-ssl-ciphers
make
make install

cd /usr/local/openssl
ln -s lib64 lib

mv /usr/local/ssl /usr/local/ssl.org
cp -a /etc/ssl /usr/local/

OpenSSLの設定ファイルの変更

/usr/local/ssl/openssl.cnf
...
[system_default_sect]
# MinProtocol = TLSv1.2  <-- コメントアウト
# CipherString = DEFAULT@SECLEVEL=2  <-- コメントアウト
MinProtocol = None  <-- 追加
CipherString = DEFAULT@SECLEVEL=0  <-- 追加

Pythonのビルド

wget https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tgz
tar xvzf Python-3.11.3.tgz
cd Python-3.11.3
./configure --with-openssl=/usr/local/openssl --with-openssl-rpath=auto --enable-optimizations --with-ssl-default-suites=openssl
make altinstall

--with-ssl-default-suites=opensslを付けてコンパイルするのがポイントです。これがないと、OpenSSLライブラリはTLS1.2未満に対応していても、Pythonの標準の厳しいCipher Suiteを使用してしまいTLS1.2未満が使用できません。

確認

>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 3.0.8 7 Feb 2023'
>>> ssl.HAS_TLSv1
True
>>> ssl.HAS_TLSv1_1
True
>>> ssl.HAS_TLSv1_2
True
>>> ssl.HAS_TLSv1_3
True
>>> ssl.HAS_SSLv3
True

いい感じです。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2