VERSION MISMATCH in OpenSSL test program

ちょっとハマったのでメモしておく。

状況

$ cpanm Crypt::OpenSSL::CA

(中略)

Configuring Crypt-OpenSSL-CA-0.23
Running Build.PL

Checking OpenSSL version number...


*** VERSION MISMATCH in OpenSSL test program! ***

The version number extracted from OpenSSL's header files (0x90812fd)
differs from the one returned by a call to OpenSSL's SSLeay() (0x90819fd).

となってしまい、Crypt::OpenSSL::CAがインストールできない問題。

環境

原因究明

「OpenSSLのheaderファイルとOpenSSL SSLeay()の結果が合致しないよ!」と言われてるので、それぞれ調べる。

OpenSSLのversion

ヘッダファイルは/usr/includeにあるので、ここを検索してOpenSSLのversionを確認する。 以下でおk。

# find /usr/include/ | xargs grep -i 'OPENSSL_VERSION_NUMBER'
/usr/include//openssl/opensslv.h:#define OPENSSL_VERSION_NUMBER 0x0090812fL
OpenSSL SSLeay()

Net::SSLeay http://search.cpan.org/~mikem/Net-SSLeay-1.61/lib/Net/SSLeay.pod#Low_level_API:_Version_related_functions

$ perl -MNet::SSLeay -le 'printf("%x\n", Net::SSLeay::SSLeay())'
90819f

$ perl -MNet::SSLeay -le 'print Net::SSLeay::SSLeay_version(0)'
OpenSSL 0.9.8y 5 Feb 2013

確かにversionが異なっており、

The version number extracted from OpenSSL's header files (0x90812fd) => 0.9.8r differs from the one returned by a call to OpenSSL's SSLeay() (0x90819fd). => 0.9.8y

であることが確認できた。

暫定対応

production環境の構築ではなくライブラリをインストールして実験的に動かしたいだけなので、 workroundとして、#/usr/include//openssl/opensslv.hのversionをSSLeay()と一致させてごまかしてしまうことにする。

# diff opensslv.h opensslv.h.orig
28c28
< #define OPENSSL_VERSION_NUMBER        0x0090819fL
---
> #define OPENSSL_VERSION_NUMBER        0x0090812fL

なぜこんな状況に陥ったのかは謎。。。