cURL与SSL验证工作,但我如何验证它是加密的?



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

我想用domain.com来获取example.com/test.php的内容。

Code on: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 You got my contents!)获得的内容。然而,我担心的是,我不必在cURL代码中提供任何类型的证书。我如何检查我从domain.com发送的内容是否加密,我从example.com接收的内容是否加密?我的目标是在这两个网站之间安全地传输数据。

首先,您使用https方案,这意味着使用tls进行curl连接。https://example.com/test.php,http://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

您将看到连接的端口,并将捕获的数据记录到转储。pcap文件。如果其中一个端口是443 -您的流量是使用tls发送的。稍后还可以分析dump。

在wireshark中设置pcap文件或使用strings命令。

最新更新