PHP - 如何查看服务器是否支持TLS 1.0?

cod*_*ama 10 php tls1.2

我正在编写一个简单的检查器,您可以输入一个URL来检查输入的URL是否使用TLS 1.0,1.1或1.2.基本上我想显示一条消息"Yoursite.com正在使用TLS 1.0.建议禁用此功能."

问题是,如果我是拨打电话的服务器,我只能弄明白.然后我可以用.这允许你编写一个Curl脚本,连接到howsmyssl.com,它将返回我用来连接的连接.这不是我想要的.

我想知道如何使用PHP连接到URL,并查看该服务器是否支持TLS1.0,1.1或1.2.

有没有办法做到这一点?

mon*_*ode 22

这个怎么样:

<?php

$url = 'https://fancyssl.hboeck.de/';

$protocols = [
    'TLS1.0' => ['protocol' => CURL_SSLVERSION_TLSv1_0, 'sec' => false],
    'TLS1.1' => ['protocol' => CURL_SSLVERSION_TLSv1_1, 'sec' => false],
    'TLS1.2' => ['protocol' => CURL_SSLVERSION_TLSv1_2, 'sec' => true],
    'TLS1.3' => ['protocol' => CURL_SSLVERSION_TLSv1_3, 'sec' => true],
];

foreach ($protocols as $name => $value) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSLVERSION, $value['protocol']);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $response = curl_exec($ch) !== false;

    if ($value['sec'] && !$response) {
        echo "Secure $name not supported =( \n";
    } elseif ($value['sec'] && $response) {
        echo "Ok! Secure $name supported \n";
    } elseif (!$value['sec'] && $response) {
        echo "Insecure $name supported =( \n";
    } elseif (!$value['sec'] && !$response) {
        echo "Ok! Insecure $name not supported\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

Ok! Insecure TLS1.0 not supported
Ok! Insecure TLS1.1 not supported
Ok! Secure TLS1.2 supported 
Ok! Secure TLS1.3 supported 
Run Code Online (Sandbox Code Playgroud)

  • 如果可以使用TLS 1.0进行连接,则服务器支持它.两种方式都使用相同的协议建立连接.如果您想知道服务器发起的请求是否使用TLS 1.0,则无法访问服务器,或者至少不能以非hacky方式访问服务器.否则,它将显示有关已安装组件的敏感信息. (3认同)

Mr.*_*lva 6

在以下位置找到以下内容:验证curl是否正在使用TLS

<?php 
$ch = curl_init('https://www.howsmyssl.com/a/check');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);

$json = json_decode($data);
echo $json->tls_version;
?>
Run Code Online (Sandbox Code Playgroud)

$ json-> tls_version可能就是你要找的东西.