alibek Posted November 26, 2015 Posted November 26, 2015 Есть сайт, который доступен по HTTP и HTTPS. Для HTTPS используется самоподписанный сертификат (вернее сертификат, подписанным своим CA). Хочу чтобы на сайте HTTP была ссылка на сайт HTTPS, в которой было бы написано "Сейчас используется небезопасная версия сайта, рекомендуем перейти на https://site.ru". Но если посетитель не устанавливал ранее сертификат CA, то он получит предупреждение от браузера. А можно ли проверить, что у посетителя не установлен сертификат CA, и в этом случае вначале отправить посетителя на страницу с инструкцией по его установке? Вставить ник Quote
Tau Posted November 26, 2015 Posted November 26, 2015 Вариант - из js подгружать с https картинку. Если подгрузилась - сертификат есть, если не подгрузилось - нету. Вставить ник Quote
DDR Posted November 26, 2015 Posted November 26, 2015 Один из способов - http://ssl_test.gjp.cc Только надо проверять, как все это работает в разных браузерах Вставить ник Quote
vop Posted November 26, 2015 Posted November 26, 2015 (edited) По большому счету - нет, нельзя. Если не считать разные шаманские пляски. Edited November 26, 2015 by vop Вставить ник Quote
vop Posted November 26, 2015 Posted November 26, 2015 Один из способов - http://ssl_test.gjp.cc Только надо проверять, как все это работает в разных браузерах Ниработает. :) Даже если туда подставить https://www.google.com/, пишет Failed Вставить ник Quote
DDR Posted November 26, 2015 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
vop Posted November 26, 2015 Posted November 26, 2015 Так CORS же. Я заметил по веб-консоли. :) Можете проще сделать Добавить в код сайта в <header> В код какого сайта? :) I.e. я не ТС. Хотя, проверить советик можно. Вставить ник Quote
alibek Posted November 26, 2015 Author Posted November 26, 2015 Добавить можно. Но разве это не будет вызывать задержки в загрузке сайта? Вставить ник Quote
DDR Posted November 27, 2015 Posted November 27, 2015 Но разве это не будет вызывать задержки в загрузке сайта? Задержка будет только при наличии сертификата во время переадресации. Чтобы избавиться от повторных редиректов, можно добавить HSTS. Вставить ник Quote
alibek Posted December 2, 2015 Author 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
m4a12345 Posted December 3, 2015 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
alibek Posted December 3, 2015 Author Posted December 3, 2015 Сложновато. Тогда уж лучше так, как выше советовали. Я уже проверил, если SSL не работает, то отбой случается сразу, ждать не надо. Из дискомфортного только то, что в некоторых браузерах в консоль ошибка сыпется о недоступности js-файла. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.