1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

最近のOpenSSLではSSLv2がデフォルトで無効になっているという話

Last updated at Posted at 2016-05-02

古いバージョンの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をビルドしなおすのはオススメしません。念のため。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?