Newsgroup: it.comp.www.php
Titolo: soapclient e https

Un saluto a tutti, sono nei guai con la mutua autenticazione https e 
SoapClient:
$client = new SoapClient("myfile.wsdl", array('trace'
=> 1,'local_cert' => 'cert.pem', 'passphrase'
=> ''));
cert.pem è un file con la concatenazione di private_key.pem e public_key.pem
L'errore che ottengo è: Could not connect to host
Usando:
wget --certificate=public_key.pem --private-key=private_key.pem 
https://theurl-inside-myfile.wsdl
funziona (quindi il certificato è buono per quel server).
Usando phpinfo() Leggo che curl è enabled.
Avete suggerimenti? Grazie mille!
Alessandro.

 => ''));
Stai utlizzando la classe SoapClient del PHP o di nuSoap?
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto analista PHP/MySQL?
Vieni a fare uno stage con noi: 
http://www.creativepark.it/stage/

funziona (quindi il certificato č buono per quel server).
Prova a usare fsockopen da dentro PHP, non per leggere il WSDL ma proprio
solo per vedere se httpd *riesce a connettersi*.
SELeonardo
--
The stars have not dealt me the worst they could do:
My pleasures are plenty - my troubles are two.
But oh!, my two troubles, they reave me of rest:

 Stai utlizzando la classe SoapClient del PHP o di nuSoap?
Quella di php 5

Alessandro Topo Galileo ha scritto:

In realtà l'errore esatto che ottengo ora è questo:
"could not connect to host" se uso private_key.pem o public_key.pem 
invece di cert.pem,
"error fetching http headers" se uso cert.pem.
Questi errori appaiono quando chiamo un metodo, non durante la new si 
SoapClient.
Grazie per le risposte, Alessandro.

 solo per vedere se httpd *riesce a connettersi*.
Non sono riuscito a capire come dare un certificato alla fsockopen.
Però il fatto che la wget da linea di comando si connetta mi fa pensare 
che il server sia corretto e che la macchina client veda correttamente 
il server, o sbaglio?
Grazie, Alessandro.

il server, o sbaglio?
*In teoria* e' cosi'. In pratica, puo' capitare di no. Per esempio prova
a dare il comando:
	selinuxenabled && echo "wget funziona, apache mica detto."


	selinuxenabled && echo "wget funziona, apache mica detto."
Contrordine, ho visto l'altro post. Se ti si connette con un certo
certificato, l'errore evidentemente non e' a livello di socket.
Verifica i certificati, che siano corretti - e di poterli leggere,
anche: non tu ma Apache - e prova a guardare nell'error_log sempre
di Apache.
Alle perse prova a vedere se funziona da PHP da linea di comando -
si spera di no, perche' allora si puo' provare a vedere quello che
succede usando dei tool appositi (farlo con apache e' impossibile,
o quasi; mettere php-cli sotto strace/ssldump molto meno).


 o quasi; mettere php-cli sotto strace/ssldump molto meno).
Ho visto che strace c'è (ma non ho idea di come usarlo), ssldump no (e 
non posso aggiungere pacchetti).
Grazie ancora per i consigli.

con chmod 644.
L'ho visto usare in questo contesto, non so se ti puo' essere utile:
	$opts = array(
		'ssl' => array(
			'local_cert' => '/path/to/cert.pem',
			'allow_self_signed' => true
            	)
	);
	$ctx = stream_context_create($opts);
	$soap = new SoapClient('myfile.wsdl', array(
	        'stream_context'    => $ctx,
		'local_cert'        => '/path/to/cert.pem'
        ));
Le due differenze sono che il cert.pem e' specificato con un path e il
contesto stream e' aperto a monte, specificando l'allow-self-signed.
Con strace ("strace php ... 2>&1 > output.txt") puoi cercare dov'e' la
chiamata che apre il socket verso il server, e verificare che CI SIA -
se non c'e' vuol dire che nemmeno ci ha provato, e l'errore e' prima -
e che sia verso l'host e la porta corretti; se tutto cio' e' vero c'e'
un errore nel certificato che viene erroneamente riportato come errore
di connessione (anziche' come errore di mutua autenticazione SSL).


 Con strace ("strace php ... 2>&1 > output.txt") puoi cercare dov'e' la
Mitico, strace pare cosa utilissima... ci gioco un po'... ma con il 
comando che dici in output.txt mi trovo solo l'output del php, invece 
quel che dice strace non ci va: è perchè va su stderr? Sono su bash.
Ciao!

quel che dice strace non ci va: è perchè va su stderr? Sono su bash.
Boh... avrebbe dovuto acchiapparlo. Prova con
	strace -o output.txt php -q file.php


 	strace -o output.txt php -q file.php
Cosě č ok. Grazie e ciao.