alibek Posted November 26, 2015 Есть сайт, который доступен по HTTP и HTTPS. Для HTTPS используется самоподписанный сертификат (вернее сертификат, подписанным своим CA). Хочу чтобы на сайте HTTP была ссылка на сайт HTTPS, в которой было бы написано "Сейчас используется небезопасная версия сайта, рекомендуем перейти на https://site.ru". Но если посетитель не устанавливал ранее сертификат CA, то он получит предупреждение от браузера. А можно ли проверить, что у посетителя не установлен сертификат CA, и в этом случае вначале отправить посетителя на страницу с инструкцией по его установке? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Tau Posted November 26, 2015 Вариант - из js подгружать с https картинку. Если подгрузилась - сертификат есть, если не подгрузилось - нету. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
DDR Posted November 26, 2015 Один из способов - http://ssl_test.gjp.cc Только надо проверять, как все это работает в разных браузерах Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vop Posted November 26, 2015 (edited) По большому счету - нет, нельзя. Если не считать разные шаманские пляски. Edited November 26, 2015 by vop Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vop Posted November 26, 2015 Один из способов - http://ssl_test.gjp.cc Только надо проверять, как все это работает в разных браузерах Ниработает. :) Даже если туда подставить https://www.google.com/, пишет Failed Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
DDR Posted November 26, 2015 Один из способов - 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") } Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vop Posted November 26, 2015 Так CORS же. Я заметил по веб-консоли. :) Можете проще сделать Добавить в код сайта в <header> В код какого сайта? :) I.e. я не ТС. Хотя, проверить советик можно. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted November 26, 2015 Добавить можно. Но разве это не будет вызывать задержки в загрузке сайта? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
DDR Posted November 27, 2015 Но разве это не будет вызывать задержки в загрузке сайта? Задержка будет только при наличии сертификата во время переадресации. Чтобы избавиться от повторных редиректов, можно добавить HSTS. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted December 2, 2015 Подскажите, как правильно сделать? 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(), после чего браузер переходит по ссылке. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
m4a12345 Posted December 3, 2015 (edited) Подскажите, как правильно сделать? 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(); на другой домен просто так нельзя делать из-за соображений безопасности, нужно обходить. Edited December 3, 2015 by m4a12345 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted December 3, 2015 Сложновато. Тогда уж лучше так, как выше советовали. Я уже проверил, если SSL не работает, то отбой случается сразу, ждать не надо. Из дискомфортного только то, что в некоторых браузерах в консоль ошибка сыпется о недоступности js-файла. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...