Au sein d'un navigateur web, est-il possible pour le JavaScript pour obtenir des informations sur le Certificat HTTPS utilisé pour la page en cours?
Est-il une méthode pour le code JavaScript s'exécutant dans un navigateur pour déterminer le certificat d'autorité de certification est utilisé pour authentifier l'hôte distant pour le navigateur actuel de la connexion HTTPS, et également obtenir les propriétés de ce certificat, tels que le nom de la CA?
Si non, existe-il d'autres options pour par programmation à l'obtention de cette information, tels que les ActiveX, Java, CGI sur le serveur, ...?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser l'opensource Forge projet pour ce faire. Il implémente le protocole SSL/TLS en JavaScript. Vous pouvez faire un appel ajax vers le serveur et l'utilisation d'une fonction de rappel pour inspecter le certificat. Gardez à l'esprit que le serveur d'envoi du JavaScript, donc il ne devrait pas être utilisé pour déterminer si oui ou non vous avez confiance au serveur le JavaScript est de. La Forge du projet autorise les requêtes inter-domaine, donc si vous utilisez cette confiance, vous pouvez vous charger de la Forge JavaScript à partir d'un serveur vous déjà confiance, et puis de communiquer avec le serveur, vous n'avez pas encore confiance. Cependant, à moins que l'autre serveur fournit un cross-domaine de la politique, vous ne serez pas en mesure d'effectuer la demande de domaines.
https://github.com/digitalbazaar/forge/blob/master/README.md
Le blog des liens dans le fichier README de fournir plus d'informations sur la façon Forge peut être utilisé et comment il fonctionne.
La copie de ma propre réponse de Est-il possible d'accéder à l'information de certificat à partir d'une Extension Chrome
2018 réponse: oui, dans Firefox, 62
Vous aurez besoin de faire une WebExtension, qui est aussi appelé une extension de navigateur.
Voir accéder à des informations de sécurité sur MDN
Vous pouvez aussi consulter les docs pour:
Vous aurez besoin de Firefox 62.
Voici un travail
background.js
manifest.json
:Il peut également être mis en œuvre dans le Chrome une fois ce code est fusionné.
Le code JavaScript s'exécutant dans le navigateur web n'ont pas accès à de l'information sur le certificat. Le certificat de l'information n'est pas transmise par le biais de l'adresse HTTP de l'application. Ma recherche indique qu'il n'existe aucun moyen de l'application web afin de déterminer si un man-in-the-middle attack a injecté un faux certificat, quelque part entre l'hôte et le client.
Pas. Vous pourriez évidemment le faire avec AJAX/ActiveX/Java/Flash/Silverlight et une coutume de script côté serveur, mais je ne vois pas pourquoi vous auriez besoin de cela.
EDIT: L'idée ci-dessus est que vous pouvez faire une demande de réseau (à l'aide de l'une des technologies ci-dessus) pour le serveur et se demander ce certificat a été utilisé pour la demande du réseau. Le serveur peut alors inspecter sa propre configuration et de répondre à la question.
Si le navigateur est en quelque sorte faire confiance à un certificat non valide et de le connecter à un autre serveur (par exemple, un MITM serveur), le serveur pourrait être. Une fois la confiance du navigateur mécanisme est compromis, je ne sais pas comment faire pour éviter cela.
Autant que je sache, il n'existe aucun moyen (purement utiliser côté client Api) pour demander directement au navigateur ce cert c'est à l'aide de "pour le navigateur actuel de la connexion SSL". Même Forge de ne pas le faire. Il crée une toute parallèle session SSL, mais il ne vous permet pas de poser des questions sur le navigateur natif de session SSL.
Autant que je sache, pas avec Javascript seul. Mais certains serveurs vous permettent d'accéder aux paramètres de connexion de fil ou de processus. Un serverside script peut ensuite envoyer ces valeurs ainsi que la demande et de l'utiliser.
J'ai trouvé ceci pour un serveur web nginx:
http://wiki.nginx.org/NginxHttpSslModule
(Regardez au bas de la page pour les variables). Il devrait être possible de les définir comme des variables d'environnement et les transmettre à votre processus FastCGI ou ce que vous utilisez.
AOLServer/Naviserver permet un accès similaire avec le nsssl module.
En termes pratiques, cela est de peu d'usage -- pourquoi auriez-vous besoin de connaître les informations de certificat à partir de JavaScript sur le page individuelle déjà rendu?
Si ce n'est pas digne de confiance, alors il est évident que votre code pourrait avoir été modifié, aussi, donc, il ne peut pas faire confiance, soit.
Si le certificat est réellement digne de confiance, alors comment voulez-vous être en mesure de distinguer le scénario de celui où le certificat n'est pas approuvé, mais votre code a été modifié par le biais d'une attaque de type MitM à penser le contraire?
Ainsi, une vérification des certificats ne serait utile de l'intérieur Extensions de Navigateur (qui sont présumées du code de confiance), par opposition à des scripts dans le pages individuelles eux-mêmes. D'interface tels que les extensions de l'utilisation est un navigateur spécifique, et non tous les navigateurs, même les fournir. Par exemple, alors que Mozilla navigateurs ne vous permettent de lire dans les certificats (offrant des extensions comme le EFF SSL Observatoire), Le chrome est toujours défaut.