gpt4 book ai didi

TCP SSL 中的 PHP stream_socket_client 与 cURL

转载 作者:太空宇宙 更新时间:2023-11-03 13:36:12 30 4
gpt4 key购买 nike

我在使用 cURL 通过 SSL 将 XML 发布到 TCP 地址时遇到问题。我必须在请求中传递一个 SSL 证书,其中包含私钥 + 证书来验证我自己。

我刚刚使用 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);

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

最佳答案

curl_setopt($curl, CURLOPT_URL, 'epptest.ficora.fi');

您的网址不包含 http://https:// 之类的方法。在这种情况下,cURL 仅假定 http:// 并尝试直接连接到服务器,即没有 SSL 握手。这可以从详细的 cURL 输出中清楚地看出。要解决此问题,请使用正确的 URL,即在 URL 的开头使用正确的方法。

关于TCP SSL 中的 PHP stream_socket_client 与 cURL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39234746/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com