(PHP 4 >= 4.2.0, PHP 5, PHP 7)
openssl_csr_new — Erzeugt einen CSR
$dn
, resource &$privkey
[, array $configargs
[, array $extraattribs
]] ) : mixed
openssl_csr_new() erzeugt einen neuen CSR
(Zertifikatssignierungsanfrage) basierend auf den Informationen, die mit
dem Parameter dn
angegeben werden.
Hinweis: Die ordnungsgemäße Ausführung dieser Funktion setzt die Installation einer gültigen openssl.cnf-Datei voraus. Mehr Information hierzu finden sie im Installationsabschnitt.
dn
Der Distinguished Name oder die Betrefffelder, die im Zertifikat genutzt werden sollen.
privkey
privkey
sollte auf einen privaten Schlüssel
zeigen, der vorher mit openssl_pkey_new() erzeugt
wurde (oder den Sie auf andere Weise von der Familie der openssl_pkey
Funktionen erhalten haben). Der entsprechende öffentliche Teil des
Schlüssels wird benutzt um den CSR zu signieren.
configargs
configargs
können Sie benutzen um zusätzliche
Konfigurationsoptionen für den CSR anzugeben. Sowohl
dn
als auch extraattribs
sind assoziative Arrays, deren Schlüssel zu OIDs konvertiert und auf den
relevanten Teil der Anfrage angewendet werden.
Im Standard werden die Informationen für die Anfrage aus der
openssl.conf ihres Systems benutzt. Sie können einen
Konfigurationsabsschnitt mit dem Schlüssel
config_section_section des Arrays
configargs
setzen. Außerdem haben Sie die
Möglichkeit eine alternative openssl Konfigurationsdatei anzugeben, indem
Sie den Wert des Schlüssels config auf den Pfad zu der
Datei setzen, die Sie benutzen möchten. Die unten in der Tabelle
aufgeführten Schlüssel in configargs
, falls Sie
diese definiert haben, verhalten sich genau gleich wie die entsprechenden
Werte in der openssl.conf
configargs Schlüssel |
Typ | openssl.conf Entsprechung | Beschreibung |
---|---|---|---|
digest_alg | string | default_md | Digest-Methode oder Signaturhash, üblicherweise eins von openssl_get_md_methods() |
x509_extensions | string | x509_extensions | Bestimmt welche Erweiterung benutzt werden soll, wenn ein x509 Zertifikat erzeugt werden soll. |
req_extensions | string | req_extensions | Bestimmt welche Erweiterung benutzt werden soll, wenn eine Zertifikatssignierungsanfrage (CSR) erzeugt werden soll. |
private_key_bits | integer | default_bits | Bestimmt wieviele Bits verwendet werden, um einen privaten Schlüssel zu erzeugen. |
private_key_type | integer | keine |
Bestimmt den Typ des privaten Schlüssels der erzeugt werden soll.
Der Typ kann einer der folgenden sein:
OPENSSL_KEYTYPE_DSA ,
OPENSSL_KEYTYPE_DH ,
OPENSSL_KEYTYPE_RSA oder
OPENSSL_KEYTYPE_EC .
Der Standardwert ist OPENSSL_KEYTYPE_RSA .
|
encrypt_key | boolean | encrypt_key | Soll ein exportiertet Schlüssel (mit Passphrase) verschlüsselt werden? |
encrypt_key_cipher | integer | keine | Eine der Ziffer-Konstanten. |
curve_name | string | none | Einer der openssl_get_curve_names(). |
config | string | N/A | Pfad zur eigenen alternativen openssl.conf Datei. |
Gibt den CSR zurück. Im Fehlerfall wird FALSE
zurückgegeben.
Version | Beschreibung |
---|---|
7.1.0 |
configargs unterstützt nun ebenfalls curve_name.
|
Beispiel #1 Erzeugen eines selbstsignierten Zertifikats
<?php
// für SSL Zertifikate ist der commonName der zu sichernden Domainnamen
// für S/MIME Zertifikate the commonName ist der Eigentümer der E-Mail-Adresse
// die location und identification Felder beziehen sich auf den Eigentümer der
// zu sichernden Domain oder des E-Mail Eigentümers
$dn = array(
"countryName" => "GB",
"stateOrProvinceName" => "Somerset",
"localityName" => "Glastonbury",
"organizationName" => "The Brain Room Limited",
"organizationalUnitName" => "PHP Documentation Team",
"commonName" => "Wez Furlong",
"emailAddress" => "[email protected]"
);
// Erzeugen eines neuen privaten (und öffentlichen) Schlüsselpaars
$privkey = openssl_pkey_new(array(
"private_key_bits" => 2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
));
// Erzeugen einer Zertifikatssignierungsanfrage
$csr = openssl_csr_new($dn, $privkey, array('digest_alg' => 'sha256'));
// Erzeugen eines selbstsignierten Zertifikts, das für die Dauer von 365 Tagen
// gültig ist.
$x509 = openssl_csr_sign($csr, null, $privkey, $days=365, array('digest_alg' => 'sha256'));
// Sichern des privaten Schlüssels, des CSR und des selbstsignierte Zertifikats
// für spätere Verwendung
openssl_csr_export($csr, $csrout) and var_dump($csrout);;
openssl_x509_export($x509, $certout) and var_dump($certout);
openssl_pkey_export($privkey, $pkeyout, "mypassword") and var_dump($pkeyout);
// Anzeigen der möglichen aufgetretenen Fehler
while (($e = openssl_error_string()) !== false) {
echo $e . "\n";
}
?>
Beispiel #2 Erzeugen eines selbstsignierten ECC-Zertifikats (von PHP 7.1.0 an)
<?php
$subject = array(
"commonName" => "docs.php.net",
);
// Erzeugen eines neuen privaten (und öffentlichen) Schlüsselpaars
$private_key = openssl_pkey_new(array(
"private_key_type" => OPENSSL_KEYTYPE_EC,
"curve_name" => 'prime256v1',
));
// Erzeugen einer Zertifikatssignierungsanfrage
$csr = openssl_csr_new($subject, $private_key, array('digest_alg' => 'sha384'));
// Erzeugen eines selbstsignierten EC-Zertifikats
$x509 = openssl_csr_sign($csr, null, $private_key, $days=365, array('digest_alg' => 'sha384'));
openssl_x509_export_to_file($x509, 'ecc-cert.pem');
openssl_pkey_export_to_file($private_key, 'ecc-private.key');
?>