2010-04-11 6 views
12

Y at-il un moyen de vérifier en JavaScript si donné un hôte c'est certificat SSL est valide? (non bloquant)Check in Javascript si un certificat SSL est valide

Dans mon cas, je veux afficher: "vous pouvez également utiliser https: // .." si via JavaScript, je peux faire une demande à https://my_url sans être invité à accepter un certificat non approuvé.

Est-ce que cela peut être fait de manière asynchrone?

+1

La question est OK, mais je ne vois pas de réponse sensée. Je pense que ce qui était attendu était une recette comme - faire une requête AJAX au serveur, qui peut être bloquée si le certificat n'est pas fiable (et ne pas bloquer la fenêtre du navigateur). Lorsque cela se produit, affichez les instructions pour télécharger le certificat de l'autorité de certification, s'il est manquant. –

+0

J'ai un cas d'utilisation différent pour ceci où j'ai juste quelques utilisateurs qui ont signalé que le navigateur leur indique que le site n'est pas sûr. Mon soupçon est que c'est quelque chose avec leur navigateur - comme une ancienne version de IE. Je voudrais détecter si mon CERT est invalide pour quelqu'un et s'il a des diagnostics envoyés anyncronsly à mon serveur. Il semble qu'il n'y ait pas de façon standardisée de le faire. – Ecropolis

Répondre

2

La question n'a pas de sens. Vous ne pouvez pas obtenir le certificat SSL du serveur sans ouvrir une connexion SSL, et une fois que vous avez fait cela, dire à l'utilisateur qu'il peut le faire aussi est un peu inutile.

+0

Non. L'utilisateur peut "accepter un certificat non approuvé". – Malx

+5

Non quoi? Vous ne pouvez pas obtenir le certificat SSL du serveur sans ouvrir une connexion SSL. Si l'utilisateur a accepté le certificat, il a déjà le chane pour le regarder. À quoi veux-tu en venir? – EJP

3

La réponse directe est non. Javascript ne fournit aucun moyen de valider les certificats. C'est un travail laissé au navigateur.

Une meilleure approche de ce problème est du côté serveur. Si vous contrôlez le site, vous pouvez afficher une variable sur la page avec des informations glanées du côté serveur.

En .Net quelque chose comme

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

Je ne suis pas tout à fait sûr de ce que votre cas d'utilisation est. Si vous essayez simplement de «vérifier à l'avance» avant de fournir un lien vers quelqu'un pour un autre site Web, les autres réponses ici seront plus pertinentes que les miennes.

Si vous pensez que mysite.com utilisera un certificat SSL qui n'est pas approuvé par défaut dans le navigateur mais que vous avez une autre façon de savoir qu'il doit être approuvé, vous pouvez utiliser une implémentation JavaScript TLS pour effectuer des conversions croisées. demandes de domaine à cet autre site. Toutefois, cela nécessite que votre site Web soit diffusé sur https et approuvé dans le navigateur pour commencer, et que l'autre site fournisse un fichier de stratégie inter-domaine Flash.

Si cela semble quelque chose comme ce que vous voulez faire, consultez le projet Forge open source sur GitHub:

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

0

vous pouvez exécuter un serveur ailleurs qui gère les contrôles de certificats basés sur ce que vous voulez, alors votre application javascript envoie une requ est à ce serveur demandant un contrôle. Cela nécessite que vous ayez au moins un serveur dans le monde auquel vous pouvez faire confiance.

Une requête de cette nature peut être effectuée en arrière-plan assez facilement.

7

Jetez un oeil ici: https://support.mozilla.org/pl/questions/923494

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

Cependant, cela peut être Mozilla spécifique.

Quoi qu'il en soit, je verrais si une solution le long de ces lignes fonctionnerait:

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

Vous devez bien sûr de faire votre déclaration de serveur web ce code sous l'URL https://example.com/ssltest.js:

sslCertTrusted = true; 

I Je ne suis pas vraiment sûr des détails. Mais j'ai vu une technologie similaire utilisée pour détecter un adblocking etc. Vous devrez peut-être utiliser l'objet window peut-être, si la variable ne peut pas être modifiée par un autre script, mais que la validation du concept ci-dessus est généralement un exercice au lecteur.