Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.php > #4846 > unrolled thread
| Started by | Timo <me@freedyn.invalid> |
|---|---|
| First post | 2022-09-10 04:12 +0200 |
| Last post | 2022-09-14 03:36 +0200 |
| Articles | 8 — 3 participants |
Back to article view | Back to de.comp.lang.php
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
| From | Timo <me@freedyn.invalid> |
|---|---|
| Date | 2022-09-10 04:12 +0200 |
| Subject | PHP 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]
| From | Timo <me@freedyn.invalid> |
|---|---|
| Date | 2022-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]
| From | Arno Welzel <usenet@arnowelzel.de> |
|---|---|
| Date | 2022-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]
| From | Timo <me@freedyn.invalid> |
|---|---|
| Date | 2022-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]
| From | Tim Ritberg <tim@server.invalid> |
|---|---|
| Date | 2022-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]
| From | Timo <me@freedyn.invalid> |
|---|---|
| Date | 2022-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]
| From | Arno Welzel <usenet@arnowelzel.de> |
|---|---|
| Date | 2022-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]
| From | Timo <me@freedyn.invalid> |
|---|---|
| Date | 2022-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