2015-11-03 16 views
6

Cerco di stabilire una connessione tramite SoapClient. Ho bisogno di un certificato per questo. Ho ricevuto un certificato .pfx. Ho usato il seguente comando per creare un file .pem.Certificato non accettato. Impossibile impostare il file della chiave privata

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

C'è una password nel certificato, quindi devo inserirla prima di ottenere il file cert.pem. Fin qui tutto bene, penso.

Ora provo a connettermi al servizio WSDL.

$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)); 

ottengo il seguente errore:

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

Credo che il problema è il certificato. È il modo in cui ho convertito il .pfx in un file .pem nel modo corretto?

+0

Ho ancora problemi con questo. Trovato questo. nota: incluso il flag "-nodes" qui impedirà l'utilizzo di una passphrase per crittografare le chiavi private. Con o senza passphrase ottengo lo stesso errore. –

+0

è quel certificato pubblico o privato? –

+2

perché hai usato '-nodes' piuttosto che' -clcerts'? –

risposta

6

Il problema che si sta verificando è che un certificato .pem deve sempre essere un file crittografato. Secondo lo OpenSSL docs for the pkcs12 command quando hai usato -nodes non ha crittografato nulla, piuttosto ha inserito ciascun nodo in testo normale, il che ha reso il certificato .pem non valido e il tuo SoapClient non poteva analizzare il file non valido.

Per risolvere questo problema, si spera non aver eliminato l'originale cert.pfx, appena ri-convertire utilizzando questa linea:

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

e il file cert.pem sarà corretto.

Problemi correlati