了解しました。次のconfigureコマンドを使用してCentOS5.7でApache2.2.21をコンパイルするのに数日かかりました。
_./configure --enable-ssl=shared --with-ssl=/usr/local/openssl
_
ソースからOpenSSL1.0.0eをソースからコンパイルしました:
_./config --prefix=/usr/local --openssldir=/usr/local/openssl shared zlib-dynamic
_
Apacheを起動しようとすると、次のように返されます。
_httpd: Syntax error on line 54 of /usr/local/Apache2/conf/httpd.conf: Cannot load /usr/local/Apache2/modules/mod_ssl.so into server: /usr/local/Apache2/modules/mod_ssl.so: undefined symbol: SSL_get_servername
_
ライブラリがどのようにリンクされているかを見ると、次のようになります。
[root@web1 modules]# ldd mod_ssl.so libssl.so.6 => /lib64/libssl.so.6 (0x00002aaaaace4000) libcrypto.so.6 => /lib64/libcrypto.so.6 (0x00002aaaaaf30000) libdl.so.2 => /lib64/libdl.so.2 (0x00002aaaab281000) libz.so.1 => /lib64/libz.so.1 (0x00002aaaab486000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00002aaaab69a000) libc.so.6 => /lib64/libc.so.6 (0x00002aaaab8b5000) libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00002aaaabc0e000) libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00002aaaabe3c000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00002aaaac0d1000) libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00002aaaac2d4000) /lib64/ld-linux-x86-64.so.2 (0x0000555555554000) libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00002aaaac4f9000) libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00002aaaac702000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00002aaaac904000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00002aaaacb19000) libsepol.so.1 => /lib64/libsepol.so.1 (0x00002aaaacd32000)
基本的に、ソースOpenSSL(0.9.8rと1eの両方)からのコンパイルに疲れ、リポジトリからyumを再インストールし、_make clean
_を実行し、OpenSSLとApacheの両方を何度も作り直しましたが、取得できません。 Apacheベースにコンパイルするか、共有オブジェクトファイルとして動的にコンパイルします。
私はここで何が間違っているのですか?
更新1:
_make clean
_および_make distclean
_を実行した後、上記と同じパラメーターを使用して、何の影響もなく再構成しました。
Config.logは Pastebin にあります。
更新2:
LD_LIBRARY_PATHを変更しても、mod_ssl.soのlib-depsには影響しませんでした。
更新3:
私は何度もコンパイルと再コンパイルを行い、ldconfig
を使用して、OpenSSL libsディレクトリが私のパスにあり、ld.so.confに含まれていることを確認しました。それでも、実行時にhttpd/mod_sslを取得してライブラリをロードすることはできません。
Apacheをコンパイルするときは、「-enable-so」が必要です。 soモジュールがロードしようとしているので、持っている必要があると思います。
また、opensslをコンパイルした後、システムが「/ sbin/ldconfig -v/usr/local/openssl/lib」で共有ライブラリを見つけられることを確認します。
また、/ etc/ld.so.conf.d/local.confを編集して、/ usr/local/openssl/libの行を追加するのも好きです。
Opensslはデフォルトで共有ライブラリを作成しないことを思い出します。私はこれをします:
./Configure --prefix =/usr/local/openssl linux-elf shared
次に、上記のようにldconfigを実行する必要があります。そして、SSLライブラリの場所をApacheに伝えます。
数分後に同じ問題が発生したので、次のように追加します。
LDFLAGS=-L/usr/local/ssl/lib
./configure(Apache)のパラメーターは次のように変更されます。
--with-ssl=/usr/local/ssl
に
--with-ssl=/usr/local/ssl/lib
そして、その大丈夫ではありません。
以前に指摘したように、間違いなく間違ったOpenSSLインストールにリンクしています。 ld.so.confに/ usr/local/ssl/libが必要ですが、次のApacheconfigureコマンドで試してください。
LDFLAGS=-L/usr/local/ssl/lib \
./configure \
--enable-ssl \
--enable-mods-shared=all \
--with-ssl=/usr/local/ssl
また、OpenSSL自体が意図したとおりにコンパイルされていると確信していますか?共有ライブラリ自体の作成に失敗し、静的にフォールバックしても、正常にコンパイルされている可能性はありますか?
SELinuxログを確認してください。バイナリに適切なSELinux属性のタグを付ける必要があります。
ldd mod_ssl.so libssl.so.6 =>/lib64/libssl.so。
/ usr/localのopensslに対してリンクしていないことを示します。 Apache/opensslビルドの両方に対して「makeclean && makedistclean」を実行してから、opensslを再構築/インストールします。 ./configure [オプション] Apache、およびそのconfig.logをチェックして、正しいopenssllibに対してリンクしていることを確認します。
または、既存のconfig.logの出力を提供してください