Öffentlichen Schlüssel exportieren mit openssl_x509_export

Die OpenSSL Implementierung von PHP bietet die Funktion openssl_x509_export zum exportieren von Schlüsseln. Mit der Funktion kann man den öffentlichen sowie den privaten Schlüssel in das X509 Format exportieren.

In diesem Beispiel wird der öffentliche Schlüssel exportiert:

/* export the crt */
try{	
	openssl_x509_export($pub_crt, $certout);
}catch (Exeption $e){
	while ($msg = openssl_error_string()){
			echo $msg . "<br />\n";
	}
}

Schauen wir uns die Eingabeparameter genau an:

$pub_crt
In dieser Variable muss die Ressource des öffentlichen Schlüssels enthalten sein. Die Ressoucen ID erhält man z.B. durch den Vorgang des Schlüsselsignierends, schaut die Funktion openssl_csr_sign an. Dort wird der öffentliche Schlüssel signiert und die Ressourcen ID übergeben.

$certout
Diese Variable enthält nach erfolgreichem Export den String des X509 formatierten öffentlichen Schlüssels. Den öffentlichen Schlüssel kann man nach dem Export mit z.B. mit der PHP Funktion file_put_contents in eine lokale Datei schreiben und speichern.

/* checking the cert and export the same without white spaces to outbound*/
if (!empty($certout)){
	file_put_contents("data/outbound/".str_replace(' ','',$config-&gt;dn-&gt;commonName).".crt",$certout);
}else{
	throw new Exception('IRC_CAN_NOT_SAVE_CSR_TO_KEY_FOLDER');
}

Wenn man sich die Datei nachdem Speichern in einem Texteditor lädt, sollte der öffentliche Schlüssel anschiesend so aussehen:

—–BEGIN CERTIFICATE—–
MIIDxDCCAy2gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBozELMAkGA1UEBhMCREUx
DzANBgNVBAgTBkhFU1NFTjEaMBgGA1UEBxMRT2ZmZW5iYWNoIGFtIE1haW4xDDAK
BgNVBAoTA0dBQzEMMAoGA1UECxMDR0FDMRswGQYDVQQDExJBbmRyZWFzIEJhc3Nl
cm1hbm4xLjAsBgkqhkiG9w0BCQEWH2EuYmFzc2VybWFubkBuZXR6d2Vyay1kZXNp
Z24uZGUwHhcNMTMxMDMwMDY0MDI5WhcNMTYxMDI5MDY0MDI5WjCBozELMAkGA1UE
BhMCREUxDzANBgNVBAgTBkhFU1NFTjEaMBgGA1UEBxMRT2ZmZW5iYWNoIGFtIE1h
aW4xDDAKBgNVBAoTA0dBQzEMMAoGA1UECxMDR0FDMRswGQYDVQQDExJBbmRyZWFz
IEJhc3Nlcm1hbm4xLjAsBgkqhkiG9w0BCQEWH2EuYmFzc2VybWFubkBuZXR6d2Vy
ay1kZXNpZ24uZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAN5aLMD3G2E8
97w+AZoOqXaxa2SWQXHKilTKNLGOl5eLj2sM+lgI8vio+7Wb5RQ15W+5RAUgOVUm
4IiYfCAiMK+avUlRFEr1vHdlmIQoJS3SG1DiOETeB5GC/Xh4mJa90Yowpv0nieD1
SFI2zCcghEse8sRe70slppkay9u5Mcs1AgMBAAGjggEEMIIBADAdBgNVHQ4EFgQU
OKHAB6cD62Nfw/pO5OqLsFBvBsQwgdAGA1UdIwSByDCBxYAUOKHAB6cD62Nfw/pO
5OqLsFBvBsShgamkgaYwgaMxCzAJBgNVBAYTAkRFMQ8wDQYDVQQIEwZIRVNTRU4x
GjAYBgNVBAcTEU9mZmVuYmFjaCBhbSBNYWluMQwwCgYDVQQKEwNHQUMxDDAKBgNV
BAsTA0dBQzEbMBkGA1UEAxMSQW5kcmVhcyBCYXNzZXJtYW5uMS4wLAYJKoZIhvcN
AQkBFh9hLmJhc3Nlcm1hbm5AbmV0endlcmstZGVzaWduLmRlggEAMAwGA1UdEwQF
MAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAp7OnCKGCG4gZIp6obYIo5YAMm7QgVPxF
FozGlAWAfLFh0GxL+vl7VSOHQE3/4s0QdLI28BEy7ADU4CLjjMyZ30ElI3c+8fPs
GUKO3PRPz/piUIG02l1d0WiLnz2xbGYtcIX5xmTIUoB1kuQ6VJ7R3uYgCf4GIvtx
i987UDf0F8s=
—–END CERTIFICATE—–

Wenn ihr die Datei mit der Endung .crt auf einem Windowssystem einmal aufruft, übergebt ihr das Zertifikat an die Windows Kryptoengine und die kann das Zertifikat so darstellen:

Anzeige des öfentlichen Schlüssels in Windows

Über die Reiter Details und Zertifizierungspfad könnt man die Detailinformationen zu dem Zertifikat einsehen. Im Gurnde sollte dort alle Werte angezeigt werden, die ihr während der Schlüsselgenerierung und der Signierung angegeben habt.

http://www.agile-coding.net/oeffentlichen-schluessel-exportieren-mit-openssl_x509_export/