Перейти к содержимому
Калькуляторы

Можно ли проверить наличие у посетителя сайта корневого сертификата?

Есть сайт, который доступен по HTTP и HTTPS.

Для HTTPS используется самоподписанный сертификат (вернее сертификат, подписанным своим CA).

Хочу чтобы на сайте HTTP была ссылка на сайт HTTPS, в которой было бы написано "Сейчас используется небезопасная версия сайта, рекомендуем перейти на https://site.ru".

Но если посетитель не устанавливал ранее сертификат CA, то он получит предупреждение от браузера.

А можно ли проверить, что у посетителя не установлен сертификат CA, и в этом случае вначале отправить посетителя на страницу с инструкцией по его установке?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вариант - из js подгружать с https картинку.

Если подгрузилась - сертификат есть, если не подгрузилось - нету.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Один из способов - http://ssl_test.gjp.cc

Только надо проверять, как все это работает в разных браузерах

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

По большому счету - нет, нельзя. Если не считать разные шаманские пляски.

Изменено пользователем vop

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Один из способов - http://ssl_test.gjp.cc

Только надо проверять, как все это работает в разных браузерах

 

Ниработает. :) Даже если туда подставить https://www.google.com/, пишет Failed

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Один из способов - http://ssl_test.gjp.cc

Только надо проверять, как все это работает в разных браузерах

 

Ниработает. :) Даже если туда подставить https://www.google.com/, пишет Failed

Так CORS же.

 

Можете проще сделать

Добавить в код сайта в <header>

<script src="https://site.ru/redirect.js" type="text/javascript"></script>
<script type="text/javascript" language="javascript">
   function checkProto(){
       try {
           redirectProto();
       }
       catch(err) {
           //console.log(err)
       }
   }
   checkProto();
</script>

 

redirect.js

function redirectProto() {
   if (window.location.protocol != "https:")
       window.location.href = "https:" + window.location.href.substring(window.location.protocol.length);
       //console.log("Not https")
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так CORS же.

 

Я заметил по веб-консоли. :)

 

Можете проще сделать

Добавить в код сайта в <header>

 

В код какого сайта? :) I.e. я не ТС. Хотя, проверить советик можно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добавить можно.

Но разве это не будет вызывать задержки в загрузке сайта?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Но разве это не будет вызывать задержки в загрузке сайта?

Задержка будет только при наличии сертификата во время переадресации.

Чтобы избавиться от повторных редиректов, можно добавить HSTS.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подскажите, как правильно сделать?

function checkSSL(url)
{
   var http = new XMLHttpRequest();
   http.open("GET", url, false);
   http.send();
   if (http.readyState==4 && http.status==200)
   {
       return true;
   }
   return false;
}
...
<a onclick="return checkSSL('https://site.ru/empty')" href="https://site.ru">Безопасное подключение</a>

 

Я считал, что при клике на ссылку js-скрипт попытается открыть ресурс https://site.ru/empty (там пустой файл, по ссылке из браузера он открывается).

Если ресурс открылся, то функция возвращает true, клик по ссылке срабатывает и клиент переходит на https.

Если ресурс не открылся (из-за ошибки SSL), то функция возвращает false и клик не срабатывает, вместо него я позже допишу редирект на страницу с инструкцией.

 

Но почему-то так не работает, пользователь всегда переходит на https.

 

Судя по дебагу, функция работает до строки http.send(), после чего браузер переходит по ссылке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подскажите, как правильно сделать?

function checkSSL(url)
{
   var http = new XMLHttpRequest();
   http.open("GET", url, false);
   http.send();
   if (http.readyState==4 && http.status==200)
   {
       return true;
   }
   return false;
}
...
<a onclick="return checkSSL('https://site.ru/empty')" href="https://site.ru">Безопасное подключение</a>

 

Я считал, что при клике на ссылку js-скрипт попытается открыть ресурс https://site.ru/empty (там пустой файл, по ссылке из браузера он открывается).

Если ресурс открылся, то функция возвращает true, клик по ссылке срабатывает и клиент переходит на https.

Если ресурс не открылся (из-за ошибки SSL), то функция возвращает false и клик не срабатывает, вместо него я позже допишу редирект на страницу с инструкцией.

 

Но почему-то так не работает, пользователь всегда переходит на https.

 

Судя по дебагу, функция работает до строки http.send(), после чего браузер переходит по ссылке.

 

function toHttps() {
//переход по ссылке
}
function checkSSL(url)
{
   var http = new XMLHttpRequest();
   http.open("GET", url, false);
   http.send();
   if (http.readyState==4 && http.status==200)
   {
       toHttps();
   }
   return false;
}
...
<a onclick="return checkSSL('https://site.ru/empty')">Безопасное подключение</a>

 

И по моему запрос XMLHttpRequest(); на другой домен просто так нельзя делать из-за соображений безопасности, нужно обходить.

Изменено пользователем m4a12345

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сложновато.

Тогда уж лучше так, как выше советовали.

Я уже проверил, если SSL не работает, то отбой случается сразу, ждать не надо.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.