LoginSignup
0
0

More than 5 years have passed since last update.

OSX El Capitanにopenssl-1.0.2lをインストールしてPythonの_ssl.soも更新する

Posted at

OSX El Capitan に openssl-1.0.2l をインストールした記録。

内容は OSX Yosemite に openssl-1.0.2f をインストールしてPythonの_ssl.soも更新すると同じ。

OSX El Capitan の OpenSSL は 0.9.8 系なのだが、2015年12月31日でサポートが終了している。
OS X El Capitan のリリースが2015年9月30日で、その年の末にはEOLになる OpenSSL 0.9.8zh をバンドルしてくるのはどうなんだろう。

ちなみに、OS X El Capitan の openssl は version コマンドに対して

$ /usr/bin/openssl version
OpenSSL 0.9.8zh 14 Jan 2016

という出力を返す。配布されている OpenSSL 0.9.8zh は OpenSSL 0.9.8zh 14 Jan 2016 という出力を返すので、なにか手はいれてあるらしい。

openssl-1.0.2l のビルド

32bit 版と 64bit 版を二度に分けてビルドし lipo で Univesal Binary にする。
コンパイルオプションで -arch x86_64 -xarch i386 で multilib にできるかと思ったら、コンパイルでラーがでるためこのような方法をとっている。

$ ./Configure shared darwin64-x86_64-cc
$ make

テスト

$ make test

エラーがでていなければOK

インストール
デフォルトの /usr/local/ssl にインストールされる。

$ sudo make install
$ cd /usr/local/ssl
$ sudo mkdir bin64
$ sudo sh -c 'cd bin && find . -print | cpio -pdmu ../bin64'
$ sudo mkdir lib64
$ sudo sh -c 'cd lib && find . -print | cpio -pdmu ../lib64'

ソースツリーに戻って 32bit 版をビルド

$ make clean
$ ./Configure shared darwin-i386-cc
$ make

インストール
ドキュメントは不要なので make install_sw を実行する。

$ sudo make install_sw
$ cd /usr/local/ssl
$ sudo mkdir bin32
$ sudo sh -c 'cd bin && find . -print | cpio -pdmu ../bin32'
$ sudo mkdir lib32
$ sudo sh -c 'cd lib && find . -print | cpio -pdmu ../lib32'

lipo で Univesal Binary を作成する。

$ cd /usr/local/ssl
$ sudo lipo -create bin{32,64}/openssl -output bin/openssl
$ sudo lipo -create lib{32,64}/libcrypto.a -output lib/libcrypto.a
$ sudo lipo -create lib{32,64}/libssl.a -output lib/libssl.a
$ find lib64 -type f -name '*.dylib' | while read file ; do echo lipo -create $(echo "$file" | sed 's/64/{32,64}/') -output $(echo "$file" | sed 's/64//'); done | sudo sh
$ sudo rm -r bin{32,64} lib{32,64}

今後プログラムをビルドするときに/usr/local/ssl にある openssl を使うようにすれば、1.0.2 系の openssl がリンクされる。

python の SSL ライブラリを更新しておく。
開発環境が xcode-select --install されていないと、configure でヘッダが見つからずエラーになるので注意。

$ sudo xcode-select --install
Password:
xcode-select: note: install requested for command line developer tools

https://www.python.org/downloads/release/python-2710/ からソースファイルを取得する。

tar xfz Python-2.7.10.tgz
cd Python-2.7.10
CC=cc \
CPPFLAGS=-I/usr/local/ssl/include \
LDFLAGS='-L/usr/local/ssl/lib -Wl,-rpath,/usr/local/ssl/lib' \
./configure --enable-framework --enable-universalsdk --with-universal-archs=intel
$ make

じつは、欲しいのは _ssl.so だけ。

$ find . -name _ssl.so
./build/lib.macosx-10.5-intel-2.7/_ssl.so

python で import ssl したときに、この _ssl.so がロードされるようすればよい。

$ sudo mkdir /Library/Python/2.7/lib-dynload
$ sudo cp build/lib.macosx-10.5-intel-2.7/_ssl.so /Library/Python/2.7/lib-dynload

このような sitecustomize.py を作成して、/Library/Python/2.7/lib-dynload を検索パスに追加する。

/Library/Python/2.7/site-packages/sitecustomize.py
import sys
sys.path.insert(0, '/Library/Python/2.7/lib-dynload')

動作確認。

$ python
>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 1.0.2l  25 May 2017'
0
0
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
0
0