entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Dudas sobre certificados ssl/tls

Hola a todos!

Tengo algunas dudas sobre certificados SSL/TLS. Encontre en Internet comandos para crear un certificado autofirmado y su clave privada. Al ingresar los comandos obtengo los siguientes archivos: clave-privada.key (es la clave privada que utiliza el servidor, la clave publica supongo que la genera Apache por ejemplo), dominio-web.csr (es necesario para crear el certificado), dominio-web.crt (es el certificado) y dominio-web.pem (contiene el certificado y la clave privada junto en un solo archivo)

Los comandos mencionados son:

1 - Creo una clave privada con una longitud de bits de 2048. Yo creo que 4096 es exageradamente seguro. ¿Debería elegir 4096?

openssl genrsa -out clave-privada.key 2048

2 - Creo una "Solicitud de Firma de Certificado" (CSR). Segun los tutoriales en Internet es necesario para crear el certificado. Utilizo sha256 en vez de sha1, pues no esta demás. Ademas en el ultimo parametro indico el dominio web para el que va a ser válido, este puede ser cualquiera. Si no agrego este parametro me hace un monton de preguntas como por ejemplo, nombre de la organización y demas preguntas. ¿Esto lo hace inseguro? ¿Es seguro contra ataques Man-In-The-Middle o cualquier otro tipo de ataque?

openssl req -new -sha256 -key clave-privada.key -out dominio-web.csr -subj '/CN=dominio-web'

3 - Creo el certificado. Utilizo sha256 en vez de sha1, pues no esta demás. A este le doy una validez de 3650 días que equivale a 10 años. El sitio web no es accesible al publico, pues va a ser una aplicación web para un negocio con varias sucursales. Por defecto la validez es de un año y yo creo que estar renovando el certificado todos los años es innecesario dada la seguridad de SSL/TLS. ¿Es esto seguro?

openssl x509 -req -sha256 -days 3650 -in dominio-web.csr -signkey clave-privada.key -out dominio-web.crt

4 - Creo el archivo en formato PEM. Creo que Apache soporta este formato.

cat dominio-web.crt clave-privada.key > dominio-web.pem

Saludos cordiales!

2 Respuestas

1voto

Leonardo-Tadei Puntos227320

Hola @pedrourday,

Intento responder a tus preguntas:

Lo que hace seguro a la transmisión usando un certificado SSL es el tamaño de la clave: 2048 es más seguro que 1024 pero muchísimo menos que 4196.

Hacer que el certificado sirva para varios dominios en vez de para uno solo no lo hace ni más ni menos seguro: lo hace usable por otros nombres de dominio.

Si te roban el certificado y es para varios dominios, te lo puede usar otro (?), pero también alguien puede hacerse pasar por el único dominio para el que está habilitado si te lo roba.

La seguridad contra ataques M-i-M no depende (casi) del certificado, sino de la red entre el cliente y el atacante. Por ejemplo si atacan mi red y cuando voy a unbanco.com.ar estoy siendo llevado a la máquina del atacante, si esa página fake tiene un certificado digital es raro que el usuario se ponga a ver quién lo emitió, etc... pero si usás un certificado autofirmado, el atacante podría poner los mismos datos que vos y firmar su propio certificado.

Lo que te garantiza un certificado es que las conexiones vayan cifradas, así que alguien sniffando la red no puede ver lo que se envía ni lo que devuelve el servidor.

No te previene contra "cualquier tipo de ataque"... es un universo enorme. No te salva de virus en la PC cliente, ni de estar filamdo el teclado para robarte contraseñas, etc.

Por último, lamentablemente da muchas más señales de alarma en un navegador moderno un certificado autofirmado que un sitio HTTP sin la S. Hay un gran negocio atrás de esto por la venta de certificados, ya que cualquiera sin ninguna validación de identidad puede comprar un certificado para cualquier nombre de dominio... y los navegadores mostrarán alegremente el candadito verde. Hay vendedores de certificados que los dan solo si validan la identidad del titular del sitio: cuestan alrededor de u$s2000.00 anuales.

Para las cosas personales, los certificados autofirmados están buenos porque te dan cifrado entre extremos gratis... y vos deberías saber reconocer el certificado que firmaste del de un impostor.

Saludos!

0voto

pedrourday comentado

Es muy util todo lo que decis. Lo que decis de la venta de certificados "truchos" no lo sabia. Si la seguridad me la ofrece el cifrado, esta perfecto para mí, pues me ahorro esos u$s2000.00 anuales y la idea de comprar uno "trucho" no me gusta.
Yo lo unico que quiero es que la conexion este cifrada.

