无法加载'C:/Apache/Perl/site/lib/auto/Apache2/ModSSL/ModSSL.dll'

时间:2016-07-01 13:14:19

标签: apache perl ssl mod-perl mod-ssl

我正在运行安装了Apache服务器的Windows Server 2008 R2 Enterprise以及mod_perl&了mod_ssl 我刚刚安装了Apache2 :: ModSSL,但是我无法使用cpan并且必须使用nmake编译它。 CPAN在此服务器上无法正常工作,我无法更改此设置。 通过https调用的perl脚本以后应该能够访问客户端用于验证的证书,这就是为什么我想使用Apache2 :: ModSSL来访问SSL变量。

当我在实施

后尝试访问我的测试脚本时
use Apache2::ModSSL;

我从服务器收到HTTP500错误。 服务器错误日志状态

[Fri Jul 01 15:01:58 2016] [error] [client 10.217.139.184] failed to resolve handler `ssl::hello': Can't load 'C:/Apache/Perl/site/lib/auto/Apache2/ModSSL/ModSSL.dll' for module Apache2::ModSSL: load_file:The specified module could not be found at C:/Apache/Perl/lib/XSLoader.pm line 68.\n at C:/Apache/Perl/site/lib/Apache2/ModSSL.pm line 8\nCompilation failed in require at ssl/hello.pm line 7.\nBEGIN failed--compilation aborted at ssl/hello.pm line 7.\nCompilation failed in require at (eval 3) line 3.\n

当我检查文件位置时,ModSSL.dll存储在此路径的确切位置。我还检查了文件Access并授予所有用户,系统,管理员等完全访问权限.Amama多次重启并且没有更改任何内容。 当我试图在cmd中执行它时,显然没有连接要检查但我可以执行

use Apache2::ModSSL;
print Apache2::ModSSL->VERSION;

没有问题。 如何解决在Apache中加载模块的问题?

服务器自述状态

  

这是Perl 5.8.7和Apache的Win32的二进制发行版   2.0.54,与mod_perl-2.0.1,mod_ssl / OpenSSL(0.9.7g)和php-4.3.11一起使用VC ++ 6.0(SP5)构建。

cl -version

  

Microsoft(R)32位C / C ++优化编译器版本15.00.30729.01 for 80x86

nmake -version

  

Microsoft(R)Program Maintenance Utility Version 9.00.30729.01

1 个答案:

答案 0 :(得分:2)

如果不深入调查,问题的最可能原因是perl,OpenSSL,mod_ssl等使用与您用于构建Apache::ModSSL的编译器不同的编译器进行编译。

在我看来,如果模块认为它在mod_perl下运行,那么它只会尝试XS版本。您可以在模块的Apache2/ModSSL.pm中看到这一点:

XSLoader::load __PACKAGE__, $VERSION
  if( exists $ENV{MOD_PERL} and $ENV{MOD_PERL}=~/mod_perl/ );

如果MOD_PERL环境变量存在且它包含mod_perl,它只会尝试加载XS组件。我的猜测是你做了:

C:\> set MOD_PERL=mod_perl
C:\> perl -MApache2::ModSSL -e "print $Apache2::ModSSL::VERSION"

你会遇到问题。

此外,我觉得必须强调的事实是,除perlphp之外,您的OpenSSL版本似乎太旧而无法安全使用。