2010-04-11 33 views
12

¿Hay alguna manera de verificar en JavaScript si se le da a un host su certificado SSL válido? (sin bloqueo)Comprobar en Javascript si un certificado SSL es válido

En mi caso quiero mostrar: "también puede usar https: // .." si a través de JavaScript puedo realizar una solicitud al https://my_url sin que me pidan que acepte un certificado que no sea de confianza.

¿Se puede hacer esto de forma asíncrona?

+1

La pregunta está bien, pero no veo una respuesta sensata. Creo que lo que se esperaba era una receta como: hacer una solicitud de AJAX al servidor, que puede bloquearse si el certificado no es de confianza (y no bloquear la ventana del navegador). Cuando eso suceda, muestre las instrucciones para descargar el certificado de CA, si falta. –

+0

Tengo un caso de uso diferente para esto, donde tengo solo unos pocos usuarios que han informado que el navegador les dice que el sitio es inseguro. Mi sospecha es que es algo con su navegador, como una versión anterior de IE. Me gustaría detectar si mi certificado no es válido para alguien y si tengo un diagnóstico enviado de regreso a mi servidor. Parece que no hay una forma estandarizada para hacer esto. – Ecropolis

Respuesta

2

La pregunta no tiene sentido. No puede obtener el certificado SSL del servidor sin abrir una conexión SSL, y una vez que lo haya hecho, decirle al usuario que puede hacerlo también es un poco inútil.

+0

No. El usuario puede "aceptar un certificado que no es de confianza". – Malx

+5

¿No qué? No puede obtener el certificado SSL del servidor sin abrir una conexión SSL. Si el usuario aceptó el certificado, ya tenía el chane para mirarlo. ¿Cual es tu punto? – EJP

3

La respuesta correcta es no. Javascript no proporciona ningún medio para validar certificados. Este es un trabajo que queda en el navegador.

Un mejor enfoque para este problema es desde el lado del servidor. Si está controlando el sitio, entonces puede procesar una variable en la página con información recopilada en el lado del servidor.

En .Net algo así como

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

no estoy muy seguro de lo que su caso de uso es. Si solo está tratando de "verificar antes de tiempo" antes de proporcionar un enlace a alguien para otro sitio web, las otras respuestas aquí serán más relevantes que las mías.

Si está esperando que mysite.com use un certificado SSL que no es de confianza por defecto en el navegador pero tiene otra forma de saber que debería ser de confianza, entonces podría usar una implementación de JavaScript TLS para hacer cross- solicitudes de dominio a ese otro sitio. Sin embargo, esto requiere que su sitio web se sirva en https y se confíe en el navegador para comenzar y en el otro sitio para proporcionar un archivo de política de Flash entre dominios.

Si esto suena algo parecido a lo que quiere hacer, revisar el proyecto de código abierto Forge en github:

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

0

podría ejecutar un servidor en otro lugar que se encarga de los controles de certificación basado en lo que usted desea, entonces su solicitud Javascript envía una requ Est a ese servidor pidiendo un chequeo. Esto requiere que tengas al menos un servidor en algún lugar del mundo en el que puedas confiar.

Una consulta de esta naturaleza se puede realizar en segundo plano con bastante facilidad.

7

Echa un vistazo aquí: https://support.mozilla.org/pl/questions/923494

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

Sin embargo, esto puede ser Mozilla-específica.

De todos modos, me gustaría ver si una solución en este sentido funcionarí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> 

Es por supuesto necesario para que su retorno servidor web este código bajo la URL https://example.com/ssltest.js:

sslCertTrusted = true; 

I No estoy exactamente seguro sobre los detalles. Pero he visto una tecnología similar utilizada para detectar bloqueos de anuncios, etc. Es posible que necesite utilizar el objeto window, si la variable no puede ser modificada por otro script, pero en general hacer que la prueba de concepto anterior funcione como un ejercicio para el lector

Cuestiones relacionadas