Certificados SSL

193 views
Skip to first unread message

Alejandro Martin Giraudo

unread,
Apr 13, 2018, 7:57:26 AM4/13/18
to embeb...@googlegroups.com
Hola a todos,

¿Como puede averiguar un microcontrolador que certificado SSL utiliza una pagina web?

Estoy utilizando el modulo ESP32, pero para poder ingresar a las paginas debo utilizar un navegador, fijarme que certificado utilizo y despues copiarlo en el programa del modulo. El problema es que los certificados tienen vencimiento por lo tanto debo implementar alguna manera que el modulo actualice su certificado automáticamente.

¿Existe un servidor de certificados, similar a un DNS para los nombres de la pagina web?
¿Se le puede consultar via HTTP a un server que certificado utiliza? 

Otro problema es que cuando pido información al server y este me la retorna, la llave publica del mismo me certifica el origen, pero no me asegura que otro la escuche y la entienda, debo de alguna manera indicarle que utilice una llave privada propia. ¿Alguien puede darme una idea o sugerirme bibliografia sobre como hacer esto?

Saludos,
Alejandro Giraudo.

Miguel Grassi

unread,
Apr 13, 2018, 8:15:06 AM4/13/18
to Embebidos32

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32+unsubscribe@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32+unsubscribe@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



M. Sebastián Tobar

unread,
Apr 13, 2018, 9:40:00 AM4/13/18
to embeb...@googlegroups.com
Buenos días Martín, te recomiendo que investigues sobre PKI:

Saludos
--
Sebastián
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32+unsubscribe@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32+unsubscribe@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.


--
M. Sebastián Tobar

Carlos Pantelides

unread,
Apr 13, 2018, 6:55:37 PM4/13/18
to Embebidos32
Hola Alejandro:,

Entiendo que tu microcontrolador va a hacer de cliente. Entiendo que no tenés control sobre el sitio al que estás accediendo.

De modo un tanto bruto, perdón si hay algunas desprolijidades, la idea de PKI es que en lugar de estar intercambiando claves con quien te querés comunicar, intercambias certificados, los cuales están criptográficamente firmados por "autoridades", siendo una CA lo más arriba. Lo normalcito es que un certificado este firmado por una Intermedia, que está firmado por una CA.

Teniendo los certificados firmantes, que rara vez cambian, no tenés que estar actualizando nada del servidor.

O podés hacer como estás diciendo vos, actualizando de alguna manera en el cliente, que es una forma de Pinning.


>> ¿Existe un servidor de certificados, similar a un DNS para los nombres de la pagina web?

No, la idea es justamente poder no depender.


>> Otro problema es que cuando pido información al server y este me la retorna, la llave publica del mismo me certifica el origen, pero no me asegura que otro la escuche y la entienda, debo de alguna manera indicarle que utilice una llave privada propia.

Esto no lo entiendo.



A lo que dice Alejandro de la entrada de wikipedia, agregaría

https://es.wikipedia.org/wiki/Criptograf%C3%ADa_asim%C3%A9trica
https://es.wikipedia.org/wiki/Certificado_de_clave_p%C3%BAblica

Lleva tiempo, bastante, comprender, paciencia

