30

python2.7でopensslがどのように機能するかを誰かが説明してくれるかどうか疑問に思っています。Pythonが独自のopensslを取得したのか、それともローカルマシン/環境から取得したのかわかりませんか?

説明させてください:(これをPythonで行う場合)

>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 0.9.8x 10 May 2012'

(端末内)

$ openssl version
OpenSSL 0.9.8x 10 May 2012
$ which openssl 
/usr/bin/openssl

今、opensslを更新しました(ダウンロードしました。)

$ cd openssl-1.0.1c
$ ./Configure darwin64-x86_64-cc --prefix=/usr --openssldir=/opt/local/etc/openssl shared
$ make
$ sudo make install

これにより、別のディレクターが(指定どおりに)作成されたので、古いパスにコピーしました

cp -f /usr/local/ssl/bin/openssl /usr/bin/openssl

現在、ターミナルのopensslバージョンは更新されていますが、pythonからではありません!

$ openssl version
OpenSSL 1.0.1c 10 May 2012

.dylib がまだ古いバージョンを指していることに気付きました。これを変更するにはどうすればよいですか?

$ ls -l /usr/lib/*ssl*
-rwxr-xr-x  1 root  wheel  411680 Jul 17  2012 /usr/lib/libssl.0.9.7.dylib
-rwxr-xr-x  1 root  wheel  602800 May 24 03:43 /usr/lib/libssl.0.9.8.dylib
-rwxr-xr-x  1 root  wheel  390908 Sep  9 17:37 /usr/lib/libssl.1.0.0.dylib
lrwxr-xr-x  1 root  wheel      18 Jul 17  2012 /usr/lib/libssl.dylib -> libssl.0.9.8.dylib

更新:リンクを変更しても、python で古いバージョンを取得しました。

$ ls -l /usr/lib/*ssl*
-rwxr-xr-x  1 root  wheel  411680 Jul 17  2012 /usr/lib/libssl.0.9.7.dylib
-rwxr-xr-x  1 root  wheel  602800 May 24 03:43 /usr/lib/libssl.0.9.8.dylib
-rwxr-xr-x  1 root  wheel  390908 Sep  9 17:37 /usr/lib/libssl.1.0.0.dylib
lrwxr-xr-x  1 root  wheel      18 Sep 11 15:47 /usr/lib/libssl.dylib -> libssl.1.0.0.dylib
4

6 に答える 6

4

これは、古いバージョンの Python が原因である可能性があります。

Python 2.7.1 で実行python -c "import ssl; print ssl.OPENSSL_VERSION"した後、この古いバージョンがあることがわかりました: OpenSSL 0.9.7l 28 Sep 2006.

このフォーラムで示されているように、私のバージョンの Python は非推奨バージョンの OpenSSL に依存しているようです 。

今後の Python 2.7.9 リリース (12 月初旬に予定) では、python.org の OS X インストーラーの Python で独自のバージョンの OpenSSL を使用し、現在非推奨のシステム OpenSSL に依存しないようにする予定です。

Python 2.7.9 に更新したところ、問題はすぐに修正されました。を実行するpython -c "import ssl; print ssl.OPENSSL_VERSION"と、 が得られOpenSSL 0.9.8za 5 Jun 2014ます。

于 2014-12-27T01:10:32.147 に答える
-6

ハックを解決しませんでした。上記のどれも私にとってはうまくいきませんでした。私は結局、よりシンプルで単純なアプローチを取りました....

  1. 公式サイトから python 2.7.13 をインストールします。実際にはデフォルトの python としてインストールされ、古い python システム全体が自動的にアップグレードされます ( yes! )。

https://www.python.org/downloads/mac-osx/

  1. Python のインストール後に openssl をアップグレードします。システムpython用に更新しています(はい!)。

sudo pip install --upgrade pyOpenSSL

  1. すべての python モジュールを再インストールする必要があります ( python を置き換えたため)。pip を使用することを強くお勧めします。pip を数分間インストールした後、デフォルトの OSX python がアップグレードされ、openssl がアップグレードされ、すべてのモジュール (django running を含む) がインストールされました。
于 2017-09-15T11:34:07.447 に答える