首页  >  问答  >  正文

带有 SSL 验证的 cURL 可以工作,但如何验证它是否已加密?

我拥有 2 个网站,example.comdomain.com。两个 DNS 均托管在 Cloudflare 上。 Cloudflare 在其仪表板上提供免费的 SSL/TLS 加密。这两个网站都设置为强制 HTTPS 重写的完全加密模式。 example.com 托管在 WebHostingA 上,domain.com 托管在 HosterB 上。

我想使用domain.comexample.com/test.php获取内容。

代码:domain.com/get-contents.php

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://example.com/test.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, TRUE);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, ['username' => 'Bob']);
$response = curl_exec($ch);
var_dump($response);

代码:example.com/test.php

if (isset($_POST['username']) && ctype_alpha($_POST['username'])) {

    echo($_POST['username'] . " You got my contents!");

} else {
    echo("Nope!");
}

我能够成功返回从 example.com/test.php 获取内容(Bob 你得到了我的内容!)。然而,我担心的是我不必在 cURL 代码中提供任何类型的证书。如何检查从 domain.com 发送的内容是否已加密以及从 example.com 收到的内容是否已加密?我的目标是在这两个网站之间安全地传输数据。

P粉155832941P粉155832941300 天前385

全部回复(1)我来回复

  • P粉505450505

    P粉5054505052024-01-17 11:07:00

    首先你使用了https方案,这意味着curl使用tls连接。 https://example.com/test.phphttp://example.com/test.php 是不同的 url,curl 本身不会更改方案.

    第二 - 在某些情况下,服务器端可能会重定向到纯 http。为了确保没有重定向并且连接是加密的,您可以尝试使用 curl_getinfo() 函数并检查 CURLINFO_EFFECTIVE_URLCURLINFO_SSL_VERIFYRESULT 字段像这样:

    $r = curl_getinfo($ch, CURLINFO_SSL_VERIFYRESULT);
    $url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);

    $r 应为 0,$url 应以 https:// 开头。

    您还可以在任何此服务器上使用 tcpdump 来记录请求并尝试检查转储是否有任何纯数据。

    [server1]# tcpdump -l -n -s 0 -w dump.pcap host server2.ip.addres

    您将看到连接的端口并将捕获的数据记录到 dump.pcap 文件中。如果端口之一是 443 - 您的流量是使用 tls 发送的。您也可以稍后在wireshark中分析dump.pcap文件或仅使用strings命令。

    回复
    0
  • 取消回复