Y por el tema de M-i-M, ya está solucionado con los comandos mencionados antes.

Hice una prueba en "localhost":

1 Cree un certificado y su clave privada para "localhost", luego configuré Apache para que los use.
2 Ingreso a https://localhost/ con Firefox y me muestra una advertencia que dice que el certificado no es de confianza; pero luego agrego una excepción, entonces Firefox acepta el certificado.
3 Elimino el certificados y su clave privada creados en 1 y vuelvo a crear otros nuevos.
4 Reinicio Apache.
5 Vuelvo a ingresar la url en el navegador y no pasa nada; pero borro la cache del navegador y me vuelve a aparecer la advertencia, pues el certificado lo tenia en cache y luego borre la cache.

Todo esto significa que si Firefox me muestra la advertencia luego de haber agregado la excepción, entonces, eso me avisa con total seguridad que la conexion esta siendo sniffeada y así puedo actuar en consecuencia.

El problema grave que debo solucionar ahora es: ¿como logro desactivar esa cache de certificados SSL? A mi me parece que el causante es, nada más y nada menos, que "guindous" XD, pues la prueba la hice sobre es SO. Tendria que probar con Linux y con otros navegadores, o capaz sea Apache el causante. No lo se.

Ademas, debería convencer a mi cliente que en la maquina en la que se vaya a usar el software, se use Linux. Me parece mucho más seguro en ese aspecto, con lo que podria instalar el certificado de manera "system wide". Y ademas, me ahorraría un monton de problemas cuando se trata de programación, pues todo lo que necesito se puede instalar con el gestor de paquetes de la distribución, sin instalar desde un archivo .exe

De todos modos, saludos y gracias!

0voto

Leonardo-Tadei comentado

Hola @pedrourday,

yo nunca hablé de certificados "truchos". Solo hago referencia a que los que venden certificados no validan la identidad del titular del dominio. Esos certificados son tan válidos, a nivel de cifrado, como cualquier otro.

La gran diferencia de comprar un certificado es que el navegador no te da una advertencia horrible. Esa advertencia espanta más a los usuarios que la falta de la S al final del HTTP.

No entiendo por qué decís "el tema de M-i-M, ya está solucionado con los comandos mencionados antes"... pero el M-i-M va por otro lado de esta conversación.

No es cierto que el hecho de que el navegador te pida volver a agregar la excepción de seguridad sea porque el certificado cambió. Te la va a volver a pedir a veces después de actualizar el navegador, cuándo venza el certificado, cuando al que hace el certificado se le ocurra desconfiar más agresivamente de los certificados autofirmados, etc.

Las cachés de los navegadores, como siempre, funcionan como se les canta: no hay manera de forzar la expiración de la caché de un certificado agregado a mano, salvo revocando el certificado.

Por último, fijate LetsEncrypt, la propuesta de la Free Software Fundation que permite generar certificados gratuitos que son reconocidos por los navegadores porque los emite una entidad de certificación válida. Con esto tenés cifrado gratis sin todo el proceso de tener que crear exepciones en el navegador.

Saludos cordiales Pedro!

0voto

pedrourday comentado

Marque la respuesta como la mejor, por mencionar LetsEncrypt. No lo conocía y creo que es la solución para mí.

Saludos!

0voto

luifrangm Puntos140

Hola Pedro, quí ejemplo SSL hay un ejemplo bastante claro de como generar certificados autofirmados y su utilización en una aplicación cliente servidor Mariadb - Java.

Saludos.

0voto

pedrourday comentado

Gracias! Pero de todos modos no uso Java para programar, me siento mucho más cómodo usando los lenguajes de Internet (HTML, CSS, JavaScript y demas) y aunque sean tecnologías web, también se pueden usar para crear aplicaciones de escritorio usando node-webkit. Además, LetsEncrypt es una alternativa muy buena y en su sitio web aparecen un montón de sponsors, de los cuales hay unos cuantos servidores web y algún que otro servidor DNS (como DynDns o No-IP, creo que dnsimple es uno de ellos) que soportan LetsEncrypt "out of the box", es decir, sin necesidad de ponerse a configurar. El tema seguridad es muy complejo y si me equivoco hay consecuencias. Por eso, cuando tenga un proyecto de software terminado y este listo para venderlo, prefiero pagar un servicio que ofrezca seguridad "out of the box". Si la seguridad del servicio falla, ya tengo a quien reclamar.

Saludos.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta