Signatur
Beschreibung
Die Klasse OpenSSLCertificateSigningRequest wurde in PHP 8.0 eingeführt, um die bisherigen OpenSSL-CSR-Ressourcen (resource) durch ein sauberes Objekt-Handle zu ersetzen. Sie ist vollständig opak, d. h. sie besitzt keine öffentlich zugänglichen Eigenschaften oder Methoden — sie dient ausschließlich als typsicheres Handle, das an OpenSSL-Funktionen übergeben wird.
Ein OpenSSLCertificateSigningRequest-Objekt wird typischerweise mit openssl_csr_new() erzeugt oder mit openssl_csr_get_public_key() und ähnlichen Funktionen weiterverarbeitet. Es kann außerdem mit openssl_csr_sign() von einer Zertifizierungsstelle (CA) oder selbst signiert werden, um ein vollständiges X.509-Zertifikat zu erzeugen.
Vor PHP 8.0 lieferten OpenSSL-Funktionen für CSR-Objekte einen resource-Wert zurück, der per is_resource() geprüft werden musste. Ab PHP 8.0 kann stattdessen instanceof OpenSSLCertificateSigningRequest oder Typdeklaration (OpenSSLCertificateSigningRequest) verwendet werden, was eine deutlich robustere und lesbarere Typprüfung ermöglicht.
Die Klasse ist nicht direkt instanziierbar (kein öffentlicher Konstruktor). Instanzen werden ausschließlich intern durch die OpenSSL-Erweiterung erstellt und von Funktionen wie openssl_csr_new() zurückgegeben.
Beispiele
CSR erstellen und als PEM-String exportieren
<?php
$privateKey = openssl_pkey_new([
'private_key_bits' => 2048,
'private_key_type' => OPENSSL_KEYTYPE_RSA,
]);
$dn = [
'countryName' => 'DE',
'stateOrProvinceName' => 'Bayern',
'localityName' => 'München',
'organizationName' => 'Beispiel GmbH',
'commonName' => 'example.com',
'emailAddress' => 'admin@example.com',
];
$csr = openssl_csr_new($dn, $privateKey, ['digest_alg' => 'sha256']);
if ($csr instanceof OpenSSLCertificateSigningRequest) {
echo "CSR erfolgreich erstellt.\n";
// CSR als PEM-String exportieren
openssl_csr_export($csr, $csrPem);
echo $csrPem;
} else {
echo "Fehler beim Erstellen des CSR.\n";
}
CSR selbst signieren und Zertifikat erzeugen
<?php
$privateKey = openssl_pkey_new([
'private_key_bits' => 2048,
'private_key_type' => OPENSSL_KEYTYPE_RSA,
]);
$dn = [
'countryName' => 'DE',
'commonName' => 'localhost',
];
/** @var OpenSSLCertificateSigningRequest $csr */
$csr = openssl_csr_new($dn, $privateKey);
// CSR selbst signieren: gültig für 365 Tage
$cert = openssl_csr_sign($csr, null, $privateKey, 365, ['digest_alg' => 'sha256']);
if ($cert instanceof OpenSSLCertificate) {
openssl_x509_export($cert, $certPem);
echo "Selbstsigniertes Zertifikat:\n";
echo $certPem;
} else {
echo "Fehler beim Signieren des CSR.\n";
}
// Wichtig · Fallstricke
Migration von PHP 7 auf PHP 8: Code, der vor PHP 8.0 is_resource($csr) verwendet hat, muss auf $csr instanceof OpenSSLCertificateSigningRequest umgestellt werden. Ressource-Handles werden in PHP 8.0+ nicht mehr zurückgegeben.
Sicherheitshinweis: Private Schlüssel, die beim CSR-Erstellen verwendet werden, sollten niemals im Klartext gespeichert oder übertragen werden. Verwende beim Export immer eine starke Passphrase via openssl_pkey_export().
Die Klasse ist final und nicht erweiterbar. Es ist nicht möglich, Unterklassen zu erstellen oder eigene Instanzen mit new OpenSSLCertificateSigningRequest() zu erzeugen — Instanzen entstehen ausschließlich intern durch die OpenSSL-Extension.