PHP Doku:: Installation - openssl.installation.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzKryptografische ErweiterungenOpenSSLInstallation/KonfigurationInstallation

Ein Service von Reinhard Neidl - Webprogrammierung.

Installation/Konfiguration

<<Anforderungen

Laufzeit-Konfiguration>>

Installation

Um Openssl mit PHP nutzen zu können, müssen Sie PHP mit der Option --with-openssl[=DIR] kompilieren.

Hinweis: Hinnweis für Win32 Benutzer

Diese Extension benötigt DLL-Dateien. die für Windows verfügbar seien müssen. Der FAQ-Eintrag " Wie füge ich unter Windows PATH mein PHP-Verzeichnis hinzu?" gibt hierzu weitere Informationen. Obwohl ein einfaches Kopieren der DLL-Dateien vom PHP-Verzeichnis in den Windows-Systemordner auch funktioniert (weil der Systemordner immer im PATH enthalten ist), ist dieses Vorgehen nicht empfehlenswert. Diese Extension benötigt die folgenden Dateien im PATH: libeay32.dll

Wenn Sie vorhaben, Schlüssel erzeugende und Zertifikate signierende Funktionen zu benutzen, müssen Sie eine gültige Konfigurationsdatei für OpenSSL, openssl.cnf, installieren. Ab PHP 4.3.0 fügen wir der win32 Binärdistribution eine Beispielkonfigurationsdatei bei. Für PHP 4.3.x und 4.4.x finden Sie die Datei im Verzeichnis openssl. Unter PHP 5.x und 6.x finden Sie die Datei im Verzeichnis extras/openssl. Falls Sie PHP 4.2.0 oder eine höhere Version benutzen und diese Datei in Ihrer Distribution fehlt, finden Sie sie auf der » OpenSSL-Binaries-Seite, oder Sie laden sich PHP 4.3.0 herunter und verwenden die in diesem Paket enthaltene Datei. Bitte beachten Sie daß der Windows Explorer die Endung .cnf standardmässig verbirgt und als Dateityp SpeedDial anzeigt.

PHP verwendet folgende Logik um die Konfigurationsdatei openssl.cnf zu finden:

  • Die Umgebungsvariable OPENSSL_CONF wird, falls gesetzt, als Pfad zur Konfigurationsdatei benutzt (den Dateinamen mit eingeschlossen).
  • Die Umgebungsvariable SSLEAY_CONF wird, falls gesetzt, als Pfad zur Konfigurationsdatei benutzt (den Dateinamen mit eingeschlossen).
  • PHP sucht die Datei openssl.cnf an dem Ort, der bei der Kompilierung der openssl DLL als Speicherort für Zertifikate angegeben wurde. Üblicherweise ist der Standarddateiname c:\usr\local\ssl\openssl.cnf.

Damit diese Datei gefunden wird, müsssen Sie sich bei der Installation entscheiden, entweder die Konfigurationsdatei unter c:\usr\local\ssl\openssl.cnf anzulegen, oder diese Datei an einem anderen Ort abzulegen und Umgebungsvariablen zu benutzen (möglicherweise auf Basis verschiedener Virtual-Host Konfigurationen). Bei Funktionen, die diese Konfigurationsdatei benötigen, ist es möglich, durch die Angabe des Parameters configargs den Standardpfad zu dieser Datei in einem Skript zu überschreiben.


2 BenutzerBeiträge:
- Beiträge aktualisieren...
Kathryn Sharron at CSUN
19.02.2009 23:40
I followed all of the instructions above to install on Windows and *still* couldn't get "OpenSSL support     enabled" from phpinfo(). The answer turned out to be in my php.ini file:

; Directory in which the loadable extensions (modules) reside.
extension_dir = "./"

I found php_openssl.dll in my /ext directory. I copied it up to the same directory as php.ini, but I expect that editing the extension_dir value would work too.
mtudor AT icefusion remove me DOT co uk
24.10.2008 13:52
SYMPTOMS AND SETUP
------------------

For anyone having problems enabling the PHP openssl extension on WINDOWS.

I uncommented:  extension=php_openssl.dll  and installed the latest versions of ssleay.dll and libeay.dll in <windows>\system32.

When I restarted my web server and examined phpinfo(), there was no "openssl" headed section (although there were references to openssl in other sections).

I also found this error in my web server logs (<apache dir>/logs/ssl.log and <apache dir>/logs/access.log).

PHP Warning:  PHP Startup: Unable to load dynamic library 'C:\\Program Files\\PHP\\ext\\php_openssl.dll' - The operating system cannot run %1.\r\n in Unknown on line 0

I have PHP 5.2.6 running on Apache 2.2.3 for Windows.

CAUSE
-----

This was caused by PHP picking up the WRONG VERSIONS of libeay.dll and ssleay.dll, which were present in multiple locations on my computer.

When any application attempts to use a dll file in windows, the system searches for this file using the following order:
   1. The directory from which the application loaded.
   2. The windows\system32 directory.
   3. The windows\system directory.
   4. The windows directory.
   5. The current directory.
   6. The directories that are listed in the PATH environment variable.

   (http://msdn.microsoft.com/en-us/library/ms682586.aspx)

For PHP running under Apache, the application directory is <apache dir>\bin and NOT <php dir>.  PHP was finding OUT OF DATE versions of libeay.dll and ssleay.dll in <apache dir>\bin (probably installed when I enabled SSL support in my web server).  Because of this, the latest versions in windows\system32 were never reached.

NOTE: Although my problem was caused by an Apache2 specific configuration, I can imagine others might face this problem if, say, they install the openssl dlls in the PHP directory and add this directory to the PATH.  I haven't checked it but I would imagine if another directory in the path contains outdated openssl dlls and this is listed before the PHP directory, a similar situation would occur.

SOLUTION
--------

Either replace the dlls in the first location on the search order, or, as I did, you can install the latest openssl dlls in the the windows system32 directory and just rename to .old the ssleay.dll and libeay.dll files in the search order locations before windows\system32.

Hope that helps others who might be stuck with this.

Mark.



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)