Сертификат SSL для приложения Delphi - Требуется ли включить безопасность? - PullRequest
2 голосов
/ 09 июля 2011

Итак, я только что установил XAMPP сегодня и заметил, что index.php проверил, чтобы узнать, был ли он доступен через HTTPS.До этого я думал, что для использования безопасности SSL вам нужен сертификат, но я сейчас сомневаюсь.

На данный момент (Пожалуйста, исправьте меня, в этом весь смысл этого вопроса!)Мои собственные исследования привели меня к мысли, что Сертификат предоставляет только информацию о местоположении, к которому вы обращаетесь.Если сертификат не найден, клиент должен определить, доверяет ли он соединению.

Страница индекса XAMPP содержит эту проверку:

<?php
    if (!empty($_SERVER['HTTPS']) && ('on' == $_SERVER['HTTPS'])) {
        $uri = 'https://';
    } else {
        $uri = 'http://';
    }
    $uri .= $_SERVER['HTTP_HOST'];
    header('Location: '.$uri.'/xampp/');
    exit;
?>

Хорошо, поэтому я получаю доступмой Localhost через https://localhost и Firefox "Доверяете ли вы этому сайту?"появилась страница (и вопрос такой: могу ли я доверять себе?;)).

После этого я создал свой собственный маленький test.php со следующим кодом:

<?php
  echo "Hi. \n";
  if(isset($_POST['firstname']) && isset($_POST['lastname']))
  {
   echo "Your Firstname is ".$_POST['firstname']." and your Lastname is ".$_POST['lastname'];
   echo "\r\n\r\n";
    if (!empty($_SERVER['HTTPS']) && ('on' == $_SERVER['HTTPS'])) {
        echo "You are using SSL, arentcha? :)";
    } else {
        echo "Hmm.. No SSL!";
    }

  }

?>

Затем я создал приложение Delphi, которое подключается к http://localhost/test.php и https://localhost/test.php, а также http://jeffijoe.com/test.php и https://jeffijoe.com/test.php с элементом управления TIdHTTP (а для SSL я подключил TIdSSLIOHandlerSocketOpenSSL к свойству TIdHTTP IOHandler.

Воткод для этого:

Var
  Src : TStringlist;
  location: String;
begin


 if RadioButton1.Checked then
 location := 'localhost' else location := 'jeffijoe.com';

 if RadioButton3.Checked then
 Protocol := 'http' else Protocol := 'https';    

  Memo1.Clear;

  Src := TStringlist.Create;
  try
  Src.Add('firstname=Jeff&lastname=Hansen');
  Memo1.Text := IdHTTP1.Post(Protocol+'://'+location+'/test.php',Src);
  finally
    Src.Free;
  end;

end;

Вот результаты:

http://localhost/test.php - Ожидаемый результат

https://localhost/test.php - Ожидаемый результат (Itaknowlegdes Я использую HTTPS!)

http://jeffijoe.com/test.php - Ожидаемый результат

https://jeffijoe.com/test.php - Сбой! 404 Не найдено!

Мой jeffijoe.com размещается на обычной учетной записи общего хостинга.

Итак, вопросы: действительно ли HTTPS к Localhost действительно "безопасен"? И почему не удалось установить соединение HTTPS с местоположением Jeffijoe.com, если оно неmy Localhost? Как насчет сертификатов? Требуются ли они? Можно ли установить защищенное соединение, не приобретая сертификат с завышенной ценой?

1 Ответ

8 голосов
/ 09 июля 2011

Соединение защищено от снифферов, то есть то, что идет по проводам, зашифровано.Но так как сертификат самоподписан, нет никакой гарантии, что другая сторона действительно является тем, кем она притворяется, именно в этом и заключается смысл сертификатов: третья сторона гарантирует, что другая сторона была проверена на то, кем она притворяется..

Причина, по которой он работал на вашем локальном блоке XAMPP, заключается в том, что он имеет так называемый самозаверяющий сертификат и инфраструктуру сервера для управления https-связью, которой, скорее всего, не хватает на вашем размещенном сайте..

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

РЕДАКТИРОВАТЬ: чтобы сделать это упражнение более интересным: система сертификатов может работать в обоих направлениях, то есть сервер доказываетвам это подлинно, и благодаря так называемому клиентскому сертификату вы можете доказать серверу, кем вы себя представляете.В зависимости от вашего варианта использования изучение сертификатов на стороне клиента может быть весьма полезным, но имейте в виду, что это нелегко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...