2015-03-06 5 views
1

Я хотел бы создать сценарий, который может определить, использует ли сайт https или нет.Как я могу программно проверить, использует ли сайт HTTPS?

Что такое программный способ определения этого? Я пробовал посетить один из моих собственных доменов, который, как я знаю, не имеет https, но сервер по-прежнему дал мне код 200 (по крайней мере, в соответствии с используемым расширением Chrome).

Есть ли какая-то ошибка, которую я могу уловить, или какая-либо другая информация, которая будет соответствовать от сайта к сайту?

ответ

2

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

Тем не менее, вы действительно можете проверить, можно ли установить HTTPS-соединение на определенный сайт или нет. Проблема заключается в том, что не в состоянии установить это соединение может означать несколько вещей:

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

Многие сайты попытаются обновить вас от HTTP до HTTPS посредством перенаправления, чтобы пользователь знал, что HTTPS доступен и, надеюсь, заставит их ожидать их в следующий раз, когда они посещают этот сайт. Некоторые сайты даже будут использовать HTTP Strict Transport Security (HSTS), чтобы заставить вас помнить об этом обновлении при следующем посещении этого сайта. Это разумный компромисс, если вы можете предположить, что ваше первое соединение не смягчено.

Что такое программный способ определения этого? Я попытался посетить один из моих собственных доменов, который, как я знаю, не имеет https, но сервер все еще дал мне код 200.

Если у вашего домена нет действительного сертификата, проверка сертификата должна завершиться неудачно, и вы не сможете получить какой-либо код статуса HTTP в ответе.

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

Вы должны по крайней мере, убедитесь, что ваш сценарий проверяет сертификат правильно:

  • Вы должны быть в состоянии проверить, что сертификат является подлинным и выданным ЦСОМ, которому вы доверяете, и действуют во время.(Это обычно указывается в RFC 3820 и RFC 5820)
  • Вы должны быть в состоянии убедиться, что оно действительно для имени хоста, которое вы ищете. (Это обычно указывается в RFC 2818 и RFC 6125.)

Не все библиотеки SSL/TLS включены по умолчанию (особенно вторая точка).

Я не уверен, что вы используете для своего скрипта или того, что вы упомянули в добавлении. Например, если вы используете curl, убедитесь, что вы не используете -k или --insecure, и вы используете wget, убедитесь, что вы не используете --no-check-certificate. Если вы используете libcurl, вы должны убедиться, что вы using the VERIFYPEER and VERIFYHOST properly. Ищите аналогичные варианты в других реализациях, если это не то, что вы используете, и не игнорируйте предупреждения браузера.

+0

Прохладный, спасибо за предоставленную мне необходимую информацию об этом! – Drewdavid

0

В Windows вы можете использовать free Basic Edition of HttpWatch и его automation interface, чтобы написать программу, которая обращалась к сайтам, которые вы хотите протестировать.

Error property класс Entry позволит вам обнаружить случаи, когда HTTP-соединение завершилось с ошибкой.

Смежные вопросы