Öffentlichen Schlüssel signieren mit openssl_csr_sign

Ein wichtiger Aspekt eines öffentlichen Schlüssels ist das zugehörige X509 Zertifikat. Ein X509 Zertifikat wird im Regelfall von einer dritten Stelle erzeugt. Diese dritte Stelle nennt man ein Trustcenter. Die Zertifikatsausstellung ist im Grunde eine elektronische Signatur, die das Trustcenter mit einem eigenen privaten Schlüssel, für den öffentlichen Schlüssel erstellt.

Die PHP Implementierung von OpenSSL bietet eine eigene Funktion openssl_csr_sign zum signieren von öffentlichen Schlüsseln.

/* selfsign the csr */
try{		
	$pub_crt = openssl_csr_sign($csr, NULL, $privkey, 1095, $configArgs );
}catch (Exeption $e){
	while ($msg = openssl_error_string()){
			echo $msg . "<br />\n";
	}
}

Schauen wir uns wieder die Eingabeparamter der Funktion openssl_csr_sign etwas genauer an:

$csr
In dieser Variable muss die Zertifizierungsanfragedatei (Certificate Request) stecken. Diesen erhält man als erfolgreiches Ergebnis aus der Funktion openssl_csr_export.

$privkey
In dieser Variable muss der Private Schlüssel stecken.

1095
Dieser Integer Wert ist der Gültigkeitszeitraum des Zertifikates. Zertifikate werden immer mit einer Laufzeit ausgestellt. Der Wert ist die Anzahl der Tage in der das Zertifikat gültig ist. in diesem Fall habe ich den Zeitraum von 3 Jahren gewählt.

$configArgs
Welche Attribute in diesem Array gesetzt werden müssen, wird im Abschnitt der Laufzeitkonfiguration erläutert.

Der Paramter NULL steht eigentlich für das öffentliche Zertifikat des Trustcenters. Da wir in diesem Fall kein Trustcenter für die Signatur nutzen, d.h. ein eigenständige Schlüsselpaar verwenden, wird das Zertifikat als selbstsigniert ausgestellt. Der Schlüsselinhaber unterschreibt quasi seinen eigenen öffentlichen Schhlüssel. Das passt natürlich nicht in ein richtiges PKI Modell (Publick Key Infrastructure). Daher bite versteht diese Anleitung lediglich zum Verstehen der Funktionen und testen der Entwicklung. Wenn es in Richtung einer Produktiven Anwendung geht, überlegt vorher genau wie die PKI aussehen soll.

Wenn nun der Aufruf openssl_csr_sign geklappt hat, erhält man in der Variable $pub_crt nun die Ressourcen ID zum Zertifikat. Das Zertifikat muss im folgenden Schritt noch in das X509 Format exportiert werden. Hierfür nutz man die Funktion openssl_x509_export um das öffentliche Zertifikat in eine allgemein verständliche Form zu bringen. Erst dann kann der öffentliche Schlüssel von anderen Kryptoanwendungen überhaupt gelesen werden.

http://www.agile-coding.net/oeffentlichen-schluessel-signieren-mit-openssl_csr_sign/