openssl_csr_sign
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
openssl_csr_sign — Signiert einen CSR mit einem anderen Zertifikat (oder sich selbst) und generiert ein Zertifikat
Beschreibung
OpenSSLCertificateSigningRequest|string
$csr
,OpenSSLCertificate|string|null
$ca_certificate
,OpenSSLAsymmetricKey|OpenSSLCertificate|array|string
$private_key
,int
$days
,?array
$options
= null
,int
$serial
= 0): OpenSSLCertificate|false
openssl_csr_sign() erzeugt eine x509-Zertifikatressource aus dem übergebenen CSR.
Hinweis: Die ordnungsgemäße Ausführung dieser Funktion setzt die Installation einer gültigen openssl.cnf-Datei voraus. Mehr Information hierzu finden sie im Abschnitt Installations.
Parameter-Liste
-
csr
-
Ein zuvor mit openssl_csr_new() erzeugter CSR. Es kann sich aber auch um den Pfad zu einer PEM-kodierten CSR-Datei in der Form file://path/to/csr handeln, oder eine Zeichenkette wie von openssl_csr_export() zurückgegeben.
-
ca_certificate
-
Das generierte Zertifikat wird mit
ca_certificate
signiert. Falls hiernull
angegeben wird, wird ein selbstsigniertes Zertifikat erstellt. -
private_key
-
private_key
ist der zuca_certificate
gehörende private Schlüssel. -
days
-
days
gibt die Gültigkeitsdauer des Zertifikats in Tagen an. -
options
-
Mit
options
kann die Signierung des CSR feiner abgestimmt werden. Weitere Informationen zuoptions
sind openssl_csr_new() zu entnehmen. -
serial
-
Eine optionale Seriennummer für das ausgestellte Zertifikat. Wenn nicht angegeben, wird der Standardwert 0 verwendet.
Rückgabewerte
Gibt bei Erfolg ein OpenSSLCertificate zurück,
false
bei einem Fehler.
Changelog
Version | Beschreibung |
---|---|
8.0.0 |
Bei Erfolg gibt diese Funktion nun eine
OpenSSLCertificate-Instanz zurück; vorher wurde
eine Ressource vom Typ OpenSSL X.509 zurückgegeben.
|
8.0.0 |
csr akzeptiert nun eine
OpenSSLCertificateSigningRequest-Instanz; vorher
wurde eine Ressource vom Typ OpenSSL X.509 CSR
akzeptiert.
|
8.0.0 |
ca_certificate akzeptiert nun eine
OpenSSLCertificate-Instanz; vorher wurde eine
Ressource vom Typ OpenSSL X.509 akzeptiert.
|
8.0.0 |
private_key akzeptiert nun eine
OpenSSLAsymmetricKey- oder
OpenSSLCertificate-Instanz; vorher wurde eine
Ressource vom Typ OpenSSL-Schlüssel oder
OpenSSL X.509 akzeptiert.
|
Beispiele
Beispiel #1 openssl_csr_sign()-Beispiel - Signieren eines CSR (wie eine eigene CA implementiert wird)
<?php
// Annahme: dieses Skript erhält einen CSR, der auf einer anderen Seite in
// eine Textarea eingegeben wurde.
$csrdata = $_POST["CSR"];
// Wir werden die Anfrage mit unserem eigenen
// "certificate authority"-Zertifikat signieren. Sie können jedes beliebige
// Zertifikat verwenden, um ein anderes zu signieren. Aber das Ganze ist
// ziemlich nutzlos, solange die Software/Benutzer, die dieses neu signierte
// Zertifikat nutzen werden, dem signierenden Zertifikat nicht vertrauen.
// Wir benötigen unser CA-Zertifikat und dessen privaten Schlüssel
$cacert = "file://path/to/ca.crt";
$privkey = array("file://path/to/ca.key", "your_ca_key_passphrase");
$usercert = openssl_csr_sign($csrdata, $cacert, $privkey, 365, array('digest_alg'=>'sha256') );
// Jetzt zeigen wir das generierte Zertifikat an, damit die Benutzer es
// kopieren und in ihre lokale Konfiguration einfügen können (wie z.B. eine
// Datei, die das Zertifikat für ihren SSL-Server enthalten soll.
openssl_x509_export($usercert, $certout);
echo $certout;
// Anzeigen aller aufgetretenen Fehler
while (($e = openssl_error_string()) !== false) {
echo $e . "\n";
}
?>