Apache server fails to load axis2_http_sender.dll when wsf/php built with SSL enabled.
Error message in the wsf php client Log:
[Fri Sep 05 12:08:31 2008] [error] ..\..\util\src\class_loader.c(167) Loading shared library C:\wsfphp\wso2-wsf-php-bin-2.0.0-win32\wsf_c/lib/axis2_http_sender.dll Failed. DLERROR IS DLL Load Error 182:
[Fri Sep 05 12:08:31 2008] [error] ..\..\src\core\deployment\conf_builder.c(902) Transport sender is NULL for transport http, unable to continue
[Fri Sep 05 12:08:31 2008] [error] ..\..\src\core\deployment\conf_builder.c(261) Processing transport senders failed, unable to continue
[Fri Sep 05 12:08:31 2008] [error] ..\..\src\core\deployment\dep_engine.c(939) Populating Axis2 Configuration failed
[Fri Sep 05 12:08:31 2008] [error] ..\..\src\core\deployment\conf_init.c(195) Loading deployment engine failed for client repository C:\wsfphp\wso2-wsf-php-bin-2.0.0-win32\wsf_c
Steps to regenerate:
1. Install OpenSSL 0.9.8g from MSI
2. Install Apache server from apache_2.2.8-win32-x86-openssl-0.9.8g.msi
3. Build WSF/PHP with SSL enabled
4. Try running a sample
When we build wsf/php SSL disabled, everything works fine.
Problem occurs with Apache 2.2.6 and OpenSSL 0.9.8e as wel.
Axis2/C Windows binary package and OpenSSL
I deployed Axis2C (1.6.0, Windows binary distribution) on IIS 7.0 running on Windows Server 2008 but simple browser-based test (http://localhost/axis2/services) failed - I got HTTP error 500 in W3SVC log:
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
2011-08-24 09:02:53 ::1 GET /axis2/services - 80 - ::1 Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.0;+Trident/5.0) 500 0 0 421
Page in the browser displayed:
An IIS server error occurred
An error occurred while initilizing Axis2/C.
Axis log file showed:
[error] ..\..\util\src\class_loader.c(167) Loading shared library C:\axis2c/lib/axis2_http_sender.dll Failed. DLERROR IS DLL Load Error 126: The specified module could not be found.
I used Process Explorer to find Axis2C DLLs loaded by IIS working process and here they are:
axiom.dll
axis2_engine.dll
axis2_parser.dll
axutil.dll
guththila.dll
mod_axis2_iis.dll
neethi.dll
Some of these modules failed to load axis2_http_sender.dll. I tried to reload aforementioned URL in order to wake up w3wp.exe and make it load Axis2C modules.
Process Monitor
was filtering w3wp.exe events and I could see that w3wp failed to find
libeay32.dll
(QueryOpen would return NAME NOT FOUND for all locations listed in PATH environment variable). This dll is a part of
OpenSSL
and is not included in original Axi2C binary package. I downloaded OpenSSL and, just for a test, placed libeay32.dll in
C:\axis2c\lib
, where axis2_http_sender.dll resides. This time Process Monitor showed that
ssleay32.dll
could not be found. This file, just like libeay32, belongs to OpenSSL. I placed it in C:\axis2c\lib and repeated the test. Voila! I got the list of my services listed in the browser which proved that Axi2C was set properly.
Process Explorer now shows the complete list of Axis2C DLLs loaded by w3wp.exe:
axiom.dll
axis2_engine.dll
axis2_http_receiver.dll
axis2_http_sender.dll
axis2_mod_addr.dll
axis2_mod_log.dll
axis2_parser.dll
axutil.dll
guththila.dll
libeay32.dll
ssleay32.dll
mod_axis2_iis.dll
neethi.dll
Conclusion:
Axis2C Windows distribution depends on OpenSSL DLLs
which are not included in binary package which can be downloaded from
Apache Axis2/C Releases page
. OpenSSL must be installed separately. Unfortunately, this is not mentioned in
Axis2/C manual
.
Note: upon installing OpenSSL on your system, path to its binaries (e.g. c:\openssl\bin) should be added to PATH environment variable. Make sure you restart machine after changing environment variables as IIS gets them only upon restart - it does not lookup their update values!
Note: If OpenSSL support is not required, download Axis2C source and built it with OpenSSL disabled (
--enable-openssl=no
)
References and links:
Axis2/C built with SSL support. axis2_http_sender.dll fails to load
problems running default http server
axis2/c depending on openSSL
re-distribute openSSL dlls with AXIS2/c and patent issue