openssl 1.1.1をPython 2.7にインストールするにはどうすればよいですか?


8

Windows 10マシンにPython 2.7.17をインストールしました。その後、次のpythonを実行して、opensslバージョンをテストしたいと思いました。

import ssl
print ssl.OPENSSL_VERSION_INFO

私は取得しています(1, 0, 2, 20, 15) 、私はバージョン1.1.1にアップグレードすることを望んでいました。私が得るピップフリーズを行うと:

cffi==1.14.0
cryptography==2.8
enum34==1.1.6
ipaddress==1.0.23
pycparser==2.19
pyOpenSSL==19.1.0
six==1.14.0

これらは、pyOpenSSLと暗号化の最新のpipのようです。

(git bashの一部として)インストールしたopensslは1.1.1ですが、これはpython内で使用されているバージョンとは異なります。

Pythonに含まれているopensslのバージョンを1.1.1以降にアップグレードするにはどうすればよいですか?

編集: コメントへの応答として、以下はpython -m OpenSSL.debugの結果です:

C:\Users\assaf>python -m OpenSSL.debug
pyOpenSSL: 19.1.0
cryptography: 2.8
cffi: 1.14.0
cryptography's compiled against OpenSSL: OpenSSL 1.1.1d  10 Sep 2019
cryptography's linked OpenSSL: OpenSSL 1.1.1d  10 Sep 2019
Pythons's OpenSSL: OpenSSL 1.0.2t  10 Sep 2019
Python executable: C:\Python27\python.exe
Python version: 2.7.17 (v2.7.17:c2f86d86e6, Oct 19 2019, 21:01:17) [MSC v.1500 64 bit (AMD64)]
Platform: win32
sys.path: ['', 'C:\\WINDOWS\\SYSTEM32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages']

上記のように、暗号化とpyOpenSSLは最新のpipです。


python2.7を使用している理由は何ですか?もはやサポートされていないので、実際にはpython3を使用する必要があります
Uli Sotschok

@UliSotschokので...のpython 3をサポートしていません。このパイソンを使用し、おそらく決してアプリケーション
アサフメンデルソン

の出力はpy -m OpenSSL.debug何ですか?リストされている各モジュールを更新してみましたか?
Arn

OpenSSL 1.1.1を使用したいが使用しないモジュールはどれですか?
CristiFati

@CristiFati私が使用しているアプリケーションはpyOpenSSLを使用しています。前述のように、適切なバージョンの検証は、sslをインポートしてからssl.OPENSSL_VERSION_INFOを出力することによって行われます。1.1.1以降が表示されるはずです
Assaf Mendelson

回答:


4

Python 2.7にsslモジュールの現在のOpenSSL 1.1.1dバージョンを使用させる唯一の方法は、そのバージョンのOpenSSLで再構築することです。* nixプラットフォームの場合、これはそれほど難しくありません。一部の初期構成ファイルを調整するだけです。macOSでの簡単なテストにより、Python 2.7ソースコードは実際にはOpenSSL 1.1.1d APIと互換性があり、有望に見えることがわかりました。

ただし、Windowsの場合、OpenSSL 1.1.1dを使用してPython 2.7を再構築することは困難です。これは、Microsoftのmsbuildに依存makeするビルドシステムは、* nixの-ベースのビルドシステムほど簡単に調整できないためです。関連するVisual Studioソリューション、プロジェクト、プロパティファイルは、PythonのPCbuildサブディレクトリにあります。

さらに、OpenSSL 1.0.2バージョンと1.1.1バージョンの違いは、ライブラリ名も変更されているため、Windowsではわずかに大きくなりますが、* nixバージョンでは同じままです。

PythonのWindows用ビルドシステムに必要な変更は、それほど広範囲ではありません。この回答の下部で説明されている変更を行った後、私はあなたが探しているものを達成できたようです。実際のビルドは、PythonのPCbuildサブディレクトリから次のコマンドを実行して実行できます。

> build --no-tkinter --no-bsddb -e "/p:PlatformToolset=v141"

32ビットのビルドの場合、または

> build --no-tkinter --no-bsddb -e -p x64 "/p:PlatformToolset=v141"

64ビットビルドの場合。--no-オプションには、プロセスをスピードアップとOpenSSLの側面に焦点を当てるために使用されています。v141Visual Studio 2017を表します。これを機能させるには、Visual Studioシェルにいる必要があります。その後、以下は、Python 2.7.17でのOpenSSL 1.1.1dの使用を示すテストを再現しました。

> win32\python.exe
Python 2.7.17 (tags/v2.7.17-dirty:c2f86d86e6, Feb 20 2020, 01:04:36) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> print ssl.OPENSSL_VERSION
OpenSSL 1.1.1d  10 Sep 2019

これ以上のテストは行いませんでした。


要約すると、これを達成するための変更には、

  • ソリューションからlibeayプロジェクトを削除しました。これはソースからOpenSSL 1.0.2をビルドするために使用されましたが、OpenSSL 1.1.1と互換性がありません。代わりに、ソリューションは、ビルド済みのOpenSSL 1.1.1dバイナリに依存するようになりました。これは、Pythonリポジトリのcpython-bin-depsで提供されています。ビルドプロセスの一部としてOpenSSLを自分で再ビルドすることは可能ですが、さらに変更が必要です。
  • get_externals.bat前述のcpython-bin-depsリポジトリからOpenSSL 1.1.1dビルド済みライブラリをダウンロードするようにバッチスクリプトを変更しました。
  • およびプロジェクト設定のopenssl.propsいくつかを構成するプロパティファイルを変更し、それらのプロジェクト自体にもいくつか変更を加えました。新しいOpenSSLライブラリとリンクし、インクルードパスを正しく設定するために、主にPython のリリースから行われた調整。この変更により、OpenSSLは2.7.17で使用されていた静的リンクではなくなり、動的にリンクされます。_ssl_hashlibv3.8.1
  • Visual Studio 2017でのビルドを可能にするために、ファイルに適用されたこのパッチModules/posixmodule.cModules/timemodule.c同様のパッチ -ビルド済みのOpenSSLバイナリが作成されるのと同じバージョン。

ちなみに、現在のビルドプロセスでは、OpenSSLやnasmソースコードなど、必要以上のものがダウンロードされます。これは、元のビルドスクリプトへの変更をできる限り少なくするためです。

詳細に興味がある場合は、この回答を明確にする目的で私が行った、このcpythonリポジトリのフォークの関連するコミットを確認できます。オリジナルタグに基づいていv2.7.17ます。上記のようにv2.7.17_ossl_1.1.1、そのブランチをチェックアウトしてビルドコマンドを実行することで、ビルドを再現できるはずPCbuildです。十分な人が興味を持っているなら、私はそれを片付けてそれを持ち続けるかもしれません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.