OSX El Capitan에 openssl-1.0.2l을 설치하고 Python의 _ssl.so도 업데이트하십시오.

OSX El Capitan에 openssl-1.0.2l을 설치하고 Python의 _ssl.so도 업데이트하십시오.

2022-10-04 last update

7 minutes reading OSXELCapitan openssl 파이썬 MacOSX
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이 링크된다.

파이썬 SSL 라이브러리를 업데이트합니다.
개발 환경이 xcode-select --install 되지 않으면 configure 에서 헤더를 찾을 수 없어 오류가 발생하므로 주의.
$ sudo xcode-select --install
Password:
xcode-select: note: install requested for command line developer tools

htps //w w. py 응. 오 rg / 드 w ぉ ds / ぇ あせ / py 텐 - 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'