2012-07-28 10 views

Respuesta

4

Puede configurar un servidor que admita SNI, que sirva dos nombres de host, donde necesite SNI y uno que sea una solución alternativa, ambos con el nombre que están hospedando.

Algo a lo largo de las líneas de:

  • https://www.example.com/name devuelve una representación diciendo I'm www.example.com
  • https://www.example.net/name vuelve I'm www.example.net (y requiere SNI).

Si hace una solicitud XHR a https://www.example.net/name y vuelve www.example.com, a continuación, el navegador no soporta SNI.

+0

Debe asegurarse de que, en caso de que no haya SNI, el servidor informe www.example.com. Si recuerdo correctamente, Apache sirve el ** primer ** certificado que cargó cuando no hay SNI. – Andreas

+0

Sí, eso es lo que quería decir con la solución alternativa: el valor predeterminado. Si es necesario, puede conectarse a ambos y comparar lo que obtiene. – Bruno

+0

Eso suena como una buena idea. Voy a probarlo, esto funcionaría para mí. –

0

Desde que commercerack se actualizó a SNI para todos los sitios, hemos tenido el mismo problema. (Usuarios comenzando el pago y obteniendo un desagradable problema SSL).

Siéntase libre de utilizar esto como punto de partida. A medida que crezca la lista de navegadores, actualizaré, pero ahora sí lo hace IE en XP + Android 2.0-2.2.

https://github.com/brianhorakh/html-sni-useragent-sniffer-warning

+0

Bug en la línea 83? si (/Android\s2\.[012]+/) {browserSNICompatibility = 0; } ... ¿no ves una cadena var para usar la expresión regular? –

1

No estoy seguro si esto es lo que quiere, pero no es este

RewriteEngine on 

    # Test if SNI will work and if not redirect to too old browser page 
    RewriteCond %{HTTPS} on 
    RewriteCond %{SSL:SSL_TLS_SNI} ="" 
    RewriteRule^http://www.example.com/too-old-browser [L,R=307] 

Si un navegador antiguo trató de usar un sitio que necesita SNI entonces será redirigido (en este caso de nuevo a http y una página que dice navegador es demasiado viejo). Pero siempre obtendrás un error. No puede ser evitado. El navegador dice hola IP ...., y apache responde hola aquí está mi certificado. Si el navegador no proporciona SNI en el hello apache, solo envía un certificado predeterminado (es decir, erróneo). El navegador luego se queja.

Si desea recoger esto en http antes de intercambiar a https entonces se podría poner algo como esto en .htaccess

#Set $_SERVER['SSL_TLS_SNI'] for php = %{SSL:SSL_TLS_SNI} or value 
    SetEnv SSL_TLS_SNI %{SSL:SSL_TLS_SNI} 

Y luego, en su página de hacer un https obtenerlo desde el dominio predeterminado (por defecto para el navegador no dice que hay un error de seguridad). Si SNI está funcionando, en php $ _SERVER ['SSL_TLS_SNI'] tendrá el nombre de dominio, de lo contrario tendrá% {SSL: SSL_TLS_SNI}. Este fragmento de código podría mejorarse pero se entiende la idea.

+0

no creo que el navegador volvería a ver la redirección si falla un protocolo de enlace SSL, por lo que no creo que la reorientación basado en la variable 'SSL_TLS_SNI' va a funcionar. –

1

Solo se puede probar la compatibilidad con SNI antes de que así lo requiera. Es decir, no puede obligar a los usuarios a SNT HTTPS y luego retroceder si no lo admiten, ya que recibirán un error como este (de Chrome en Windows XP) sin forma de proceder.

Así que (por desgracia) el usuario tiene que comenzar realmente a través de una conexión HTTP inseguro y luego se actualizan únicamente si son compatibles con SNI.

Puede detectar soporte para SNI a través de:

  1. guión remoto
    En la página HTTP plano, cargar un <script> de su destino SNI HTTPS y si las cargas de secuencia de comandos y se ejecuta correctamente, usted sabe el navegador es compatible con SNI.

  2. AJAX entre dominios (CORS)
    Al igual que en la opción 1, podría intentar realizar una petición AJAX entre dominios desde la página HTTP a HTTPS, pero tenga en cuenta que CORS tiene only limited browser support.

  3. Sniff el agente de usuario
    Este es probablemente el método menos fiable, y usted tendrá que decidir entre tener una lista negra de los navegadores (y sistemas operativos) se sabe que no apoyarlo, o una lista blanca de conocida sistemas que sí.

    sabemos que todas las versiones de IE, Chrome & Opera en Windows XP y por debajo no son compatibles con SNI. Ver CanIUse.com for full list of supported browsers.

Cuestiones relacionadas