2010-04-11 20 views
12

Czy istnieje sposób sprawdzenia kodu JavaScript, jeśli dany host posiada certyfikat SSL? (bez blokowania)Sprawdź w JavaScript, czy certyfikat SSL jest ważny.

W moim przypadku chcę wyświetlić: "możesz również użyć https: // .." jeśli przez JavaScript mogę wysłać zapytanie do https://my_url bez konieczności akceptowania niezaufanego certyfikatu.

Czy można to zrobić asynchronicznie?

+1

Pytanie jest OK, ale nie widzę rozsądnej odpowiedzi. Myślę, że oczekiwano takiego przepisu - wysłanie na serwer żądania AJAX, które może zostać zablokowane, jeśli certyfikat jest niezaufany (i nie blokuje okna przeglądarki). Gdy tak się stanie, wyświetl instrukcje dotyczące pobierania certyfikatu CA, jeśli go brakuje. –

+0

Mam inny przypadek użycia, ponieważ mam tylko kilku użytkowników, którzy zgłosili, że przeglądarka mówi im, że witryna jest niepewna. Podejrzewam, że to coś ze swoją przeglądarką - jak stara wersja IE. Chciałbym wykryć, czy mój certyfikat jest nieważny dla kogoś i czy ma on diagnostykę wysłaną z powrotem do mojego serwera. Wydaje się, że nie ma znormalizowanego sposobu, aby to zrobić. – Ecropolis

Odpowiedz

2

Pytanie nie ma sensu. Nie można uzyskać certyfikatu SSL serwera bez otwierania połączenia SSL z nim, a gdy już to zrobisz, informowanie użytkownika, że ​​może to zrobić, jest nieco bezsensowne.

+0

Nie. Użytkownik może "zaakceptować niezaufany certyfikat". – Malx

+5

Co? Nie można uzyskać certyfikatu SSL serwera bez otwierania połączenia SSL. Jeśli użytkownik zaakceptował certyfikat, miał już na to ochotę. O co ci chodzi? – EJP

3

Prosta odpowiedź brzmi: nie. JavaScript nie zapewnia żadnych metod sprawdzania poprawności certyfikatów. To jest praca pozostawiona przeglądarce.

Lepsze podejście do tego problemu pochodzi od strony serwera. Jeśli kontrolujesz witrynę, możesz wyrenderować zmienną na stronie z informacjami zebranymi po stronie serwera.

w .NET coś

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

Nie jestem pewien, co Twój przypadek użycia jest. Jeśli po prostu próbujesz "sprawdzić z wyprzedzeniem", zanim podasz link do kogoś na inną stronę, inne odpowiedzi tutaj będą bardziej istotne niż moje.

Jeśli spodziewasz się, że mysite.com użyje certyfikatu SSL, który nie jest domyślnie zaufany w przeglądarce, ale masz inny sposób, w jaki powinien być zaufany, możesz użyć implementacji JavaScript TLS, aby dokonać żądania domeny do tej innej witryny. Wymaga to jednak, aby witryna była obsługiwana przez https i zaufana w przeglądarce, a na drugiej stronie, aby zapewniała plik strategii Flash między domenami.

Jeśli brzmi to nic takiego, co chcesz zrobić, sprawdź projektu Forge open source na github:

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

0

można uruchomić serwer gdzie indziej, który obsługuje kontrole certyfikatów na podstawie co chcesz, a następnie aplikacja javascript wysyła życzen est to serwer z prośbą o sprawdzenie. Wymaga to posiadania co najmniej jednego serwera w świecie, któremu można zaufać.

Zapytanie o tym charakterze można dość łatwo zrobić w tle.

7

Spójrz tutaj: https://support.mozilla.org/pl/questions/923494

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

Jednak może to być Mozilla specyficzne.

W każdym razie, chciałbym zobaczyć, czy to rozwiązanie wzdłuż tych linii będzie działać:

<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> 

Ty oczywiście trzeba dokonać powrót serwer WWW ten kod pod adresem URL https://example.com/ssltest.js:

sslCertTrusted = true; 

I nie jestem dokładnie pewien szczegółów. Ale widziałem podobną technologię wykorzystywaną do wykrywania adblokacji itp. Być może trzeba będzie zaimportować na obiekcie window, jeśli zmienna nie może być zmodyfikowana przez inny skrypt, ale generalnie wykonanie powyższej koncepcji pracy koncepcyjnej jest pozostawione jako ćwiczenie do czytelnika.

Powiązane problemy