web-dev-qa-db-fra.com

Détecter la compatibilité TLS du navigateur

Nous avons un site Web SSL où l'hôte a récemment désactivé les anciens protocoles SSL comme TLS 1.0 et inférieurs. Selon le navigateur, le visiteur du site reçoit une page vierge ou un message d'erreur cryptique lorsqu'il visite le site si le navigateur qu'il utilise ne prend pas en charge au moins TLS 1.1.

J'espérais créer une page de destination qui ne se trouve pas sur le port SSL et où je peux détecter la capacité du navigateur s'il prend en charge TLS 1.1 et supérieur. Si ce n'est pas le cas, je veux leur montrer un message amical pour mettre à niveau leur navigateur ou utiliser un autre navigateur.

Est-ce quelque chose qui peut être accompli en utilisant la bibliothèque javascript côté client? Si oui, que dois-je utiliser?.

Merci.

24
Aamir

Vous pouvez utiliser l'API fourni par Comment va mon SSL? .

Dans l'exemple suivant, je vérifie le tls_version. Vérification given_cipher_suites peut également être une bonne idée.

<script>
window.parseTLSinfo = function(data) {
  var version = data.tls_version.split(' ');
  console.log(
    version[0] != 'TLS' || version[1] < 1.2
    ? 'So bad! Your browser only supports ' + data.tls_version + '. Please upgrade to a browser with TLS 1.2 support.'
    : 'All OK. Your browser supports ' + data.tls_version + '.'
  );
  console.log(data);
};
</script>
<script src="https://www.howsmyssl.com/a/check?callback=parseTLSinfo"></script>
32
Oriol

Il existe au moins deux sites Web qui vérifieront les capacités du navigateur pour vous, y compris SSL Labs ( https://www.ssllabs.com/ssltest/viewMyClient.html ) et HowsMySSL ( https://www.howsmyssl.com/ ). HowsMySSL possède également une belle API qui peut être facilement vérifiée à partir de JavaScript.

4
KatonahMike

Petite note; À part le code, je pense que les gens devraient être conscients si vous présentez à votre utilisateur final un message d'erreur à ce sujet, vous devez comprendre que les versions de TLS ne sont pas seulement une restriction de navigateur, mais essentiellement au niveau du système d'exploitation. Vous devez l'activer sur votre machine et votre navigateur doit le prendre en charge. Vous pouvez être sur le dernier chrome, mais si dans les paramètres Internet (sous Windows) il a été désactivé, vous aurez toujours un problème de négociation TLS.

2

Voici un moyen de créer une image avec jQuery, et d'ajouter un attribut src, j'utilise un bouton de Paypal, maintenant toute la demande à Paypal doit via TSL1.2 J'espère que cela peut fonctionner

jQuery('<img />').on({
    load: function() {
      console.log("support TSL1.2");
    },
    error: function() {
      console.log('no support TSL1.2');
    }
}).attr('src','https://www.Paypal.com/en_US/i/btn/btn_xpressCheckout.gif');
2
Ady

En effet, vous ne pouvez pas vérifier la version TLS. J'ai dû charger un script à partir d'un site qui ne prend en charge que TLS 1.2 (par opposition à ma page). L'utilisation de la simple balise de script HTML ne vous donnerait aucun indice que le script n'a pas été chargé. En conséquence, j'ai fini par utiliser le script suivant pour charger JS à partir d'un autre domaine:

$.ajaxSetup({'cache':true});
$.getScript('{scriptUrl}').done(function(){
   alert("done");
}).fail(function( jqxhr, settings, exception ) {
    alert(jqxhr.status);
    alert(jqxhr.responseText);
    alert(exception);
});

En cas de problèmes TLS, le jqxhr.status sera 404 afin que vous puissiez afficher un message à l'utilisateur.

2
alon