Eu passei algum tempo pesquisando on-line, mas nada do que encontrei parece ajudar.
Estou rodando o CentOS 6 de 64 bits e gostaria de compilar o Apache com o mod_ssl e preciso vinculá-lo à minha própria compilação do OpenSSL (que é mais recente que a versão fornecida pelo sistema operacional).
O OpenSSL 1.1.0i está configurado com:
./config --prefix=/opt/openssl-1.1.0 --openssldir=/opt/openssl-1.1.0 shared
O Apache 2.4 está configurado com:
./configure --enable-layout=mycustomlayout \
--prefix=/opt/httpd-2.4.34 \
--exec-prefix=/opt/httpd-2.4.34 \
--with-mpm=prefork \
--enable-so \
--enable-ssl \
--with-ssl=/opt/openssl-1.1.0 \
--enable-cgi \
--enable-http2 \
--enable-proxy-http2 \
--with-included-apr
Parece compilar bem, mas o mod_ssl não sabe onde o OpenSSL 1.1.0 está instalado:
[root@host .libs]# ldd ./mod_ssl.so | grep -iP 'ssl|crypto'
libssl.so.1.1 => not found
libcrypto.so.1.1 => not found
E só funciona quando você diz explicitamente onde procurar:
[root@host .libs]# export LD_LIBRARY_PATH=/opt/openssl-1.1.0/lib:$LD_LIBRARY_PATH
[root@host .libs]# ldd ./mod_ssl.so | grep -iP 'ssl|crypto'
libssl.so.1.1 => /opt/openssl-1.1.0/lib/libssl.so.1.1 (0x00007f069149a000)
libcrypto.so.1.1 => /opt/openssl-1.1.0/lib/libcrypto.so.1.1 (0x00007f069100a000)
Até mesmo criar o mod_ssl estaticamente no httpd binary com --enable-mods-static=ssl
não ajuda.
Eu tentei --enable-ssl
, --enable-ssl --enable-ssl-staticlib-deps
e --enable-ssl --enable-ssl-staticlib-deps --enable-mods-static=ssl
e ainda o mesmo resultado:
libssl.so.1.1 => not found
libcrypto.so.1.1 => not found
Também tentei, sem sorte, configurar essas variáveis antes de ./configure
:
export PKG_CONFIG_PATH=/opt/openssl-1.1.0/lib/pkgconfig:$PKG_CONFIG_PATH \
LD_LIBRARY_PATH=/opt/openssl-1.1.0/lib:$LD_LIBRARY_PATH \
LDFLAGS="-L/opt/openssl-1.1.0/lib"
Sei que posso adicionar /etc/ld.so.conf.d
para carregar automaticamente a nova biblioteca OpenSSL ou ajustar o script de inicialização do Apache para adicionar a LD_LIBRARY_PATH
, mas prefiro que ele funcione corretamente, tenha o programa onde procurar libssl.so
/ libcrypto.so
, assim como minha compilação do PHP:
[root@host php]# export PKG_CONFIG_PATH=/opt/openssl-1.1.0/lib/pkgconfig:$PKG_CONFIG_PATH \
LD_LIBRARY_PATH=/opt/openssl-1.1.0/lib:$LD_LIBRARY_PATH \
LDFLAGS="-L/opt/openssl-1.1.0/lib" \
PHP_PREFIX=/opt/php-7.2.9 \
EXTENSION_DIR=$PHP_PREFIX/usr/lib64/php/modules
[root@host php]# ./configure […] \
--with-imap=shared \
--with-imap-ssl \
--with-openssl=shared \
--with-openssl-dir=/opt/openssl-1.1.0/bin
[root@host php]# make
[root@host php]# unset PKG_CONFIG_PATH LD_LIBRARY_PATH LDFLAGS
[root@host modules]# ldd ./openssl.so | grep -iP 'ssl|crypto'
libssl.so.1.1 => /opt/openssl-1.1.0/lib/libssl.so.1.1 (0x00007fc2220a6000)
libcrypto.so.1.1 => /opt/openssl-1.1.0/lib/libcrypto.so.1.1 (0x00007fc221c17000)
O que estou fazendo de errado? Isso poderia ser um bug?