PHP-как узнать, поддерживает ли сервер TLS 1.0?
Я пишу простую проверку, где вы можете ввести 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.
есть ли способ сделать это?
3 ответов
Как насчет этого:
<?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";
}
}
вывод:
Ok! Insecure TLS1.0 not supported
Ok! Insecure TLS1.1 not supported
Ok! Secure TLS1.2 supported
Ok! Secure TLS1.3 supported
нашел следующую:Проверьте, использует ли 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;
?>
$json - >tls_version, вероятно, то, что вы ищете.
вы можете просто проверить, есть ли действительный ответ от сервера:
$site = 'google.com';
$ctx = stream_context_create(['ssl' => [
'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT
]]);
@$r = file_get_contents("https://$site/", FALSE, $ctx);
if ($r === false) {
$answer = "$site is using TLS 1.0. It is recommended to disable this";
}