メインコンテンツに移動

OpenSSL

インストール

こちらのopenssl-X.X.X-新しげ.pkg をインストールしてね.

暇なのでインストールできたかチェックしたい場合:

$ otool -L /usr/local/lib/libssl.dylib
/usr/local/lib/libssl.dylib:
    /usr/local/lib/libssl.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
    /usr/local/lib/libcrypto.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.60.1)
$ /usr/local/bin/openssl version
OpenSSL 1.1.1k  25 Mar 2021

ビルドするのが好きなやつ

OSX11の頃

/usr/lib/libsslはみんな消えた.どこに行ったんだろう.

$ otool -L `which openssl`
/usr/lib/libssl.46.dylib (compatibility version 47.0.0, current version 47.1.0)
/usr/lib/libcrypto.44.dylib (compatibility version 45.0.0, current version 45.1.0)
/System/Library/PrivateFrameworks/TrustEvaluationAgent.framework/Versions/A/TrustEvaluationAgent (compatibility version 1.0.0, current version 35.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.60.1)

おやあ.こいつらみんな存在しないぞ.どうなってんだ?

$ openssl version
LibreSSL 2.8.3

動いているんだけどな. だがまあ,FaceIDだのTouchIDだの,セキュリティでは上を行っているAppleが,これらを使えるようにしておく可能性はないな.必要はないだろうからね.ま,互換性保持のために置いてあるだけなんだろうね.

ということはだ.逆に言えば,使いたいものをインストールしたらOSと衝突せずに使えるってわけだ.

OpenSSL1.1.1 台湾積体電路製造

ここからダウンロード

X86ビルド

X86ターミナルで実行する.

