Mam problem z używaniem cURL
do POST XML na adres TCP z SSL. Muszę przekazać certyfikat SSL w żądaniu, który zawiera klucz prywatny + certyfikat, aby zweryfikować siebie.
Właśnie uruchomiłem test z użyciem biblioteki stream_socket_client()
i używa stream_context_set_option
aby dodać opcję local_cert
w którym przekazuje certyfikat. Teraz mogę zweryfikować się za pomocą tej metody, ale nie mogę tego zrobić w cURL. Wszystko co dostaję to connection reset by peer
błąd, co oznacza, że weryfikacja certyfikatu nie powiodła się. Jaka jest różnica? Czy muszę zrezygnować z cURL, ponieważ byłoby to (moim zdaniem) znacznie czystsze rozwiązanie.
$content
jest poprawnym XML.
$headers = [
"Content-type: text/xml",
"Content-length: " . strlen($content),
"Connection: close",
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "epptest.ficora.fi");
curl_setopt($curl, CURLOPT_PORT, 700);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $content);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSLCERT, __DIR__ . "/certificate.pem");
curl_setopt($curl, CURLOPT_SSLCERTTYPE, "PEM");
$output = curl_exec($curl);
echo "Error " . curl_errno($curl) . ": "" . curl_error($curl) .""";
var_dump($output);
pełne cURL:
* Rebuilt URL to: epptest.ficora.fi/
* Hostname in DNS cache was stale, zapped
* Trying 87.239.122.59...
* Connected to epptest.ficora.fi (87.239.122.59) port 700 (#0)
> POST / HTTP/1.1
Host: epptest.ficora.fi:700
Accept: */*
Content-type: text/xml
Content-length: 406
Connection: close
* upload completely sent off: 406 out of 406 bytes
* Recv failure: Connection was reset
* Closing connection 0
Odpowiedzi:
0 dla odpowiedzi № 1curl_setopt($curl, CURLOPT_URL, "epptest.ficora.fi");
Twój adres URL nie zawiera takiej metody http://
lub https://
. W tym przypadku zakłada się cURL http://
tylko i próbuje połączyć się bezpośrednio z serwerem,tzn. bez uzgadniania SSL. Można to wyraźnie zobaczyć z pełnego wyjścia cURL. Aby to naprawić, użyj poprawnego adresu URL, tj. Użyj poprawnej metody na początku adresu URL.