Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Granda Urso 08. 06. 2012, 14:44:34

Název: SOAP v PHP5 s osobním klíčem .p12, .pem
Přispěvatel: Granda Urso 08. 06. 2012, 14:44:34
Zdravím,
nemohu se připojit pomocí PHP na server. Přitom pomocí prohlížeče GALEON mi to alespoň vrátí XML strukturu, v PHP5 to nahlásí chybu. V prohlížeči nejprve načtu osobní certifikát .p12, zadám heslo ke klíči a pak se zobrazí XML struktura. Ale v PHP5 se mi to nedaří, viz PHP5 kód:
Citace
<?php
$protected_url = "https://isbtst.pse.cz/kmapp/services/cdcpPort4?wsdl";
$client = new SoapClient($protected_url, array('soap_version' =>SOAP_1_2, 'local_cert' =>"certifikat.p12",'passphrase'=>"heslo") );
?>

To nahlásí následující chybu:
Citace
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://isbtst.pse.cz/kmapp/services/cdcpPort4?wsdl' : failed to load external entity "https://isbtst.pse.cz/kmapp/services/cdcpPort4?wsdl"
 in /home/urso/1/soap_client7.php:11
Stack trace:
#0 /home/urso/1/soap_client7.php(11): SoapClient->SoapClient('https://isbtst....', Array)
#1 {main}
  thrown in /home/urso/1/soap_client7.php on line 11

Nevíte někdo, kde nebo v čem je chyba?
Název: Re:SOAP v PHP5 s osobním klíčem .p12, .pem
Přispěvatel: maglais 08. 06. 2012, 15:23:55
V dokumentaci k SoapClient je v komentarich napsano reseni.
http://www.php.net/manual/en/soapclient.soapclient.php
Kód: [Vybrat]
When using certificates, in the parameter 'local_cert', use the file contents, not the name of the file.

example:

new soapclient("http://localhost/index.php?wsdl", array('local_cert'=>file_get_contents('./key.pem'),'passphrase'=>'password'));

Název: Re:SOAP v PHP5 s osobním klíčem .p12, .pem
Přispěvatel: Granda Urso 08. 06. 2012, 16:00:15
Citace
<?php
//
//
//
//$url = "http://soap.amazon.com/schemas3/AmazonWebServices.wsdl";

$protected_url = "https://isbtst.pse.cz/kmapp/services/cdcpPort4?wsdl";
//
$client = new SoapClient($protected_url, array('local_cert' =>file_get_contents('./certifikat.pem'), 'passphrase' =>'heslo') );
$f = (array) $client->__getFunctions(); // vrat registrované funkce
echo "<p>\n";
echo "Registrované funkce:
\n";
foreach ($f as $funkce => $hodnota) {
  echo $funkce." = ".$hodnota."
\n";
}
echo "</p>\n";
?>

Změněno na file_get_contents('./certifikat.pem')
výsledek stále stejný, stejná chybová hláška, nefunguje to. Přitom amazon funguje.
Název: Re:SOAP v PHP5 s osobním klíčem .p12, .pem
Přispěvatel: maglais 09. 06. 2012, 21:52:42
Asi ti bohuzel vice nepomuzu, pro me je domena isbtst.pse.cz nedostupna (server nenalezen)...
Název: Re:SOAP v PHP5 s osobním klíčem .p12, .pem
Přispěvatel: Granda Urso 12. 06. 2012, 11:50:41
Ještě jsou to zkoušel přes wget. Možná jsem se dostal kousek dál, certifikát je špatný, po zadání parametru pro vypnutí kontroly SSL certifikátu se wget již připojí, vyžádá si heslo a stáhne a uloží WDSL.
Kód: [Vybrat]
wget --no-check-certificate --certificate=certifikát.pem https://isbtst.pse.cz/kmapp/services/cdcpPort4?wsdl
--2012-06-12 11:41:30--  https://isbtst.pse.cz/kmapp/services/cdcpPort4?wsdl
Enter PEM pass phrase:
Resolving isbtst.pse.cz... 172.16.10.49
Connecting to isbtst.pse.cz|172.16.10.49|:443... connected.
WARNING: cannot verify isbtst.pse.cz's certificate, issued by `/C=CZ/O=Prague Stock Exchange/OU=Prague Stock Exchange CA':
  Self-signed certificate encountered.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/xml]
Saving to: `cdcpPort4?wsdl.4'

    [ <=>                                                                                ] 3,782       --.-K/s   in 0s     

2012-06-12 11:41:36 (27.9 MB/s) - `cdcpPort4?wsdl.4' saved [3782]

Takže ty problémy s připojením přes PHP5 jsou pravděpodobně způsobeny chybou při ověřování SSL certifikátu. Bohužel parametr na vypnutí této kontroly v PHP5 nemohu najít (pro wget je to --no-check-certificate).