PHP Handbuch
Zurück |  | Weiter

# CXII. OpenSSL Funktionen

# Einführung

Dieses Modul nutzt die Funktionen von OpenSSL zur Erzeugung und Überprüfung von Signaturen und zum versiegeln (verschlüsseln) und öffnen (entschlüsseln) von Daten. OpenSSL bietet viele Möglichkeiten die dieses Modul zum jetzigen Zeitpunkt nicht unterstützt. Einige dieser Möglichkeiten werden vielleicht in zukünftigen Versionen zur Verfügung stehen.

# Anforderungen

Bevor Sie die Openssl-Funktionen nutzen können, müssen Sie das OpenSSL Paket installieren. PHP zwischen 4.0.5 und 4.3.1 funktionieren mit OpenSSL >= 0.9.5. Andere Versionen (PHP <=4.0.4pl1 and >= 4.3.2) setzen OpenSSL >= 0.9.6 voraus.

Warnung
Es wird dringnd empfohlen die aktuellste OpenSSL Version zu verwenden, anderenfalls könnte Ihr Webserver anfällig für Attacken sein.

# Installation

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

> Hinnweis für Win32 Benutzer: Um dieses Modul unter Windows benutzen zu können, müssen Sie die Datei `libeay32.dll` vom DLL Ordner Ihrer PHP/Win32 Binärdistribution in den SYSTEM32 Ordner von Windows kopieren.(Zum Beispiel nach: `C:\WINNT\SYSTEM32` oder `C:\WINDOWS\SYSTEM32`).

> Wenn Sie vorhaben, Schlüssel erzeugende und Zertifikats signierende Funktionen zu benutzen, müssen Sie eine gültige Konfigurationsdatei für OpenSSL, `openssl.cnf`, installieren. Ab PHP 4.3.0 finden Sie bei der win32 Binärdistribution im Ordner `openssl` eine Beispielkonfigurationsdatei, die Sie benutzen können. Falls Sie PHP 4.2.0 oder eine höhere Version benutzen und diese Datei in Ihrer Distribution fehlt, finden Sie diese Datei auf der OpenSSL Homepage, oder Sie laden sich PHP 4.3.0 herunter und verwenden die in diesem Paket enthaltene Datei.

> Hinnweis für Win32 Benutzer: 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.

# Laufzeit Konfiguration

Diese Erweiterung definiert keine Konfigurationseinstellungen in der `php.ini`.

# Resource Typen

# Schlüssel/Zertifikat Parameter

Ziemlich viele der OpenSSL Funktionen benötigen einen Schlüssel- oder einen Zertifikatparameter. PHP 4.0.5 und frühere Versionen müssen eine Schlüssel- oder Zertifikatsresource nutzen, die von einer der openssl_get_xxx Funktionen zurückgegeben wird. Spätere Versionen können eine der folgenden Methoden benutzen:

- Zertifikate

  1. Eine X.509 Resource die von openssl_x509_read zurückgegeben wird.

  2. Eine Zeichenkette mit dem Format `file://pfad/zu/cert.pem`; die angegebene Datei muss ein PEM verschlüsseltes Zertifikat enthalten.

  3. Eine Zeichenkette die den Inhalt eines Zertifikats enthält, PEM verschlüsselt.

- Öffentliche/Private Schlüssel

  1. Eine Schlüsselresource die von openssl_get_publickey() oder openssl_get_privatekey() zurückgegeben wird.

  2. Nur für öffentliche Schlüssel: eine X.509 Resource.

  3. Eine Zeichenkette mit dem Format `file://pfad/zu/datei.pem` - die angegebene Datei muss ein PEM verschlüsseltes Zertifikat/privaten Schlüssel enthalten (kann auch beides enthalten).

  4. Eine Zeichenkette die den Inhalt eines Zertifikats/Schlüssels enthält, PEM verschlüsselt.

  5. Für private Schlüssel können Sie auch die Syntax array($key, $passphrase) verwenden. $key repräsentiert einen Schlüssel, den Sie entweder mit der Notation file:// oder dem textlichen Inhalt wie oben angeben. $passphrase ist eine Zeichenfolge, die die Passphrase für den privaten Schlüssel enthält.

# Zertifikat Nachweis

Wenn Sie eine Funktion aufrufen, die eine Signatur/ein Zertifikat überprüft, ist der Parameter cainfo ein Array, das Datei- und Verzeichnisnamen enthält, die auf vertrauenswürdige CA Dateien verweisen. Falls Sie ein Verzeichnis angeben, muss dies ein korrekt geformtes gehashdes Verzeichnis sein, in der Art, wie es der Befehl openssl verwenden würde.

# Vordefinierte Konstanten

Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.

## Zweckprüfende Flags

`X509_PURPOSE_SSL_CLIENT` (integer)

`X509_PURPOSE_SSL_SERVER` (integer)

`X509_PURPOSE_NS_SSL_SERVER` (integer)

`X509_PURPOSE_SMIME_SIGN` (integer)

`X509_PURPOSE_SMIME_ENCRYPT` (integer)

`X509_PURPOSE_CRL_SIGN` (integer)

`X509_PURPOSE_ANY` (integer)

## Padding Flags

`OPENSSL_PKCS1_PADDING` (integer)

`OPENSSL_SSLV23_PADDING` (integer)

`OPENSSL_NO_PADDING` (integer)

`OPENSSL_PKCS1_OAEP_PADDING` (integer)

## Key types

`OPENSSL_KEYTYPE_RSA` (integer)

`OPENSSL_KEYTYPE_DSA` (integer)

`OPENSSL_KEYTYPE_DH` (integer)

## PKCS7 Flags/Konstanten

Die S/MIME Funktionen nutzen Flags die sich dadurch auszeichnen, dass sie ein Bitfeld benutzen, das einen oder mehrere der folgenden Werte enthalten kann:

Tabelle 1. PKCS7 KONSTANTEN

Konstante | Beschreibung
--- | ---
PKCS7_TEXT | Fügt den Inhaltstyp Header text/plain einer verschlüsselten/signierten Nachricht hinzu. Wenn Sie entschlüsseln oder überprüfen, werden diese Header von der Ausgabe entfernt. Entspricht die entschlüsselte oder geprüfte Nachricht nicht dem MIME Typ text/plain, tritt ein Fehler auf.
PKCS7_BINARY | Normalerweise wird die Nachricht in ein "kanonisches" Format konvertiert, das effektiv CR und LF als Zeilende benutzt, wie von der S/MIME Spezifikation gefordert. Wird diese Option angegeben, findet keine Konvertierung statt. Das kann sich als nützlich erweisen, wenn Sie es mit binären Daten zu tun haben, die nicht dem MIME Format entprechen.

PKCS7_NOINTERN

Wenn Sie eine Nachricht überprüfen, werden in der Nachricht enthaltene Zertifikate (falls es welche gibt) nach dem unterzeichnenden Zertifikat durchsucht. Mit dieser Option werden nur Zertifikate benutzt, die mit dem Parameter `extracerts` in der Funktion openssl_pkcs7_verify() angegeben wurden. Die mitgelieferten Zertifikate können aber dennoch als nicht vertrauenswürdige CAs benutzt werden.

PKCS7_NOVERIFY | Keine Überprüfung des signierenden Zertifikats einer signierten Nachricht.
PKCS7_NOCHAIN | Keine Verknüpfung der Überprüfung des Zertifikats mit den Zertifikaten des Unterzeichners: das bedeutet, die Zertifikate in der signierten Nachricht werden nicht als nicht vertrauenswürdige CAs benutzt.

PKCS7_NOCERTS

Beim Signieren einer Nachricht wird normalerweise das Zertifikat des Unterzeichnenden mit in die Nachricht aufgenommen - mit dieser Option wird das Zertifikat nicht mit aufgenommen. Diese Option verringert die Größe der signierten Nachricht, aber der Überprüfende muss eine lokale Kopie des Zertifikats vom Unterzeichnenden besitzen (zum Beispiel durch Angabe des Parameters `extracerts` in der Funktion openssl_pkcs7_verify()).

PKCS7_NOATTR | Beim Signieren einer Nachricht wird normalerweise eine Reihe von Attributen mit angehängt. Diese enthalten die Zeit der Signierung und die unterstützen symmetrischen Algorithmen. Mit dieser Option werden diese Attribute nicht mit aufgenommen.

PKCS7_DETACHED

Beim Signieren einer Nachricht wird Klartext-Signierung verwendet mit dem MIME Typ multipart/signed. Das ist der Standard, wenn Sie keinen optionalen Parameter `flags` an die Funktion openssl_pkcs7_sign() übergeben. Wenn Sie diese Option ausschalten wird die Nachricht mit einer undurchsichtigen Signatur unterzeichnet. Dieses Verhalten ist robuster gegenüber der Übersetzung durch Mail-Relays, kann aber nicht mit Mailprogrammen gelesen werden, die nicht den S/Mime Standard unterstützen.

PKCS7_NOSIGS | Kein Versuch und keine Überprüfung der Signaturen einer Nachricht.

> Anmerkung: Diese Konstanten wurden in 4.0.6 hinzugefügt.

## Signatur-Algorithmen

`OPENSSL_ALGO_SHA1` (integer)

  Wird als Standard-Algorithmus für die Funktionen openssl_sign() und openssl_verify() verwendet.

`OPENSSL_ALGO_MD5` (integer)

`OPENSSL_ALGO_MD4` (integer)

`OPENSSL_ALGO_MD2` (integer)

> Anmerkung: Diese Konstanten wurden in 5.0.0 hinzugefügt.

## Ciphers

`OPENSSL_CIPHER_RC2_40` (integer)

`OPENSSL_CIPHER_RC2_128` (integer)

`OPENSSL_CIPHER_RC2_64` (integer)

`OPENSSL_CIPHER_DES` (integer)

`OPENSSL_CIPHER_3DES` (integer)

> Anmerkung: Diese Konstanten wurden in 4.3.0 hinzugefügt.

## Versionen-Konstanten

`OPENSSL_VERSION_TEXT` (string)

`OPENSSL_VERSION_NUMBER` (integer)

> Anmerkung: Diese Konstanten wurden in 5.2.0 hinzugefügt.

Zurück | Zum Anfang | Weiter
openal_stream | Nach oben | openssl_csr_export_to_file