/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
SOAP / WSDL og HTTS.
Fra : Per Christiansen


Dato : 02-04-06 19:26

Hej.

Jeg sidder med et lille problem, som jeg håber nogen kan hjælpe med.

Jeg sidder og prøver at få et PHP program til at tale med Færselsstyrelsens
server til indatering af synsresultater (syn af køretøjer).

Tjenesten er beskrevet i WSDL og udføres i SOAP protokol signeret med en
digital signatur.

Jeg er i den heldige situation at det virker som det skal uden brug af
digital signatur, men ikke med digital signatur.

Koden jeg bruger er simpel:

<?
$client = new SoapClient("https://esyn.dk/esynws/LookUp.asmx?WSDL",
array("trace" => true));

try {
$objectresult = $client->GetVehicleCategories();
$simpleresult = $objectresult->GetVehicleCategoriesResult;

echo htmlspecialchars($simpleresult);
} catch (SoapFault $exception) {
echo $exception;

}

echo '<br><br>';
echo "REQUEST:\n" . htmlspecialchars($client->__getLastRequest()) . "\n";
echo '<br><br>';
echo "REQUEST HEADER:\n" .
htmlspecialchars($client->__getLastRequestHeaders()) . "\n";
echo '<br><br>';
echo "RESPONSE:\n" . htmlspecialchars($client->__getLastResponse()) . "\n";
echo '<br><br>';
echo "RESPONSE HEADER:\n" .
htmlspecialchars($client->__getLastResponseHeaders()) . "\n";
?>

Resultatet:
Hello!

<?xml version="1.0" encoding="utf-8"
?><ErrorCollection><Error><ErrorCode>1</ErrorCode><ErrorMessage>User
validation error: The certificate (serial no. ) is not
registered</ErrorMessage></Error></ErrorCollection>

REQUEST: <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://www.esyn.dk/">

REQUEST HEADER: POST /esynws/LookUp.asmx HTTP/1.1 Host: esyn.dk Connection:
Keep-Alive User-Agent: PHP SOAP 0.1 Content-Type: text/xml; charset=utf-8
SOAPAction: "http://www.esyn.dk/GetVehicleCategories" Content-Length: 228

RESPONSE: <?xml version="1.0" encoding="utf-8"?><soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
xmlns="
http://www.esyn.dk/"><?xml
version="1.0" encoding="utf-8"
?&gt;&lt;ErrorCollection&gt;&lt;Error&gt;&lt;ErrorCode&gt;1&lt;/ErrorCode&gt;&lt;ErrorMessage&gt;User
validation error: The certificate (serial no. ) is not
registered&lt;/ErrorMessage&gt;&lt;/Error&gt;&lt;/ErrorCollection&gt;</GetVehicleCategoriesResult></GetVehicleCategoriesResponse></soap:Body></soap:Envelope>

RESPONSE HEADER: HTTP/1.1 200 OK Date: Sun, 02 Apr 2006 18:18:04 GMT Server:
Microsoft-IIS/6.0 X-Powered-By: ASP.NET X-AspNet-Version: 1.1.4322
Cache-Control: private, max-age=0 Content-Type: text/xml; charset=utf-8
Content-Length: 659

---------

Ved at introducere en digital signatur - virker det ikke mere.

Koden:

$client = new SoapClient("https://esyn.dk/esynws/LookUp.asmx?WSDL",
array("trace" => true,
'local_cert' =>
"d:/www/digitalsignatur.pem"));

Resultatet:

Hello!<br><br>SoapFault exception: [HTTP] Could not connect to host in
D:\www\test.bpbilsyn.dk\htdocs\test\test.php:28
Stack trace:
#0 D:\www\test.bpbilsyn.dk\htdocs\test\test.php(28):
SoapClient->__doRequest('<?xml version="...', 'https://esyn.dk...',
'http://www.esyn...', 1)
#1 D:\www\test.bpbilsyn.dk\htdocs\test\test.php(28):
SoapClient->__call('GetVehicleCateg...', Array)
#2 D:\www\test.bpbilsyn.dk\htdocs\test\test.php(28):
SoapClient->GetVehicleCategories()
#3 {main}Er der nogen der har en idé om, hvad det er jeg løber ind i af
problemer her, og evt. en idé til hvad jeg kan gøre ved det?På forhånd
tak!Med venlig hilsen!Per Christiansen



 
 
Michael Rasmussen (02-04-2006)
Kommentar
Fra : Michael Rasmussen


Dato : 02-04-06 22:55

