Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.php > #4846 > unrolled thread

PHP Soap mit TLS Zertifikat [API abfrage}

Started byTimo <me@freedyn.invalid>
First post2022-09-10 04:12 +0200
Last post2022-09-14 03:36 +0200
Articles 8 — 3 participants

Back to article view | Back to de.comp.lang.php


Contents

  PHP Soap mit TLS Zertifikat [API abfrage} Timo <me@freedyn.invalid> - 2022-09-10 04:12 +0200
    Re: PHP Soap mit TLS Zertifikat [API abfrage} Timo <me@freedyn.invalid> - 2022-09-10 05:05 +0200
    Re: PHP Soap mit TLS Zertifikat [API abfrage} Arno Welzel <usenet@arnowelzel.de> - 2022-09-10 08:43 +0200
      Re: PHP Soap mit TLS Zertifikat [API abfrage} Timo <me@freedyn.invalid> - 2022-09-10 21:20 +0200
        Re: PHP Soap mit TLS Zertifikat [API abfrage} Tim Ritberg <tim@server.invalid> - 2022-09-10 22:51 +0200
          Re: PHP Soap mit TLS Zertifikat [API abfrage} Timo <me@freedyn.invalid> - 2022-09-14 03:35 +0200
        Re: PHP Soap mit TLS Zertifikat [API abfrage} Arno Welzel <usenet@arnowelzel.de> - 2022-09-11 14:01 +0200
          Re: PHP Soap mit TLS Zertifikat [API abfrage} Timo <me@freedyn.invalid> - 2022-09-14 03:36 +0200

#4846 — PHP Soap mit TLS Zertifikat [API abfrage}

FromTimo <me@freedyn.invalid>
Date2022-09-10 04:12 +0200
SubjectPHP Soap mit TLS Zertifikat [API abfrage}
Message-ID<tfgrqa$7fe$1@news.nntp4.net>
Guten Abend,

kurz eine kleine Vorabinfo:

Ich nutze IoT SIM Karten zur Überwachung meiner Weidezäune,
da es bei uns im Ort nicht so gut ankommt, wenn meine Schafherde mal 
kurz einen Ausflug macht... ;-)

Da es mir leider schon zweimal passiert ist, dass das Datenvolumen 
einzelner Karten aufgebraucht war und somit keine Datenübertragung 
stattfinden konnte, möchte ich einmal am Tag die API des IoT Portals 
abfragen, jedoch bin ich in Bezug auf "SOAP" nackter Anfänger.

Zum Problem:
Wenn ich den Echo Test der API wie folgt über die Shell abfrage,
bekomme ich eine korrekte Antwort.

==============
curl -X POST -H "Content-Type: application/json" \
-H "Accept-Encoding: gzip,deflate" \
-H "Cache-Control: no-cache" \
--cert customer-USER.cer \
--key customer-USER.key \
https://kiteplatform-api.telefonica.com:8010/services/REST/GlobalM2M/Echo/v1/r12/echo 
-d '{"data":"test"}'
==============

Mein Problem ist jetzt, wie ich das in php bewerkstelligen kann.
Der Server läuft mit php8.0 und die Erweiterung php8.0-soap ist auch 
installiert.

Leider findet man fast schon zu viele Beispiele zum SOAP_Client,
welche in Bezug auf TLS1.2 und dem übergeben der Zertifikate recht
schlecht dokumentiert sind. Gleiches gilt für php-curl.

Leider haben die ganzen Dokus und Manuals dazu geführt, dass ich jetzt 
komplett nur noch Bahnhof verstehe im Bezug auf dem SOAP_Client.

Hat jemand von Euch eine Idee oder einen Lösungsansatz, den ich 
verfolgen sollte?

Danke.

Gruß
Timo

[toc] | [next] | [standalone]


#4847

FromTimo <me@freedyn.invalid>
Date2022-09-10 05:05 +0200
Message-ID<tfgut1$8n3$1@news.nntp4.net>
In reply to#4846
Am 10.09.2022 um 04:12 schrieb Timo:
> 
> Hat jemand von Euch eine Idee oder einen Lösungsansatz, den ich 
> verfolgen sollte?
> 

Ein Lösungsansatz war php-curl zu Beginn, da ich damit bereits andere 
API's abrufe, jedoch scheitere ich hier bei der Einbindung das 
Zertifikats und dem Schlüssel für die Authentifizierung:

==========================================
$url = 
'https://kiteplatform-api.telefonica.com:8010/services/REST/GlobalM2M/Echo/v1/r12/echo';
$data = array(
     "data" => "test"
);
$data_string = json_encode($data);
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER,
     array(
         'Content-Type:application/json',
         'Content-Length: ' . strlen($data_string)
     )
);

