2015-11-03 15 views
6

Ich versuche eine Verbindung über SoapClient herzustellen. Ich brauche dafür ein Zertifikat. Ich habe ein PFX-Zertifikat erhalten. Ich habe den folgenden Befehl verwendet, um eine .pem-Datei zu erstellen.Zertifikat nicht akzeptiert. Die private Schlüsseldatei konnte nicht gesetzt werden

openssl pkcs12 -in cert.pfx -out cert.pem -nodes 

Es gibt ein Passwort im Zertifikat, so dass ich es eingeben muss, bevor ich die cert.pem-Datei bekomme. So weit, so gut, denke ich.

Jetzt versuche ich mich mit dem WSDL-Dienst verbinden.

$url = "https://test.website.com/webservices/transfer.asmx?WSDL"; 
$cert = '/path/to/cert.pem'; 
$passphrase = "12345678";            

$soapClient = new SoapClient($url, array('local_cert'=>$cert,'passphrase'=>$passphrase)); 

bekomme ich folgende Fehlermeldung:

(Warning) SoapClient::SoapClient(): Unable to set private key file `/var/www/vhosts/............./cert.pem'

Ich denke, das Problem ist das Zertifikat. Ist die Art und Weise, wie ich die .pfx-Datei in eine .pem-Datei konvertiert habe, korrekt?

+0

Ich habe immer noch Probleme damit. Ich habe es gefunden. Hinweis: Wenn Sie hier das Flag "-nodes" einfügen, wird die Verwendung einer Passphrase zur Verschlüsselung der privaten Schlüssel verhindert. Whit oder ohne die Passphrase bekomme ich den gleichen Fehler. –

+0

ist das das öffentliche oder private? –

+2

warum hast du '-nodes' statt' -clcerts' benutzt? –

Antwort

6

Das Problem, das Sie haben, ist, dass ein .pem-Zertifikat immer eine verschlüsselte Datei sein soll. Laut der OpenSSL docs for the pkcs12 command, wenn Sie -nodes verwendet haben, hat es nichts verschlüsselt, sondern setzen Sie jeden Knoten in Klartext, die das .pem Zertifikat ungültig verursacht und Ihre SoapClient konnte die ungültige Datei nicht analysieren.

Um dies zu beheben, hoffentlich Sie das Original cert.pfx nicht gelöscht haben, gerade wieder wandeln sie diese Zeile mit:

openssl pkcs12 -in cert.pfx -out cert.pem -clcerts 

und Ihre cert.pem Datei korrekt.

Verwandte Themen