Подтвердить что ты не робот

В веб-браузере можно ли для JavaScript получать информацию о сертификате HTTPS, который используется для текущей страницы?

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

Если нет, существуют ли какие-либо другие варианты для программного получения этой информации, такие как ActiveX, Java, CGI на стороне сервера,...?

4b9b3361

Ответ 1

Для этого вы можете использовать openward Forge project. Он реализует SSL/TLS в JavaScript. Вы можете сделать ajax-вызов на сервер и использовать обратный вызов для проверки сертификата. Имейте в виду, что сервер является тем, кто отправляет JavaScript, поэтому его не следует использовать для определения того, доверяете ли вы серверу, на котором находится JavaScript. Проект Forge разрешает междоменные запросы, поэтому, если вы используете это для доверия, вы можете загрузить Forge JavaScript с сервера, которому вы уже доверяете, а затем связаться с сервером, которому вы еще не доверяете. Однако, если этот другой сервер не предоставляет междоменную политику, вы не сможете выполнить запрос междоменного доступа.

https://github.com/digitalbazaar/forge/blob/master/README.md

Ссылки блога в README содержат дополнительную информацию о том, как Forge можно использовать и как он работает.

Ответ 2

JavaScript, работающий в веб-браузере, не имеет доступа к информации о сертификате. Информация сертификата также не передается через HTTP в приложение. Мое исследование показывает, что веб-приложение не может определить, было ли атака "человек-в-середине" ввела фиктивный сертификат где-то между хостом и клиентом.

Ответ 3

Нет. Вы, очевидно, могли бы сделать это с помощью AJAX/ActiveX/Java/Flash/Silverlight и настраиваемой серверной стороны script, но я не понимаю, зачем вам это нужно.


EDIT: Идея выше заключается в том, что вы должны сделать сетевой запрос (используя одну из вышеупомянутых технологий) на сервер и спросить, какой сертификат был использован для этого сетевого запроса. Затем сервер может проверить свою конфигурацию и ответить на вопрос.

Если браузер каким-то образом доверяет неверный сертификат и подключается к неправильному серверу (например, сервер MITM), сервер может лежать. Как только механизм доверия браузера будет скомпрометирован, я не знаю, как этого избежать.

Насколько я знаю, нет способа (чисто используя API-интерфейсы на стороне клиента) напрямую запрашивать у браузера, какой сертификат он использует "для текущего соединения SSL в браузере". Даже Forge этого не делает. Он создает полностью параллельный сеанс SSL, но он не позволяет вам спрашивать о собственном сеансе SSL-сеанса браузера.

Ответ 4

AFAIK не только с Javascript. Но некоторые веб-серверы позволяют вам получить доступ к параметрам соединения потока или процесса. Затем серверный script может отправлять эти значения вместе с запросом и использовать его.

Я нашел это для веб-сервера nginx: http://wiki.nginx.org/NginxHttpSslModule (Посмотрите на нижнюю часть страницы для переменных). Должно быть возможно установить их как переменные среды и передать их в ваши процессы FastCGI или все, что вы используете.

AOLServer/Naviserver разрешает аналогичный доступ с модулем nsssl.

Ответ 5

В практическом плане это малопригодно - зачем вам нужно знать информацию сертификата из JavaScript на уже выделенной отдельной странице?

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

  • Если сертификат действительно доверен, то как бы вы могли отличить сценарий от того, где сертификат не доверен, но ваш код был изменен с помощью атаки MitM, чтобы думать иначе?

Таким образом, проверка сертификатов будет полезной только из Расширений браузера (которые, как предполагается, являются доверенным кодом), в отличие от сценариев на отдельных страницах. Такой интерфейс, который использует расширения, зависит от браузера, и не все браузеры даже предоставляют его. Например, в то время как браузеры Mozilla позволяют заглядывать в сертификаты (предоставляя расширения, такие как Обсерватория EFF SSL), Chromium все еще отсутствует.