$result = curl_exec($ch);
curl_close($ch);
==========================================

Ein weiterer Ansatz war dann via SoapClient, wobei es allerdinst auch 
nicht wirklich funktioniert hat.

==========================================
$api_url = 
"https://kiteplatform-api.telefonica.com:8010/services/REST/GlobalM2M/Echo/v1/r12/echo";

$stream_context_opts = array(
     'http'=>array(
         'method'=>"POST /services/REST/GlobalM2M/Echo/v1/r12/echo",
         'header'=> "Content-Type: application/soap+xml; charset=utf-8\r\n",
         'data' => "test\r\n"
     )
);

$soap_stream_context = stream_context_create($stream_context_opts);

  $soap_options = array(
     'cache_wsdl' => WSDL_CACHE_NONE,
     'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP,
     'exceptions' => true,
     'trace' => true,
     'local_cert' => '/etc/certs/customer-USER.cer',
     'soap_version' => 'SOAP_1_2',
     stream_context' => $soap_stream_context,
     'authentication' => SOAP_AUTHENTICATION_DIGEST
);

try {
     $client = new SoapClient( $api_url, $options );
} catch (SoapFault $e) {
     echo $e->getMessage();
}
==========================================

Gruß
Timo

[toc] | [prev] | [next] | [standalone]


#4848

FromArno Welzel <usenet@arnowelzel.de>
Date2022-09-10 08:43 +0200
Message-ID<jo2q18FribcU1@mid.individual.net>
In reply to#4846
Timo, 2022-09-10 04:12:

> Guten Abend,
> 
> kurz eine kleine Vorabinfo:
> 
> Ich nutze IoT SIM Karten zur Überwachung meiner Weidezäune,
> da es bei uns im Ort nicht so gut ankommt, wenn meine Schafherde mal 
> kurz einen Ausflug macht... ;-)
> 
> Da es mir leider schon zweimal passiert ist, dass das Datenvolumen 
> einzelner Karten aufgebraucht war und somit keine Datenübertragung 
> stattfinden konnte, möchte ich einmal am Tag die API des IoT Portals 
> abfragen, jedoch bin ich in Bezug auf "SOAP" nackter Anfänger.
> 
> Zum Problem:
> Wenn ich den Echo Test der API wie folgt über die Shell abfrage,
> bekomme ich eine korrekte Antwort.
> 
> ==============
> curl -X POST -H "Content-Type: application/json" \
> -H "Accept-Encoding: gzip,deflate" \
> -H "Cache-Control: no-cache" \
> --cert customer-USER.cer \
> --key customer-USER.key \
> https://kiteplatform-api.telefonica.com:8010/services/REST/GlobalM2M/Echo/v1/r12/echo 
> -d '{"data":"test"}'
> ==============
> 
> Mein Problem ist jetzt, wie ich das in php bewerkstelligen kann.
> Der Server läuft mit php8.0 und die Erweiterung php8.0-soap ist auch 
> installiert.

Was spricht dagegen, obiges einfach mit shell_exec() auszuführen?

Siehe auch <https://www.php.net/manual/de/function.shell-exec.php>


-- 
Arno Welzel
https://arnowelzel.de

[toc] | [prev] | [next] | [standalone]


#4849

FromTimo <me@freedyn.invalid>
Date2022-09-10 21:20 +0200
Message-ID<tfio2n$ac4$1@news.nntp4.net>
In reply to#4848
Hallo Arno,
danke für Deine Antwort.

Am 10.09.2022 um 08:43 schrieb Arno Welzel:
 >
 > Was spricht dagegen, obiges einfach mit shell_exec() auszuführen?
 >
 > Siehe auch <https://www.php.net/manual/de/function.shell-exec.php>
 >
 >
Nachdem ich jetzt mehrere Stunden damit vergeigt habe,
den SOAPClient zum Laufen zu bekommen, habe ich dann aber gesehen,
dass es auch eine REST API gibt, womit ich dann doch etwas besser klar 
komme.

Mit php curl ist es die ganze Zeit an den Zertifikaten gescheitert,
die ich zur Authentifizierung übergeben muss.

Daher bin ich dann zu der Version via shell_exec übergegangen,
wobei dies zwar auf meinem Server aktiviert ist, aber bei vielen Hostern 
ist dies natürlich gesperrt. Daher hatte ich es auch erst nicht in 
Betracht gezogen. Aber jetzt läuft es.

============
$abfrage = 'curl -X GET -H "Content-Type: application/json" -H 
"Accept-Encoding: gzip,deflate" -H "Cache-Control: no-cache" --cert 
/var/api-certs/cert.pem --key /var/api-certs/cert.key 
https://kiteplatform-api.telefonica.com:8010/serv...';

$output = shell_exec($abfrage);
============

Da bastel ich mir jetzt noch eine Classe drum herum und schon habe ich 
alles was ich brauche, auch wenn es über shell_exec nicht die Beste 
Lösung ist.

Gruß
Timo

[toc] | [prev] | [next] | [standalone]


#4850

FromTim Ritberg <tim@server.invalid>
Date2022-09-10 22:51 +0200
Message-ID<tfitc3$14ugn$1@tota-refugium.de>
In reply to#4849
Am 10.09.22 um 21:20 schrieb Timo:
> Hallo Arno,
> danke für Deine Antwort.
> 
> Am 10.09.2022 um 08:43 schrieb Arno Welzel:
>  >
>  > Was spricht dagegen, obiges einfach mit shell_exec() auszuführen?
>  >
>  > Siehe auch <https://www.php.net/manual/de/function.shell-exec.php>
>  >
>  >
> Nachdem ich jetzt mehrere Stunden damit vergeigt habe,
> den SOAPClient zum Laufen zu bekommen, habe ich dann aber gesehen,
> dass es auch eine REST API gibt, womit ich dann doch etwas besser klar 
> komme.
> 
> Mit php curl ist es die ganze Zeit an den Zertifikaten gescheitert,
> die ich zur Authentifizierung übergeben muss.
> 
Also ein Client-Zertifikat?
Schon mal versucht auch die CA mitanzugeben?

https://stackoverflow.com/questions/11308270/using-curl-in-php-with-client-certificate-and-private-key-in-separate-files

Tim

[toc] | [prev] | [next] | [standalone]


#4852

FromTimo <me@freedyn.invalid>
Date2022-09-14 03:35 +0200
Message-ID<tfrb4e$23l$1@news.nntp4.net>
In reply to#4850
Am 10.09.2022 um 22:51 schrieb Tim Ritberg:
> Also ein Client-Zertifikat?

Genau.

> Schon mal versucht auch die CA mitanzugeben?
> 
> https://stackoverflow.com/questions/11308270/using-curl-in-php-with-client-certificate-and-private-key-in-separate-files
> 

Das hatte trotz CA-Zert. undauch mit CA-Bundle nicht wirklich 
funktioniert. Daher lasse ich es vorerst über shell_exec läufen und 
werde mich später noch einmal dran setzen.

Gruß
Timo

[toc] | [prev] | [next] | [standalone]


#4851

FromArno Welzel <usenet@arnowelzel.de>
Date2022-09-11 14:01 +0200
Message-ID<jo610fFdulfU1@mid.individual.net>
In reply to#4849
Timo, 2022-09-10 21:20:

[...]
> ============
> $abfrage = 'curl -X GET -H "Content-Type: application/json" -H 
> "Accept-Encoding: gzip,deflate" -H "Cache-Control: no-cache" --cert 
> /var/api-certs/cert.pem --key /var/api-certs/cert.key 
> https://kiteplatform-api.telefonica.com:8010/serv...';
> 
> $output = shell_exec($abfrage);
> ============
> 
> Da bastel ich mir jetzt noch eine Classe drum herum und schon habe ich 
> alles was ich brauche, auch wenn es über shell_exec nicht die Beste 
> Lösung ist.

Wenn die Nutzung fertige Bibliotheken kein Problem ist, wäre Guzzle noch
eine Alternative zu curl:

<https://docs.guzzlephp.org/en/stable/>

Da ist die Übergabe von Zertifikaten prinzipiell auch vorgesehen:

<https://docs.guzzlephp.org/en/stable/request-options.html#cert>

-- 
Arno Welzel
https://arnowelzel.de

[toc] | [prev] | [next] | [standalone]


#4853

FromTimo <me@freedyn.invalid>
Date2022-09-14 03:36 +0200
Message-ID<tfrb6f$23l$2@news.nntp4.net>
In reply to#4851
Am 11.09.2022 um 14:01 schrieb Arno Welzel:

> Wenn die Nutzung fertige Bibliotheken kein Problem ist, wäre Guzzle noch
> eine Alternative zu curl:
> 
> <https://docs.guzzlephp.org/en/stable/>
> 
> Da ist die Übergabe von Zertifikaten prinzipiell auch vorgesehen:
> 
> <https://docs.guzzlephp.org/en/stable/request-options.html#cert>
> 

Danke. Die Bibliothek werde ich mir mal ansehen.

Gruß
Timo



[toc] | [prev] | [standalone]


Back to top | Article view | de.comp.lang.php


csiph-web