On Sun, 02 Apr 2006 20:25:39 +0200, Per Christiansen wrote:

>
> Tjenesten er beskrevet i WSDL og udføres i SOAP protokol signeret med en
> digital signatur.
>
> Jeg er i den heldige situation at det virker som det skal uden brug af
> digital signatur, men ikke med digital signatur.
>
En digital signatur er ikke det samme som et certificat til en webserver,
og det du prøver på er, at anvende din digitale signatur som et
certifikat til en webserver. Du skal derfor lave et certificat, som du så
muligvis kan signere med din signatur. Jeg kender intet til den digitale
signatur (og har heller ingen interesse i det, så længe sikkerheden er
lig nul:-\) Du har også sikret dig, at din webserver har adgang til din
signaturfil? Prøv eventuel fra en prompt (php script.php)

Prøv eventuelt med disse allow_self_signed og verify_peer - sættes til
true/false.

$option = array(
"allow_self_signed" => true,
"verify_peer" => false,
"local_cert" => "What ever");

$client = new SoapClient(
"https://esyn.dk/esynws/LookUp.asmx?WSDL",
$option);

--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917


Michael Zedeler (03-04-2006)
Kommentar
Fra : Michael Zedeler


Dato : 03-04-06 01:08

Michael Rasmussen wrote:
> On Sun, 02 Apr 2006 20:25:39 +0200, Per Christiansen wrote:
>
>
>>Tjenesten er beskrevet i WSDL og udføres i SOAP protokol signeret med en
>>digital signatur.
>>
>>Jeg er i den heldige situation at det virker som det skal uden brug af
>>digital signatur, men ikke med digital signatur.
>
> En digital signatur er ikke det samme som et certificat til en webserver,
> og det du prøver på er, at anvende din digitale signatur som et
> certifikat til en webserver.

Not. Det er et X.509-certifikat fuldstændig ligesom de certifikater, man
bruger til webservere. Der er muligvis nogle lidt andre atributter, men
det er rigtige, standardiserede certifikater.

> Du skal derfor lave et certificat, som du så
> muligvis kan signere med din signatur.

Nej.

> Jeg kender intet til den digitale
> signatur (og har heller ingen interesse i det, så længe sikkerheden er
> lig nul:-\)

Så er det lidt skråsikkert at skrive at den digitale signatur ikke har
noget med certifikater at gøre.

> Du har også sikret dig, at din webserver har adgang til din
> signaturfil? Prøv eventuel fra en prompt (php script.php)
>
> Prøv eventuelt med disse allow_self_signed og verify_peer - sættes til
> true/false.

Endnu et forslag: har du checket at certifikatfilen ikke er krypteret
med en nøgle? Hvis den er, skal du anføre nøglen i værdien passphrase.

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf

Per Christiansen (03-04-2006)
Kommentar
Fra : Per Christiansen


Dato : 03-04-06 07:01

Hej Michael.

> Not. Det er et X.509-certifikat fuldstændig ligesom de certifikater, man
> bruger til webservere. Der er muligvis nogle lidt andre atributter, men
> det er rigtige, standardiserede certifikater.

Først skal jeg da lige fortælle at jeg intet ved om det her. Har
selvfølgelig kodet i PHP i årevis på privat basis, men kender intet til det
her område.

Jeg fik signatur filen som en ".cer" fil, som jeg fandt ud af er kodet i DER
format.
Jeg har så med openssl konverteret certifikatet til PEM format, da det
ligesom fremgår af PHP dokumentationen at det skal være i det format.
Og lader jeg openssl læse indholdet i hhv. .cer og .pem filerne, ser det
umidelbart ud til at de to filer indeholder de samme oplysninger.

> Endnu et forslag: har du checket at certifikatfilen ikke er krypteret med
> en nøgle? Hvis den er, skal du anføre nøglen i værdien passphrase.

..cer filen er krypteret med en nøgle, så det vil jeg tro at .pem filen også
er.
Det er prøvet at angive passphrase også, med samme resultat.

Siden jeg skrev mit originale indlæg har jeg opgraderet PHP fra 5.0.4 til
5.1.2 (til windows).

Uden signatur siger den nu:
Warning: SoapClient::__construct() [function.--construct]: SSL: fatal
protocol error in D:\www\test.bpbilsyn.dk\htdocs\test\test.php on line 22