cd openssl-1.1.1k/
./config no-sse2
make
make test
lipo -info lib*dylib lib*a engines/*dylib
Non-fat file: libcrypto.1.1.dylib is architecture: x86_64
Non-fat file: libcrypto.dylib is architecture: x86_64
Non-fat file: libssl.1.1.dylib is architecture: x86_64
Non-fat file: libssl.dylib is architecture: x86_64
Non-fat file: libcrypto.a is architecture: x86_64
Non-fat file: libssl.a is architecture: x86_64
Non-fat file: engines/capi.dylib is architecture: x86_64
Non-fat file: engines/dasync.dylib is architecture: x86_64
Non-fat file: engines/ossltest.dylib is architecture: x86_64
Non-fat file: engines/padlock.dylib is architecture: x86_64

そりゃおまえ,TSMCチップがX86をいくら真似てもストリーミングしむどは載ってねえからな. SSEが載ってないIntelチップは現存しないので,no-sse2を指定しないと動かないわけだ.

ARM64ビルド

ARM64ターミナルで実行する

cd openssl-1.1.1k/
./config
make
make
test
lipo -info lib*dylib lib*a engines/*dylib
Non-fat file: libcrypto.1.1.dylib is architecture: x86_64
Non-fat file: libcrypto.dylib is architecture: x86_64
Non-fat file: libssl.1.1.dylib is architecture: x86_64
Non-fat file: libssl.dylib is architecture: x86_64
Non-fat file: libcrypto.a is architecture: x86_64
Non-fat file: libssl.a is architecture: x86_64
Non-fat file: engines/capi.dylib is architecture: x86_64
Non-fat file: engines/dasync.dylib is architecture: x86_64
Non-fat file: engines/ossltest.dylib is architecture: x86_64
Non-fat file: engines/padlock.dylib is architecture: x86_64

そりゃARM64チップにストリーミングしむどが載っていそうにないことは初めからわかっているしね.ではインストールしてみる

fswatch -x /usr/local/ > files.log &
sudo make install

豚ビルド

では豚に変えよう.めんどくさくなってきたので 豚専ツールを作った.

$ build_pig.sh ../../x86_64/openssl-1.1.1k/ ../../arm64/openssl-1.1.1k/ ../../arm64/universal/ lib*dylib engines/*dylib
../../x86_64/openssl-1.1.1k//libcrypto.1.1.dylib x86_64
../../arm64/openssl-1.1.1k//libcrypto.1.1.dylib arm64
Architectures in the fat file: ../../arm64/universal//libcrypto.1.1.dylib are: x86_64 arm64
../../x86_64/openssl-1.1.1k//libcrypto.dylib x86_64
../../arm64/openssl-1.1.1k//libcrypto.dylib arm64
Architectures in the fat file: ../../arm64/universal//libcrypto.dylib are: x86_64 arm64
../../x86_64/openssl-1.1.1k//libssl.1.1.dylib x86_64
../../arm64/openssl-1.1.1k//libssl.1.1.dylib arm64
Architectures in the fat file: ../../arm64/universal//libssl.1.1.dylib are: x86_64 arm64
../../x86_64/openssl-1.1.1k//libssl.dylib x86_64
../../arm64/openssl-1.1.1k//libssl.dylib arm64
Architectures in the fat file: ../../arm64/universal//libssl.dylib are: x86_64 arm64
../../x86_64/openssl-1.1.1k//engines/capi.dylib x86_64
../../arm64/openssl-1.1.1k//engines/capi.dylib arm64
Architectures in the fat file: ../../arm64/universal//engines/capi.dylib are: x86_64 arm64
../../x86_64/openssl-1.1.1k//engines/dasync.dylib x86_64
../../arm64/openssl-1.1.1k//engines/dasync.dylib arm64
Architectures in the fat file: ../../arm64/universal//engines/dasync.dylib are: x86_64 arm64
../../x86_64/openssl-1.1.1k//engines/ossltest.dylib x86_64
../../arm64/openssl-1.1.1k//engines/ossltest.dylib arm64
Architectures in the fat file: ../../arm64/universal//engines/ossltest.dylib are: x86_64 arm64
../../x86_64/openssl-1.1.1k//engines/padlock.dylib x86_64
../../arm64/openssl-1.1.1k//engines/padlock.dylib arm64
Architectures in the fat file: ../../arm64/universal//engines/padlock.dylib are: x86_64 arm64

こりゃ楽だわ.

sudo cp ../universal/lib* /usr/local/lib/
sudo cp ../universal/engines/* /usr/local/lib/engines-1.1/
kill %1
fswatch_analyze.sh -c binary files.log
pkgbuild --identifier openssl --root binary openssl-1.1.1-osx11.2.pkg

動くのか?

$ openssl version
LibreSSL 2.8.3
$ /usr/local/bin/openssl version
OpenSSL 1.1.1k  25 Mar 2021

よさげ.

OSX10の頃

暗号通信ソフトSSLである. OSXにはデフォルトでふる〜いのがインストールされている:

/usr/include/openssl はインストールされていない
/usr/lib/libssl.0.9.7.dylib
/usr/lib/libssl.0.9.8.dylib (2017年ごろのデフォルト. OpenSSL-0.9.8)
/usr/lib/libssl.35.dylib  (OSX10.14ではこれがデフォルト)
/usr/lib/libssl.43.dylib
/usr/lib/libssl.44.dylib

事情はよくわからないが, OpenSSLを作ってた人が2015年ごろにRSAに脱走してOpenSSLをほっといたらバグが見つかってWWWとなったらしいが. で, OpenSSLは 0.9.8 --> 1.0.01--> 1.1...... という感じで終わっとるらしい.で, 新バージョンがLibreSSLになって再登場.このlibssl.35とかは, そっちなのか?

はあ?世界中で使われている https:// のベースだろ?個人のボランティア頼みなのかマジか?と思ったが,どうやら,本当に,LinuxとAndroid携帯は全てこの人のライブラリによるものだそうだ・・・(Googleのは, この BoringSSL てやつだ)で,どうすんねん?となってOpenBSDがLibreSSLを作った.BSDなのでAppleは使えるので(MacOSとiPhone/iPadはBSDのライセンスだからな).いまんとこ,AppleだけがLibreSSLを堂々と使っている,ということか.だからopensslのヘッダーファイルが見つからない.昔作成した実行ファイルが動作するように, libssl.0.9.x.dylib だけは置いてある.というわけだ.

なんとまあ脆弱な・・・

$ otool -L `which openssl`
	/usr/lib/libssl.44.dylib (ccurrent version 45.1.0)
	/usr/lib/libcrypto.42.dylib (current version 43.0.0)
 	/usr/lib/libSystem.B.dylib (current version 1252.200.5)
$ openssl version
    LibreSSL 2.6.5

ということは, LibreSSL 2.6.5 のヘッダーを使えば libssl.44.dylib が使えそうではあるけどな・・・

暗号化が破られてしまった 0.9.8 だが, ヘッダーファイルをインストールすると,利用可能になる.ヘッダーファイルだけのインストールパッケージは,ここのopenssl-0.x.x-dev.pkgである.https:// を使わないなら,これで十分だろう.

このパッケージをどうやって作ったか記録がないんだが,多分,普通にインストールしたのち, ライブラリを/usr/libにあるApple製のライブラリに変更してから,パッケージにしたのではないかな?

ヘッダーファイルではなく,ライブラリー本体(/usr/lib/libsslなんとかファイル)をインストールする?悪いことは言わないので,SSLライブラリー本体の入れ替えはやめたほうがいいと思うよ.OSを再インストールする羽目に陥るかも(二回目の経験をしたい向きは,是非どうぞ).