Pero la verdad es que no encuentro nada didáctico, pero estar{e atento a agregar algo si lo encuentro

Saludos
Charlie












¿Como puede averiguar un microcontrolador que certificado SSL utiliza una pagina web?

Asumiré que tu módulo es cliente de algo
 

Estoy utilizando el modulo ESP32, pero para poder ingresar a las paginas debo utilizar un navegador, fijarme que certificado utilizo y despues copiarlo en el programa del modulo. El problema es que los certificados tienen vencimiento por lo tanto debo implementar alguna manera que el modulo actualice su certificado automáticamente.

 


No
 
¿Se le puede consultar via HTTP a un server que certificado utiliza? 


 a. ¿Alguien puede darme una idea o sugerirme bibliografia sobre como hacer esto?



 

Saludos,
Alejandro Giraudo.

Alejandro Martin Giraudo

unread,
Apr 14, 2018, 12:32:33 PM4/14/18
to Embebidos32
Gracias Charlie.

Voy con el caso concreto:

Mi aplicación es cliente de Firebase. El cual se que utiliza el certificado GeoTrustGlobalCA, versión 3 con las peticiones de base de datos.

Según me aparece en Firefox este certificado se empezó a usar: Friday, August 4, 2017 y expira Thursday, August 2, 2018.  Me preocupa que mi aplicación deje de funcionar en agosto.

Seguramente el en momento que expire el certificado el navegador, de alguna manera encontrara el nuevo y lo utilizara correctamente, de echo lo hace con cualquier pagina web. ¿Como lo hace? Cuando descargo el navegador de internet supongo que viene con varios certificados y con esos certifiados obtiene los que necesite cuando le pido una pagina web, no me parece posible que el navegador se descargue sabiendo los certificados de todas las paginas web existentes.

Lo otro que me preocupa es que cuando le pido una base de datos a Firebase me la envia encriptada, si, pero con una llave que es pùblica (GeoTrustGlobalCA en este caso) y de la misma manera que yo la desencripto lo puede hacer cualquiera.  Osea que la llave publica sirvió para asegurarme que fue Firebase quien me envió la información pero no evita que otro también la entienda. 

En resumen, lo importante:

¿Como hago para ser yo el único que entienda la información que me envía el server?

La única que me se ocurre por ahora es montar mi server yo, encriptarlo y no decirle a nadie que método utilice. Pero esto me genera un costo de mantenimiento, cuando Firebase me da 1Giga gratis. 


Saludos,
Ale.

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es

---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.

Ezequiel Conti

unread,
Apr 14, 2018, 2:23:51 PM4/14/18
to Embebidos32
Hola Alejandro.
Respecto al vencimiento del certificado, la idea de TLS es que los certificados están firmados por una autoridad certificante. Esa firma se realiza con el certificado de la autoridad certificante y con la clave privada. La clave privada es secreta, y la guarda la autoridad certificante. Cuando hacés un handshake TLS, el servidor envía al cliente sus certificados. Estos certificados incluyen la información de quién los firmó. La idea es que el cliente (explorador web, o tu micro) tenga cargados solamente los certificados de las autoridades certificantes. Con esos certificados se puede verificar si los certificados de las páginas web están correctamente firmados como dicen. Es decir, en tu micro sólo tenés que guardar el certificado de la autoridad certificante (CA) que firma el certificado de la página a la cual accedés.
Respecto a tu pregunta sobre la clave, la encriptación es asimétrica. Esto significa que se usa una clave para encriptar y otra para desencriptar. Cuando hacés un handshake, el servidor te manda la clave para encriptar. Esa clave la puede ver cualquiera, pero sólo sirve para encriptar, no para desencriptar. La clave para desencriptar sólo la tiene el servidor. En ese handshake con esa encriptación se negocia una clave y un algoritmo de encriptación simétrica, y luego se pasa a utilizar encriptación simétrica con la clave intercambiada anteriormente.

Saludos,
Ezequiel

Carlos Pantelides

unread,
Apr 15, 2018, 6:14:19 PM4/15/18
to Embebidos32

Alejandro:




Según me aparece en Firefox este certificado se empezó a usar: Friday, August 4, 2017 y expira Thursday, August 2, 2018.  Me preocupa que mi aplicación deje de funcionar en agosto.


Para un cliente TLS normal, el cambio de certificado no hace diferencia, esa es justamente la idea, no tener que mantener claves.

Digo "normal" pues no termino de entender si lo que estás usando está completo o seriamente recortado.

Si te deja de funcionar en agosto, es por algún error en el SERVIDOR, no en el CLIENTE.

 
Seguramente el en momento que expire el certificado el navegador, de alguna manera encontrara el nuevo y lo utilizara correctamente,

Cada vez que se conecta recibe el certificado, siempre es nuevo.

 

Lo otro que me preocupa es que cuando le pido una base de datos a Firebase me la envia encriptada, si, pero con una llave que es pùblica (GeoTrustGlobalCA en este caso)


No, como dice Ezequiel luego, cada sesión tiene una clave única y secreta que se genera al inicio.

 
y de la misma manera que yo la desencripto lo puede hacer cualquiera

de ninguna manera (salvo explotación de vulnerabilidades), los dos principales motivos de TLS son AUTENTICACIÓN (en este caso del servidor frente a tu aplicación) y CONFIDENCIALIDAD/INTEGRIDAD, la información que circula es secreta y si se intentara modificar sería detectado.

 
.  Osea que la llave publica sirvió para asegurarme que fue Firebase quien me envió la información pero no evita que otro también la entienda. 

Cualquiera puede "entender" o ver el certificado enviado, de hecho cualquiera que se conecte lo va a recibir. La cadena de firmas partiendo de GeoTrustGlobalCA servirá para que tu cliente puede verificar la AUTENTICIDAD del certificado del servidor. Repitiendo un poco, a continuación se negocia una clave simétrica para hacer el grueso de la comunicación.
 

En resumen, lo importante:

¿Como hago para ser yo el único que entienda la información que me envía el server?

Ya lo tenés.

La única que me se ocurre por ahora es montar mi server yo, encriptarlo

¿No estarás mezclando el concepto de la confidencialidad de tu base almacenada con la confidencialidad de la misma en tránsito?

 
y no decirle a nadie que método utilice.

eso se llama seguridad por oscuridad, que aunque está bien que no digas a nada nadie, no podés contar como factor de seguridad. Es como el camuflaje, no te protege, sólo te oculta.
 
Pero esto me genera un costo de mantenimiento, cuando Firebase me da 1Giga gratis. 


Te recomiendo que te pongas a leer lo enviado, buscá un TLS para dummies que te resulte ameno, armá servidores con TLS y probalos, tratá de sniffear el tráfico, adulterar los certificados, poné un proxy en el medio tipo burp.

Esto sirve hasta la 11 pero si alguien te explica a la vez
https://www.slideshare.net/kellyfj/ssl-in-a-nutshell

Perdón que no te mande nada mejor, a todo lo que encuentro o le sobra información o son tipo glosarios o listas de pasos, no veo que sirva para explicarte según imagino que es lo que necesitás.

Saludos


Carlos Pantelides

unread,
Apr 16, 2018, 9:53:45 PM4/16/18
to Embebidos32
Reinterpretando tu pregunta:

>>¿Como hago para ser yo el único que entienda la información que me envía el server?

Si te referís a esta comunicación concreta, ya lo tenés con TLS. Si a lo que estás refiriendo es a la AUTENTICACIÓN del cliente frente al servidor, tenés varios caminos:

1) usar certficados de cliente frente al servidor
2) implementar control de acceso en el servidor
3) o agregar un proxy autenticador si 2) no es soportados

esto es con esta visión (poné una fuente monospace como courier si sale roto)

                                                                                                                     
                                           +-------(1) certificado de cliente ----+                                  
                                           |                                      |                                  
                                           |                                      v                                  
+------------------+    +-----------+   +-----------+   +----------------+   +------------+   +------------+   +-----------------+
|aplicación cliente| <#>|cliente tcp|<#>|cliente TLS|<#>|red y/o internet|<#>|servidor TLS|<#>|servidor tcp|<#>|servidor de datos|
+------------------+    +-----------+   +-----------+   +----------------+   +------------+   +------------+   +-----------------+
     |      |                                                                       ^            ^     ^
     |      |                                                                       #            #     |
     |      |                                                                       v            v     |
     |      |                                                                    +------------------+  |
     |       +------------------------------------(3) credenciales ------------->|proxy autenticador|  |
     |                                                                           +------------------+  |
     +-------------------------------------------(2) credenciales -------------------------------------+

                                                                        


espero te sirva

Alejandro Martin Giraudo

unread,
Apr 17, 2018, 11:12:34 AM4/17/18
to Embebidos32
Eso es lo que yo quiero: Certificados de cliente.

Utilizo un certificado para autenticare y otro para acceder a la base de datos, tal como manda google.  Ademas, para estar seguro, pienso debo tener certificados de cliente.

Genere un juego de llaves publica y privada, trate de usarlas, pero por ahora la autentificacion de google me las rechaza.

Muchas gracias, ahora tengo otra punta para seguir desenredando.

Alejandro.



El lunes, 16 de abril de 2018 22:53:51 ART, 'Carlos Pantelides' via Embebidos32 <embeb...@googlegroups.com> escribió:


Reinterpretando tu pregunta:

>>¿Como hago para ser yo el único que entienda la información que me envía el server?

Si te referís a esta comunicación concreta, ya lo tenés con TLS. Si a lo que estás refiriendo es a la AUTENTICACIÓN del cliente frente al servidor, tenés varios caminos:

1) usar certficados de cliente frente al servidor
2) implementar control de acceso en el servidor
3) o agregar un proxy autenticador si 2) no es soportados

esto es con esta visión (poné una fuente monospace como courier si sale roto)

                                                                                                                     
                                           +-------(1) certificado de cliente ----+                                  
                                           |                                      |                                  
                                           |                                      v                                  
+------------------+    +-----------+   +-----------+   +----------------+   +------------+   +------------+   +-----------------+
|aplicación cliente| <#>|cliente tcp|<#>|cliente TLS|<#>|red y/o internet|<#>|servidor TLS|<#>|servidor tcp|<#>|servidor de datos|
+------------------+    +-----------+   +-----------+   +----------------+   +------------+   +------------+   +-----------------+
     |      |                                                                       ^            ^     ^
     |      |                                                                       #            #     |
     |      |                                                                       v            v     |
     |      |                                                                    +------------------+  |
     |       +---------------------------- --------(3) credenciales ------------->|proxy autenticador|  |
Reply all
Reply to author
Forward
0 new messages