Med signatur siger den:
Warning: SoapClient::__construct() [function.--construct]: Unable to set
private key file `d:/www/ds.pem' in
D:\www\test.bpbilsyn.dk\htdocs\test\test.php on line 22

Warning: SoapClient::__construct() [function.--construct]: failed to create
an SSL handle in D:\www\test.bpbilsyn.dk\htdocs\test\test.php on line 22

Warning: SoapClient::__construct() [function.--construct]: Failed to enable
crypto in D:\www\test.bpbilsyn.dk\htdocs\test\test.php on line 22

Warning: SoapClient::__construct(https://esyn.dk/esynws/LookUp.asmx?WSDL)
[function.--construct]: failed to open stream: No such file or directory in
D:\www\test.bpbilsyn.dk\htdocs\test\test.php on line 22

Warning: SoapClient::__construct() [function.--construct]: I/O warning :
failed to load external entity "https://esyn.dk/esynws/LookUp.asmx?WSDL" in
D:\www\test.bpbilsyn.dk\htdocs\test\test.php on line 22

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL:
Couldn't load from 'https://esyn.dk/esynws/LookUp.asmx?WSDL' in
D:\www\test.bpbilsyn.dk\htdocs\test\test.php:22 Stack trace: #0
D:\www\test.bpbilsyn.dk\htdocs\test\test.php(22):
SoapClient->__construct('https://esyn.dk...', Array) #1 {main} thrown in
D:\www\test.bpbilsyn.dk\htdocs\test\test.php on line 22

For mig at se, er der noget galt med den PEM fil jeg har fabrikkeret.
Nogen hints til hvad jeg evt. gør forkert?

På forhånd tak!
Per Christiansen



Peter Lind Damkjær (03-04-2006)
Kommentar
Fra : Peter Lind Damkjær


Dato : 03-04-06 08:16

Per Christiansen <per@per-c.dk> skrev:
>Jeg fik signatur filen som en ".cer"
>fil, som jeg fandt ud af er kodet i DER
>format.
>Jeg har så med openssl konverteret
>certifikatet til PEM format, da det
>ligesom fremgår af PHP dokumentationen
>at det skal være i det format.
>Og lader jeg openssl læse indholdet i
>hhv. .cer og .pem filerne, ser det
>umidelbart ud til at de to filer
>indeholder de samme oplysninger.
>

Jeg er IKKE PHP-haj, men her er lidt at lede efter:
".cer"-filer indeholder normalt kun et certifikat og du skal givetvis
bruge både certifikatet OG en tilhørende privat nøgle, når du skal
identificere dig
overfor en server. Derfor skal du starte med at få fat i en såkaldt
PKCS#12-fil (extension .p12, .pfx eller .pkcs12), der indeholder begge
dele og
konvertere denne til det af PHP ønskede format.

Fortsat god jagt!
Peter Lind Damkjær


Per Christiansen (03-04-2006)
Kommentar
Fra : Per Christiansen


Dato : 03-04-06 13:56

Hej Peter.

> Jeg er IKKE PHP-haj, men her er lidt at lede efter:
> ".cer"-filer indeholder normalt kun et certifikat og du skal givetvis
> bruge både certifikatet OG en tilhørende privat nøgle, når du skal
> identificere dig
> overfor en server. Derfor skal du starte med at få fat i en såkaldt
> PKCS#12-fil (extension .p12, .pfx eller .pkcs12), der indeholder begge
> dele og
> konvertere denne til det af PHP ønskede format.

Jeg tror du har ret!

Den digitale signatur jeg har brugt, forbyder mig at eksportere den private
nøgle.
Men - bruger jeg min egen personlige digitale signatur, kan jeg godt
eksportere den private nøgle, certifikatet til PEM og bruge det i mit PHP
program.

Så jeg tror nu på, at jeg så enten skal have reg. min signatur hos
Færselsstyrelsen eller endnu bedre få en firma signatur der opfylder mine
krav og få den reg. hos FS.

Mange tak for hjælpen alle i der har hjulpet...
Det er jeg meget glad for!

Mvh. Per



Per Christiansen (03-04-2006)
Kommentar
Fra : Per Christiansen


Dato : 03-04-06 13:56

Hej Peter.

> Jeg er IKKE PHP-haj, men her er lidt at lede efter:
> ".cer"-filer indeholder normalt kun et certifikat og du skal givetvis
> bruge både certifikatet OG en tilhørende privat nøgle, når du skal
> identificere dig
> overfor en server. Derfor skal du starte med at få fat i en såkaldt
> PKCS#12-fil (extension .p12, .pfx eller .pkcs12), der indeholder begge
> dele og
> konvertere denne til det af PHP ønskede format.

Jeg tror du har ret!

Den digitale signatur jeg har brugt, forbyder mig at eksportere den private
nøgle.
Men - bruger jeg min egen personlige digitale signatur, kan jeg godt
eksportere den private nøgle, certifikatet til PEM og bruge det i mit PHP
program.

Så jeg tror nu på, at jeg så enten skal have reg. min signatur hos
Færselsstyrelsen eller endnu bedre få en firma signatur der opfylder mine
krav og få den reg. hos FS.

Mange tak for hjælpen alle i der har hjulpet...
Det er jeg meget glad for!

Mvh. Per



--
----------------------------------------
Jeg beskyttes af den gratis SPAMfighter til privatbrugere.
Den har indtil videre sparet mig for at få 143 spam-mails.
Betalende brugere får ikke denne besked i deres e-mails.
Hent gratis SPAMfighter her: www.spamfighter.dk



Per Christiansen (03-04-2006)
Kommentar
Fra : Per Christiansen


Dato : 03-04-06 07:01

Hej Michael.

> Not. Det er et X.509-certifikat fuldstændig ligesom de certifikater, man
> bruger til webservere. Der er muligvis nogle lidt andre atributter, men
> det er rigtige, standardiserede certifikater.

Først skal jeg da lige fortælle at jeg intet ved om det her. Har
selvfølgelig kodet i PHP i årevis på privat basis, men kender intet til det
her område.

Jeg fik signatur filen som en ".cer" fil, som jeg fandt ud af er kodet i DER
format.
Jeg har så med openssl konverteret certifikatet til PEM format, da det
ligesom fremgår af PHP dokumentationen at det skal være i det format.
Og lader jeg openssl læse indholdet i hhv. .cer og .pem filerne, ser det
umidelbart ud til at de to filer indeholder de samme oplysninger.

> Endnu et forslag: har du checket at certifikatfilen ikke er krypteret med
> en nøgle? Hvis den er, skal du anføre nøglen i værdien passphrase.

..cer filen er krypteret med en nøgle, så det vil jeg tro at .pem filen også
er.
Det er prøvet at angive passphrase også, med samme resultat.

Siden jeg skrev mit originale indlæg har jeg opgraderet PHP fra 5.0.4 til
5.1.2 (til windows).

Uden signatur siger den nu:
Warning: SoapClient::__construct() [function.--construct]: SSL: fatal
protocol error in D:\www\test.bpbilsyn.dk\htdocs\test\test.php on line 22

Med signatur siger den:
Warning: SoapClient::__construct() [function.--construct]: Unable to set
private key file `d:/www/ds.pem' in
D:\www\test.bpbilsyn.dk\htdocs\test\test.php on line 22

