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

Проверьте Javascript, если сертификат SSL действителен

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

Посмотрите здесь: 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, возможно, если переменная не может быть изменена другим script, но, как правило, выполнение вышеуказанного доказательства работы концепции оставил в качестве упражнения читателю.

Ответ 4

Прямой ответ - нет. 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";
    }
}

Ответ 5

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

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

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

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

Ответ 6

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

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