Проверьте в Javascript, если сертификат SSL действителен - PullRequest
12 голосов
/ 12 апреля 2010

Есть ли способ проверить в JavaScript, является ли действительным сертификат SSL для данного хоста? (без блокировки)

В моем случае я хочу отобразить: «вы также можете использовать https: // ..», если через JavaScript я могу сделать запрос на https://my_url без запроса на принятие ненадежного сертификата.

Можно ли это сделать асинхронно?

Ответы [ 7 ]

7 голосов
/ 01 августа 2014

Взгляните сюда: https://support.mozilla.org/pl/questions/923494

<img src="https://the_site/the_image" onerror="redirectToCertPage()">

Однако, это может быть связано с Mozilla.

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

<script> var sslCertTrusted = false; </script>
<script src="https://example.com/ssltest.js"></script>
<script> 
    if (!sslCertTrusted) 
    {
        alert('Sorry, you need to install the certificate first.');
        window.location('http://example.com/cert_install_instructions/');
    }
    else
    {
        // alert('Redirecting to secure connection')
        window.location('https://example.com/');
    }
<script>

Вам, конечно, нужно, чтобы ваш веб-сервер возвращал этот код по URL https://example.com/ssltest.js:

sslCertTrusted = true;

Я не совсем уверен в деталях. Но я видел похожую технологию, используемую для обнаружения блокирования рекламы и т. Д. Возможно, вам понадобится прокрутить объект window, возможно, если переменная не может быть изменена другим сценарием, но, как правило, создание приведенного выше доказательства концепции оставлено упражнение для читателя.

5 голосов
/ 01 октября 2010

То, что я нашел до сих пор - это возможно с Firefox, пока не знаю о других браузерах:

https://developer.mozilla.org/En/How_to_check_the_security_state_of_an_XMLHTTPRequest_over_SSL

3 голосов
/ 12 апреля 2010

Прямой ответ - нет. Javascript не предоставляет никаких средств проверки сертификатов. Это работа, оставленная браузеру.

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

В .Net что-то вроде

var canSecure = <%= MySiteHasSsl ? "true" : "false" %>;
if (canSecure) {
    if (confirm("This site supports SSL encryption. Would you like to switch to a secure connection?")) {
        location.href = "https://mysite.com";
    }
}
1 голос
/ 03 апреля 2019

Полезное уведомление: navigator.clipboard будет undefined в браузерах Chrome, если нет действующего сертификата SSL.

1 голос
/ 22 июля 2010

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

Если вы ожидаете, что mysite.com будет использовать SSL-сертификат, который по умолчанию не является доверенным в браузере, но у вас есть другой способ узнать, что ему следует доверять, тогда вы можете использовать реализацию TLS JavaScript для создания междоменного домена. запросы на этот другой сайт. Однако для этого необходимо, чтобы ваш веб-сайт сначала обслуживался по протоколу https и ему доверяли в браузере, а другой сайт предоставлял файл междоменной политики Flash.

Если это звучит как то, что вы хотите сделать, посмотрите проект Forge с открытым исходным кодом на github:

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

1 голос
/ 12 апреля 2010

Вопрос не имеет смысла. Вы не можете получить SSL-сертификат сервера, не открыв SSL-соединение с ним, и как только вы это сделаете, сказать пользователю, что он тоже может, немного бессмысленно.

0 голосов
/ 05 июля 2013

Вы можете запустить сервер в другом месте, который обрабатывает проверки сертификатов, основываясь на том, что вы хотите, тогда ваше приложение javascript отправляет запрос на этот сервер с просьбой о проверке. Для этого требуется, чтобы в мире был хотя бы один сервер, которому можно доверять.

Запрос такого рода довольно легко можно выполнить в фоновом режиме.

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