Как проверить, существует ли ssl на веб-сервере через php? - PullRequest
1 голос
/ 23 мая 2009

У меня есть эта функция в классе:

function enable_ssl() {
    if ($_SERVER[HTTPS] != "on") {
        $domain = "https://".$_SERVER['HTTP_HOST'] . "/" . $_SERVER['SCRIPT_NAME'];
        header("Location: {$domain}");
    }
}

Проблема в том, что когда на сервере не установлен SSL, и у меня есть эта функция, инициализация страницы перенаправляет на страницу 404. Мне было интересно, как я могу заставить эту функцию работать, только если SSL установлен и работает?

Возможно ли это?

Спасибо.

P.S .: Я провел небольшое исследование в Google, но ничего не смог найти.

Ответы [ 8 ]

2 голосов
/ 13 июня 2011

Расширение загружено!

http://php.net/manual/en/function.extension-loaded.php

, например

if(!extension_loaded('openssl'))
{
    throw new Exception('This app needs the Open SSL PHP extension.');
}
2 голосов
/ 23 мая 2009

две идеи

  1. Установите соединение сокета с портом 443 и посмотрите, подключается ли он.
  2. Прочитайте конфигурационный файл apache и посмотрите, есть ли что-нибудь, слушающее этот порт
2 голосов
/ 23 мая 2009

На * nix-сервере вы можете попробовать проанализировать вывод netstat -A inet -lnp для веб-сервера, прослушивающего порт 443. Вроде неуклюжий.

Лучший вариант, я бы сказал, это сделать его параметром конфигурации для пользователя. Пусть они сообщат вашему приложению, если у них включен HTTPS.

0 голосов
/ 14 августа 2018

Я использовал код ниже

$file ="https://mydomain/index.php";        
$file_headers = @get_headers($file);
$DomainName=(!$file_headers || $file_headers[0] == 'HTTP/1.1 404 Not Found')?'http://mydomain':'https://mydomain';

Это в основном проверяет, можно ли найти файл (получить к нему доступ) через HTTPS.

0 голосов
/ 16 апреля 2017

Я просто использую file_get_contents, чтобы попытаться открыть тот же файл через https, и если он был успешным, принудительно перенаправить ...

    function IsHttps() 
    { 
        return 
            (!empty($_SERVER["HTTPS"]) && (strtolower($_SERVER["HTTPS"])!=="off")) 
            || ($_SERVER["SERVER_PORT"]==443); 
    }

    if (!IsHttps() && extension_loaded("openssl"))
    {
        $target = "https://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"];
        ini_set("allow_url_fopen", true);
        if (file_get_contents($target)!==false) 
        { 
            header("Location: https://".$_SERVER["HTTP_HOST"].$_SERVER["URL"]); 
            die(); 
        }
    }
0 голосов
/ 12 февраля 2012

Вот как WordPress делает это:

<?php
function is_ssl() {
if ( isset($_SERVER['HTTPS']) ) {
return true;
if ( '1' == $_SERVER['HTTPS'] )
return true;
} elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
return true;
}
return false;
}
?>

Вы можете использовать свою валидацию в промежутках между возвратом правды! Идти к: http://tutes.in/2012/02/13/check-if-ssl-exists-on-a-webserver-through-php/ для объяснения и более подробного исходного кода.

0 голосов
/ 02 июня 2010

Я использую xampp в качестве сервера разработки на своем ноутбуке. Я еще не настроил соединение SSL на xampp. На моем производственном сервере включена поддержка SSL, а также действующий сертификат.

Я заметил, что $ _SERVER ['HTTPS'] не существует на моем сервере разработки xampp, но существует на моем производственном сервере.

Я предполагаю (возможно, неправильно), что если $ _SERVER ['HTTPS'] не установлен, SSL на сервере не включен.

<?php

if (isset($_SERVER['HTTPS')) echo 'SSL Exists'
else echo 'No SSL'

?>
0 голосов
/ 23 мая 2009

Вы можете попытаться подключиться к серверу, используя curl . Тем не менее, я бы также попытался сделать опцию конфигурации. Если вы используете приведенное ниже, убедитесь, что вы не вызываете бесконечный цикл.

function ignoreHeader($curl, $headerStr)
{
  return strlen($headerStr);
}

$curl = curl_init("https://example.com/");
curl_setopt($curl, CURLOPT_NOBODY, TRUE);
curl_setopt($curl, CURL_HEADERFUNCTION, 'ignoreHeader');
curl_exec($curl);
$res = curl_errno($curl);

if($res == 0)
{
  $info = curl_getinfo($curl);
  if($info['http_code'] == 200)
  {
    # Supports SSL
    enable_ssl();
  }
}
else
{
  # Doesn't.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...