2016-07-01 17 views
0

Ich bin ein Windows Server 2008 R2 Enterprise mit einem Apache-Server installiert und mod_perl & mod_ssl ich nur habe Apache2 :: ModSSL installiert, aber ich konnte cpan dafür nicht benutzen und musste es mit nmake kompilieren. CPAN funktioniert auf diesem Server nicht korrekt und ich kann das nicht ändern. Ein über https aufgerufenes Perl-Skript sollte später auf das Zertifikat zugreifen können, das die Clients zur Authentifizierung verwendet haben. Deshalb möchte ich Apache2 :: ModSSL für den Zugriff auf die SSL-Variablen verwenden.Kann 'C: /Apache/Perl/site/lib/auto/Apache2/ModSSL/ModSSL.dll' nicht laden

Wenn ich versuche, mein Testskript acess nach

use Apache2::ModSSL; 

Implementierung Ich erhalte einen HTTP500 Fehler von dem Server. Die Server-Fehlerprotokoll Zustände

[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 

Wenn ich überprüfen Sie die Datei Lage ist ModSSL.dll auf genau diesen Pfad gespeichert. Ich überprüfte auch die Datei Zugang und gewährte vollen Zugriff auf alle Benutzer, System, Administratoren usw. Apache wurde mehrmals neu gestartet und es änderte nichts. Als ich versuchte, es in einem cmd auszuführen, offenbar gab es keine Verbindung zu überprüfen, aber ich konnte

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

ohne Probleme ausführen. Wie löst man das Problem beim Laden des Moduls in Apache?

Server Readme Staaten

Dies ist eine binäre Distribution für Win32 von Perl 5.8.7 und Apache 2.0.54 zusammen mit mod_perl-2.0.1 mod_ssl/OpenSSL (0.9.7g) und php-4.3.11, alle mit VC++ 6.0 (SP5) erstellt.

cl -version Staaten

Microsoft (R) 32-Bit-C/C++ Optimizing Compiler Version 15.00.30729.01 für 80x86

nmake -version Staaten

Microsoft (R) Programmwartungsprogramm Version 9.00.30729.01

+0

Ihre 'Perl'- und XS-Module müssen mit dem gleichen Compiler kompiliert werden. –

+0

Wie in einer Readme-Datei angegeben, wurden Apache Server und Perl mit VC++ 6.0 (SP5) erstellt. Also sollte nmake derselbe Compiler sein, oder irre ich mich? – chenino

+0

Nun, ist der Compiler installiert? Hast du überprüft, welcher 'nmake' aufgerufen wird? Was gibt dir 'cl' als Versionsnummer? Sie sind die einzige Person, die diese Dinge wissen kann, also aktualisieren Sie Ihre Frage mit den Informationen. –

Antwort

2

Ohne zu tief zu untersuchen, der wahrscheinlichste Grund für Ihr Problem ist, dass perl, OpenSSL, mod_ssl etc, wo mit einem anderen Compiler als die kompilierte Sie Apache::ModSSL bauen verwendet.

Es scheint mir, dass das Modul nur die XS-Version versucht, wenn es denkt, dass es unter läuft. Sie können im Modul sehen diese Apache2/ModSSL.pm:

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

Es wird versucht, nur die XS-Komponente zu laden, wenn die MOD_PERL Umgebungsvariable existiert, und es enthält mod_perl. Meine Vermutung ist, wenn Sie es taten:

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

würden Sie auf Probleme stoßen.

Zusätzlich muss ich betonen, dass Ihre OpenSSL-Version zusätzlich zu perl und php zu alt scheint, um sicher verwendet zu werden.

+1

Entschuldigung für die Verzögerung in meiner Antwort. Ich habe es mit Ihren Befehlen versucht und eine differenziertere Fehlermeldung bekommen, dass MSCVR90.dll fehlt. Ich versuche nun, es in den Pfad zu integrieren und werde es dann nochmal versuchen. Das bringt mich einen Schritt weiter, also war es schon hilfreich. Wenn ich damit fertig bin, werde ich deine Antwort markieren – chenino