¿Desconfiar de una CA intermedia en Linux?

18

Desde este blog .

Las CA intermedias son certificados firmados por una CA raíz que puede firmar certificados arbitrarios para cualquier sitio web.

Son tan potentes como las CA raíz, pero no hay una lista completa de las que su sistema confía, porque las CA raíz pueden hacer nuevas a voluntad, y su sistema confiará en ellas a primera vista. Hay MILES registrados en CT.

Este mes surgió una interesante, generada aparentemente en septiembre de 2015: "Blue Coat Public Services Intermediate CA", firmada por Symantec. (Hasta ahora, ningún certificado firmado por esta CA ha llegado a los registros de CT o Censys).

Pensé que sería una buena ocasión para escribir cómo desconfiar explícitamente de una CA intermedia que de otro modo sería confiable en OS X. No evitará que la CA raíz entregue un nuevo intermediario a la misma organización, pero mejor que nada.

Cuando probé los pasos en el blog en Ubuntu, descargué este certificado https://crt.sh/?id=19538258 . Cuando abro el archivo .crt, lo importa al Gnome Keyring, pero luego no pude encontrar una manera de "desconfiar" del certificado después de importarlo.

Rafael
fuente

Respuestas:

8

Para complicar las cosas, Linux tiene más de una biblioteca para trabajar con certificados.

Si está utilizando el NSS de Mozilla, puede desconfiar activamente (su terminología) de un certificado utilizando la opción de certutil-t trustargs :

$ certutil -d <path to directory containing database> -M -t p -n "Blue Coat Public Services Intermediate CA"

Para Firefox, <path to directory containing database>generalmente es ~/.mozilla/firefox/<???>.profiledonde <???>hay algunos personajes de aspecto aleatorio. (certutil está, por ejemplo, en el paquete libnss3-tools de ubuntu)

El desglose es el siguiente:

-M para modificar la base de datos

-t p para establecer la confianza a Prohibido

-n para llevar a cabo la operación en el certificado nombrado

Incluso dentro de NSS, no todas las aplicaciones comparten la misma base de datos; entonces puede que tenga que repetir este proceso. Por ejemplo, para hacer lo mismo con Chrome, cambie -d <path>a -d sql:.pki/nssdb/.

$ certutil -d sql:.pki/nssdb/ -M -t p -n "Blue Coat Public Services Intermediate CA"

Sin embargo, no todas las aplicaciones usan NSS, por lo que esta no es una solución completa. Por ejemplo, no creo que sea posible hacer esto con la biblioteca OpenSSL.

Como consecuencia, cualquier aplicación que use OpenSSL para proporcionar la construcción de su cadena de certificados (TLS, IPSec, etc.) confiaría en una cadena con un certificado Blue Coat y no hay nada que pueda hacer al respecto, salvo eliminar la CA raíz que lo firmó su tienda de anclaje de confianza (lo cual sería una tontería teniendo en cuenta que es una Symantec Root CA ya que terminaría desconfiando de la mitad de Internet), mientras que las aplicaciones que dependen de NSS se pueden configurar de manera más granular para desconfiar de cualquier cadena que tenga el certificado Blue Coat dentro de ella .

Por ejemplo, creo que OpenVPN usa OpenSSL como su biblioteca para certificados, por lo tanto, hermano mayor podría estar escuchando su tráfico de OpenVPN sin su conocimiento si se está conectando a un proveedor de VPN comercial que usa OpenVPN. Si está realmente preocupado por eso, compruebe quién es la CA raíz de su proveedor de VPN comercial: si es Symantec / Verisign, ¿tal vez sea hora de deshacerse de ellos por otra persona?

Tenga en cuenta que SSH no usa certificados X509, por lo tanto, puede conectarse y hacer un túnel usando SSH sin preocuparse por los ataques Blue Coat MITM.

garethTheRed
fuente
Actualicé la pregunta para indicar que cuando hice doble clic en el certificado, se importó al llavero gnome. Logré encontrar una manera de importarlo a Firefox en mi respuesta a continuación.
raphael
Para OpenSSL, ¿eliminar el certificado no sería lo mismo que desconfiar de él? Solo puede validar certs que conoce después de todo.
Bratchley
1
@Bratchley: ¿Qué sucede si se envió el certificado sospechoso (como debería ser) como parte del apretón de manos de TLS? Simplemente sería de confianza, a menos que haya una manera (como lo hay con Mozilla NSS, Windows y OS-X) para insistir en que siempre se desconfía.
garethTheRed
@garethTheRed Puede que me falte algo, pero si la biblioteca requiere que el certificado sea validado, ¿no resolvería el problema haciendo una CRL o eliminando la CA raíz de confianza? Ya se trate de certificados de cliente o servidor, aún debe requerir validación.
Bratchley
1
Si. Bluecoat recibió un certificado de CA de Verisign para su uso en dispositivos de hombre en el medio. El OP pregunta cómo desconfiar de este certificado. Entonces, se trata de desconfiar de un certificado subordinado que la CA emisora ​​superior (Root en este caso) no revocará, cuando, como usted dice, no desea desconfiar de la raíz (Verisign).
garethTheRed
0

Todavía no puedo comentar, así que tendré que comentar aquí que en Ubuntu Gnome 15.10, cuando uso el enfoque de @ garethTheRed, obtengo:

~$ certutil -d ~/.mozilla/firefox/<directory>.default -M -t p -n "Blue Coat Public Services Intermediate CA" 
certutil: could not find certificate named "Blue Coat Public Services Intermediate CA": SEC_ERROR_BAD_DATABASE: security library: bad database.

~$ certutil -d sql:.pki/nssdb/ -M -t p -n "Blue Coat Public Services Intermediate CA"
certutil: could not find certificate named "Blue Coat Public Services Intermediate CA": SEC_ERROR_UNRECOGNIZED_OID: Unrecognized Object Identifier.

"Blue Coat Systems, Inc." tampoco funciona.

(Este es el certificado que importé: https://crt.sh/?id=19538258 )

Diagon
fuente
¿Descargó e importó el certificado primero?
raphael
Sí, importé este: crt.sh/?id=19538258 . (¡Parece que puedo comentar ahora! :)
Diagon
Creo que solo puedes comentar tu propia respuesta. Aún no he probado el procedimiento.
raphael
mira mi respuesta a continuación
raphael
@raphael - Intenté editar a continuación, haciéndole saber que: Si bien el enlace de arriba describe "-t p" como "prohibido (desconfiado explícitamente)", la página de manual de Ubuntu 15.10 lo describe como "p - Par válido". Espero que no hayas hecho lo incorrecto.
Diagon