/ टीसीपी एसएसएल में पीएचपी स्ट्रीम_ एसोकेट_क्लाइंट बनाम सीएआरएल - पीएचपी, एसएसएल, कर्ल

टीसीपी एसएसएल - PHP, एसएसएल, कर्ल में PHP stream_socket_client बनाम curl

मुझे इस्तेमाल करने में समस्या है cURL एसएसएल के साथ एक टीसीपी पते पर एक्सएमएल पोस्ट करने के लिए। मुझे अनुरोध में एक एसएसएल प्रमाणपत्र पास करना है जिसमें निजी कुंजी + प्रमाण पत्र है जो स्वयं को सत्यापित करने के लिए है।

मैं सिर्फ एक पुस्तकालय का उपयोग कर एक परीक्षण चला गया stream_socket_client() और यह उपयोग करता है stream_context_set_option एक विकल्प जोड़ने के लिए local_cert जिसमें यह प्रमाणपत्र पास करता है। अब मैं इस विधि का उपयोग करके अपने आप को सत्यापित कर सकता हूं, लेकिन मैं इसे cURL में नहीं कर सकता सब मुझे मिलता है एक connection reset by peer त्रुटि जिसका अर्थ है कि प्रमाणपत्र सत्यापन विफल हो गया। क्या अंतर है? क्या मुझे cURL को छोड़ना होगा क्योंकि यह (मेरी राय में) एक बहुत क्लीनर समाधान होगा

$content वैध 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);

सर्ल क्रिया:

 * 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

उत्तर:

जवाब के लिए 0 № 1
curl_setopt($curl, CURLOPT_URL, "epptest.ficora.fi");

आप URL में एक विधि जैसी नहीं है http:// या https://। इस मामले में cURL मानता है http:// केवल और सर्वर से सीधे जुड़ने की कोशिश करता है,यानी बिना SSL हैंडशेक के। इसे वर्बोज़ cURL आउटपुट से स्पष्ट रूप से देखा जा सकता है। इसे सही URL का उपयोग करने के लिए, अर्थात् URL के प्रारंभ में सही विधि का उपयोग करें।