最近のOpenSSLではSSLv2がデフォルトで無効になっているという話
古いバージョンのOSSを最近の環境でビルドしようとすると、次のようなエラーが出ることがあります。
Undefined symbols for architecture x86_64:
"_SSLv2_client_method", referenced from:
_php_openssl_setup_crypto in xp_ssl.o
"_SSLv2_server_method", referenced from:
_php_openssl_setup_crypto in xp_ssl.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
上記はMac OS Xでのエラーですが、Linux環境でも同じようなエラーで悩んでいる人がいるようです。
このエラーは、OpenSSLのSSLv2関連のAPIがその環境に存在しないのが原因です。セキュリティ上の理由から最近のOpenSSLではデフォルトでSSLv2のサポートが無効になっており、SSLv2関連のAPIを呼び出したり動的リンクしていたりすると即死するというわけです。
というわけで、私の場合は問題のOSSに対してSSLv2関連APIを呼び出さないようなパッチを書きました(というか最新版のコードからコピペしてきました)。SSLv2が無効になっているOpenSSL環境ではOPENSSL_NO_SSL2
が定義されるので、これを使って#ifdef
で分岐することができます。
SSLv2はプロトコル上の脆弱性が見つかっているので、これを有効にしてOpenSSLをビルドしなおすのはオススメしません。念のため。
Author And Source
この問題について(最近のOpenSSLではSSLv2がデフォルトで無効になっているという話), 我々は、より多くの情報をここで見つけました https://qiita.com/hnw/items/f38fa07753fe2bd05c57著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .