LXXII. OpenSSL Funktionen

Warnung

Diese Erweiterung ist EXPERIMENTELL. Das Verhalten dieser Erweiterung, einschließlich der Funktionsnamen, und alles Andere was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Erweiterung auf eigenes Risiko.

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-4.0.4pl1 setzt OpenSSL >= 0.9.6 voraus, PHP-4.0.5 und folgende funktionieren auch mit OpenSSL >= 0.9.5.

Installation

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

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 verwenden array($key, $passphrase). $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/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.

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)

OPENSSL_PKCS1_PADDING (integer)

OPENSSL_SSLV23_PADDING (integer)

OPENSSL_NO_PADDING (integer)

OPENSSL_PKCS1_OAEP_PADDING (integer)

OPENSSL_KEYTYPE_RSA (integer)

OPENSSL_KEYTYPE_DSA (integer)

OPENSSL_KEYTYPE_DH (integer)

PKCS7 Kennzeichen/Konstanten

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

Tabelle 1. PKCS7 KONSTANTEN

KonstanteBeschreibung
PKCS7_TEXTFügt den text/plain Inhaltstyp Header einer verschlüsselten/signierten Nachricht hinzu. Wenn Sie entschlüsseln oder überprüfen, werden diese Header von der Ausgabe entfernt - wenn die entschlüsselte oder geprüfte Nachricht nicht dem MIME Typ text/plain entspricht, tritt ein Fehler auf.
PKCS7_BINARYNormalerweise 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 mit binären Daten umgehen, die nicht dem MIME Format entprechen.
PKCS7_NOINTERNWenn 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_NOVERIFYKeine Überprüfung des signierenden Zertifikats einer signierten Nachricht.
PKCS7_NOCHAINKeine Verknüpfung der Überprüfung des Zertifikats mit den Zertifikaten des Unterzeichners: das bedeutet, die Zertifikate in der signierten Nachricht werden nicht als unvertrauenswürdige CAs benutzt.
PKCS7_NOCERTSBeim 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_NOATTRBeim 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_DETACHEDBeim Signieren einer Nachricht wird Klartext-Signierung verwendet mit 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_NOSIGSKein Versuch und keine Überprüfung der Signaturen einer Nachricht.

Anmerkung: Diese Konstanten wurden in 4.0.6 hinzugefügt.

Inhaltsverzeichnis
openssl_csr_export_to_file -- Exportiert ein CSR in eine Datei
openssl_csr_export -- Exportiert ein CSR in eine Datei oder eine Variable
openssl_csr_new -- Erzeugt einen privaten Schlüssesl und ein CSR
openssl_csr_sign -- Signiert ein Zertifikat mit einem andern CERT
openssl_error_string -- Liefert eine OpenSSL Fehlermeldung
openssl_free_key -- Freigabe einer Schlüsselressource
openssl_get_privatekey -- Bereitet einen PEM formatierten privaten Schlüssel zum Gebrauch vor
openssl_get_publickey -- Extrahiert einen öffentlichen Schlüssel aus einem Zertifikat und bereitet ihn für den Gebrauch vor
openssl_open -- Öffnet versiegelte Daten
openssl_pkcs7_decrypt -- Entschlüssen einer S/MIME verschlüsselten Nachricht
openssl_pkcs7_encrypt -- Verschlüsseln einer S/MIME Nachricht
openssl_pkcs7_sign -- Unterzeichnen einer S/MIME Nachricht
openssl_pkcs7_verify -- Überprüft die Unterschrift einer mit S/MIME unterschriebenen Nachricht
openssl_pkey_export_to_file -- Liefert eine exportierbare Representation eines Schlüssels in einer Datei
openssl_pkey_export -- Liefert eine exportierbare Representation eines Schlüssels in einem String oder einer Datei
openssl_pkey_get_private -- Get a private key
openssl_pkey_get_public -- Extract public key from certificate and prepare it for use
openssl_pkey_new -- Erzeugt einen neuen privaten Schlüssel
openssl_private_decrypt -- Entschlüsselt Daten mit einem privaten Schlüssel
openssl_private_encrypt -- Verschlüsselt Daten mit einem privaten Schlüssel
openssl_public_decrypt -- Entschlüsselt Daten mit einem öffentlichen Schlüssel
openssl_public_encrypt -- Verschlüsselt Daten mit einem öffentlichen Schlüssel
openssl_seal -- Versiegelt (verschlüsselt) Daten
openssl_sign -- Erzeugen einer Unterschrift
openssl_verify -- Überprüft eine Unterschrift
openssl_x509_check_private_key -- Überprüft, ob ein privater Schlüssel zu einem CERT passt
openssl_x509_checkpurpose -- Überprüft ob ein Zertifikat für einen bestimmten Zweck benutzt werden kann
openssl_x509_export_to_file -- Exportiert ein CERT in eine Datei oder eine Variable
openssl_x509_export -- Exportiert ein CERT in eine Datei oder eine Variable
openssl_x509_free -- Freigabe einer Zertifikats Resource
openssl_x509_parse -- Analyse eines X509 Zertifikats und Rückgabe der Information in einem Array
openssl_x509_read -- Analysiert ein X.509 Zertitifikat und gibt eine Resource-Kennung zurück