Seguridad HTTP. Mecanismos para securizar el mundo HTTP
¿Qué es HSTS?
Encabezado que fuerza a los navegadores a utilizar HTTPs para conectarse a un sitio web
¿Qué es CORS?
CORS (Cross-Origin Resource Sharing) es un mecanismo de seguridad que permite a un navegador web solicitar recursos de un origen diferente al del sitio web que se está visitando.
Esas cabeceras hacen que, esos sitios web a los que el navagador ha solicitado algún recurso, y que son distintos al de origen, le permitan o no, dependiendo del origen, acceder.
Para ello el navegador pregunta si podría acceder con el verbo http “OPTION” y le permite mediante la cabecera CORS, ya puede solicitar el recurso con “GET” o el verbo que sea, dependiendo de lo que le permita hacer en la respuesta del “OPTION”.
En cuanto a SSL en JAVA, ¿en qué fichero por defecto, se encuentra el almacén de certificados de las autoridades de confianza?
En el fichero jre/lib/security/CaCerts o JAVA_HOME/jre/lib/security/cacerts, se encuentran los certificados (parte pública) de las CA (autoridades de confianza). Este fichero viene por defecto con la JDK que se haya instalado y tiene una contraseña para entrar: changeit
¿Qué property o variable de entorno apunta al archivo de almacén de las autoridades de confianza?
javax.net.ssl.trustStore, que apunta al fichero .jks (con el nombre que tenga)
¿Qué ocurre si el servidor no tiene en el trustStore ni en el CaCert por defecto la CA del certificado del emisor?
Conexión rechazada.
¿Qué property o variable de entorno apunta al archivo de almacén de claves?
javax.net.ssl.KeyStore, que apunta al archivo .jks (con el nombre que tenga)
Diferencia entre trustStore y KeyStore
¿Qué es CSP?
Content Security Policy.
Este mecanismo protege particularmente de los ataques XSS (Cross-Site Scripting). El servidor mediante esta cabecera en la primera petición, le indica al navegador/cliente de qué dominios se tiene que fiar al solicitar un script (por ejemplo), dado que desde otro dominio malicioso le podrían facilitar otro script malicioso.
Formato de contenedor estándar en BASE64 que puede contener el certificado, la clave privada (en otro archivo aislado del certificado) y la cadena de certificados intermedia en un solo archivo, delimitando por cabeceras claras, facilitando su lectura por sistemas como servidores web Apache/Nginx.
.PEM que puede ser .pem; .key; .crt; .cer; .clr, etc
(En BASE64, es decir, cadena de texto ASCII imprimible)
Formato de contenedor de certificado digital, basado en el estándar X.509, utilizado para verificar la identidad de un servidor, sitio web o usuario, y generalmente en formato binario o a veces codificado en texto, que contiene únicamente la parte pública del certificado
.CER
Generalmente en formato binario (DER) o a veces codificado en texto (Base64), parecido a los archivos .crt. . No incluye la clave privada.
Formato de contenedor de certificado digital con su parte pública, codificado en formato binario, utilizado principalmente en plataformas Java
.DER o .CER
.DER (Distinguished Encoding Rules)
Nota: La principal diferencia entre .der y .cer radica en la convención de nomenclatura, no necesariamente en el contenido. Ambos suelen contener certificados digitales X.509, pero .der indica casi siempre codificación binaria, mientras que .cer puede ser binario (DER) o texto (PEM), siendo .der más común en plataformas Java.
Diferencia entre .CER y .CRT
Los archivos .CRT suelen estar en formato PEM (BASE64) y se utilizan en sistemas Unix/Linux, mientras que los archivos .CER suelen estar en formato DER (Binario) o PEM (BASE64) y se asocian a sistemas Windows. Funcionalmente, sirven para lo mismo.
¿Qué formatos de contenedor de certificados contienen certificados digitales X.509 que incluyen la clave pública, información del titular y la firma de una autoridad certificadora, pese a que tengan distinto formato de codificación?
.CER (Binario o BASE65)
.DER (Binario)
.CRT (BASE65)
Formato de contenedor que contiene solo el certificado y la cadena de certificación (CA intermedia), pero nunca la clave privada (en ASCII)
.p7b o .p7c (pkcs#7)
A la hora de exportar un .pem, ¿se sabe qué se va a exportar realmente?
No, porque se puede exportar lo que se quiera, y hasta que entremos no se sabe lo que es, con lo cual, se puede especificar, indicando la extensión de lo que se va a exportar realmente. Por ejemplo:
.cer o .crt si es un certificado en BASE64 o texto ASCII; .key si es una clave, etc
Formato estándar para guardar un certificado digital y su clave privada en un solo archivo encriptado
.p12 y .pfx (PKCS#12)
En qué formato se exportan los certificados .p12 o .pfx
Los archivos .p12 y .pfx se exportan en formato binario PKCS#12, el cual está diseñado para almacenar tanto el certificado digital (clave pública) como su clave privada asociada en un único archivo protegido por contraseña
(con PEM, la clave privada y el certificado suelen estar en archivos separados)
Diferencia entre .p12 y .pfx
.pfx es común en Windows (Internet Explorer/Edge) y .p12 en Firefox.
Campos importantes de un certificado
● Versión
● Número de serie
● Id del algoritmo usado por la CA para firmar
● Emisor: CA que lo emite
● Validez
● Sujeto: para quién se emite
● Algoritmo de la clave pública del sujeto
● Clave pública del sujeto
● Firma digital: creada por la CA
¿Qué pasos existen en el proceso de verificación de un certificado de servidor?
¿Qué opciones existen para comprobar el estado de revocación de un certificado?
● OCSP: protocolo binario online en base al número de serie
● CRL: se descarga la lista de certificados revocados de la CA
¿Qué dos soluciones existen para que un certificado pueda ser utilizado en más de un dominio?
Ambos simplifican la gestión de seguridad HTTPS.
¿Qué es necesario para abrir un canal SSL/TLS?
Tiene que existir una sesión o canal TCP abierto