0

我正在运行安装了 Apache 服务器并安装了 mod_perl 和 mod_ssl 的 Windows Server 2008 R2 Enterprise 我刚刚安装了 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 恰好存储在此路径中。我还检查了文件访问权限,并授予所有用户、系统、管理员等完全访问权限。Apache 被重新启动了多次,它没有改变任何东西。当我尝试在 cmd 中执行它时,显然没有要检查的连接,但我可以执行

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

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

服务器自述文件状态

这是 Perl 5.8.7 和 Apache 2.0.54 的 Win32 的二进制发行版,以及 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 用于 80x86

nmake -version状态

Microsoft (R) 程序维护实用程序版本 9.00.30729.01

4

1 回答 1

2

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

在我看来,如果模块认为它在mod_perl. 您可以在模块的Apache2/ModSSL.pm中看到这一点:

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

如果MOD_PERL环境变量存在并且它包含mod_perl. 我的猜测是,如果你这样做:

C:\> 设置 MOD_PERL=mod_perl
C:\> perl -MApache2::ModSSL -e "打印 $Apache2::ModSSL::VERSION"

你会遇到问题。

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

于 2016-07-01T14:18:27.820 回答