Warning: SoapClient::__construct() [function.--construct]: failed to create
an SSL handle in D:\www\test.bpbilsyn.dk\htdocs\test\test.php on line 22

Warning: SoapClient::__construct() [function.--construct]: Failed to enable
crypto in D:\www\test.bpbilsyn.dk\htdocs\test\test.php on line 22

Warning: SoapClient::__construct(https://esyn.dk/esynws/LookUp.asmx?WSDL)
[function.--construct]: failed to open stream: No such file or directory in
D:\www\test.bpbilsyn.dk\htdocs\test\test.php on line 22

Warning: SoapClient::__construct() [function.--construct]: I/O warning :
failed to load external entity "https://esyn.dk/esynws/LookUp.asmx?WSDL" in
D:\www\test.bpbilsyn.dk\htdocs\test\test.php on line 22

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL:
Couldn't load from 'https://esyn.dk/esynws/LookUp.asmx?WSDL' in
D:\www\test.bpbilsyn.dk\htdocs\test\test.php:22 Stack trace: #0
D:\www\test.bpbilsyn.dk\htdocs\test\test.php(22):
SoapClient->__construct('https://esyn.dk...', Array) #1 {main} thrown in
D:\www\test.bpbilsyn.dk\htdocs\test\test.php on line 22

For mig at se, er der noget galt med den PEM fil jeg har fabrikkeret.
Nogen hints til hvad jeg evt. gør forkert?

På forhånd tak!
Per Christiansen



--
----------------------------------------
Jeg beskyttes af den gratis SPAMfighter til privatbrugere.
Den har indtil videre sparet mig for at få 143 spam-mails.
Betalende brugere får ikke denne besked i deres e-mails.
Hent gratis SPAMfighter her: www.spamfighter.dk



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste