¿Qué problema habría con una clave privada abierta para que la usen los desarrolladores?

0

Siempre me resulta difícil crear una nueva clave para el desarrollo y estaba pensando en hacer algo así para mí y para ayudar a otros desarrolladores:

  1. Registrar un dominio como fakesite.com
  2. Obtenga un certificado SSL de comodín
  3. Hacer que tanto el certificado como los archivos de clave privada estén disponibles para el público
  4. Pruebe mis sitios localmente agregando entradas a los archivos de mi host para lo que quiera probar (es decir, api.fakesite.com, www.fakesite.com, etc.) que apunta a 127.0.0.1 o a mi IP en mi local red y utilizando el certificado y la clave privada disponibles públicamente.

fakesite.com enviaría todos los subdominios a una página en el sitio web principal, lo que explicaría para qué sirve. El certificado real y la clave privada se pondrían a disposición en otros lugares, como en un repositorio de github.

Los únicos problemas que podría pensar serían

1) El atacante puede realizar un ataque MITM al redireccionar su DNS a su sitio web, lo cual puede hacer que se vea seguro usando la 'clave privada' disponible públicamente, y engañarlo para que navegue a una página web como 'citibank.fakesite.com 'e ingresando su información.

2) Como desarrollador, escribo mal una URL y envié el tráfico a apu.fakesite.com, que se está utilizando como anteriormente para que puedan capturar el tráfico que quería enviar a mi computadora local

En realidad, me parece más seguro para mí como desarrollador que crear un certificado autofirmado con herramientas disponibles públicamente y tener la llave en mi disco duro para que las pueda usar. Si alguien consiguió eso, podrían falsificar cualquier sitio web para me porque tengo que confiar en ello, ¿no?

Al usar un lugar como el de letencrypt para la autoridad, pueden decir que mi certificado / clave solo es válido para ese dominio, que solo debe usarse para pruebas y desarrollo locales.

¿Hay problemas en los que no estoy pensando o es el número 1 lo suficientemente probable como para que esto sea una mala idea?

    
pregunta Jason Goemaat 09.09.2018 - 06:04
fuente

1 respuesta

2

Tengo la sensación de que estás tratando de abordar el problema que tienes desde el extremo equivocado:

  

Siempre me cuesta crear una nueva clave para el desarrollo ...

No estoy seguro de lo que estás haciendo, lo que causa mucho dolor, pero si estás siguiendo los mismos pasos una y otra vez, podría ser realmente útil encontrar una forma de automatizar estos pasos por ti mismo.

  

En realidad, me parece más seguro para mí como desarrollador que crear un certificado autofirmado con herramientas disponibles públicamente y tener la llave en mi disco duro para que las pueda usar. Si alguien consiguió eso, podrían falsificar cualquier sitio web para mí porque tengo que confiar en él, ¿no?

Si interpreto esto correctamente, está creando un certificado de servidor autofirmado con restricciones básicas CA verdadero (es decir, este certificado puede usarse para emitir certificados). Es correcto que se pueda usar para crear más certificado y, por lo tanto, el acceso al certificado y su clave se pueden usar para administrar todos los sitios, siempre que haya importado este certificado como CA confiable (autoridad de certificación) en lugar de un certificado de servidor de confianza. Tenga en cuenta que solo agregar una excepción una vez que el navegador se queja no agregará este certificado como autoridad de certificación.

También significaría que el atacante debe tener acceso a su sistema en primer lugar, en cuyo caso podría hacer más daño. Sin embargo, este problema en particular se puede mitigar fácilmente:

  • La mayoría de los navegadores (¿todos?) en realidad pueden importar un certificado de servidor autofirmado que tiene restricciones básicas CA falso. Sin embargo, existen herramientas que no pueden lidiar con esto y esperan que CA sea cierto en un certificado autofirmado.
  • Uno podría crear una CA con su propia clave privada, dejar que emita algunos certificados de hoja (restricciones básicas CA falsas) con otra clave privada y luego desechar la clave privada de la CA. La CA aún puede importarse como confiable en el navegador para que todos los certificados emitidos por esta CA también sean confiables. Como la clave privada de la CA se elimina, no se pueden crear más certificados.
  

fakesite.com enviaría todos los subdominios a una página en el sitio web principal, lo que explicaría para qué sirve. El certificado real y la clave privada se pondrían a disposición en otros lugares, como en un repositorio de github.

No es una buena idea usar un dominio disponible públicamente para esto. El problema es que es inseguro de manera predeterminada, es decir, el navegador resolverá el dominio e intentará conectarse a él y no se detectarán ataques de personas en el medio al dominio ya que todos conocen la clave privada para montar ataques invisibles. Y luego el atacante podría hacer los ataques que ya has descrito y tal vez más.

Afortunadamente, la CA pública que ha emitido el certificado revocaría el certificado de todos modos si la clave privada se conociera públicamente y, por lo tanto, esta idea no funcionaría (siempre que los navegadores verifiquen la revocación, lo que muchos no lo hacen o no lo hacen). correctamente).

Pero la idea general podría modificarse para ser más segura. Si uno simplemente usa un dominio que nunca existirá públicamente, un navegador solo puede conectarse al dominio si el sistema está específicamente configurado para esto. RFC 2606 define algunos dominios de nivel superior que pueden usarse para esto, es decir, .example , .test , .invalid y .localhost . Al usar cualquiera de estos dominios de nivel superior, un atacante solo podría dañar los sistemas de desarrolladores que están configurados específicamente para resolver dichos dominios y que han importado explícitamente este certificado como un certificado de servidor confiable, en lugar de poder dañar sistemas arbitrarios.

    
respondido por el Steffen Ullrich 09.09.2018 - 07:36
fuente

Lea otras preguntas en las etiquetas