Estoy trabajando en un proyecto favorito que (eventualmente, cuando esté hecho) permita transferencias seguras de archivos (hay más que solo eso, pero el resto no es particularmente relevante). Me gustaría usar la biblioteca OpenSSL, ya que parece ser la biblioteca de criptografía gratuita más completa (y necesito soporte para encriptación simétrica básica y hash, además de SSL/TLS).SSL/TLS sin certificados
Estoy buscando implementar un esquema de seguridad similar a SSH. Básicamente, un usuario se conecta a mi computadora con TLSv1 (SSLv3.1). Me gustaría que la conexión tenga éxito independientemente de la seguridad. Luego, deseo poder inspeccionar la clave pública (no un certificado completo) que el usuario usó. Esa clave se compararía con claves públicas conocidas, y si coincide, el usuario podría acceder a un determinado conjunto de comandos. Si no coincide, el usuario tendría la opción de usar la conexión para solicitar que se agregue su clave pública a mi colección, pero aparte de eso no podría acceder a mis servicios.
No tengo ninguna necesidad particular de certificados aquí. Sería mucho más simple para mí si pudiera omitir todos los detalles del certificado y trabajar solo con las claves de cifrado sin formato. Esto se debe a que este modelo sigue un modelo de confianza en la web, no el modelo jerárquico utilizado por la mayoría de las conexiones SSL/TLS, por lo que no necesito CA ni certificados firmados.
Desafortunadamente, la documentación de la mayoría de OpenSSL es, bueno, inexistente. Todos los artículos relevantes que encuentro parecen estar ocupados con la configuración de una conexión SSL/TLS "estándar", donde el certificado del servidor se verifica hasta un conjunto de certificados raíz. Esto puede ser útil, pero es difícil para mí descubrir cómo poner en marcha estas conexiones SSL no tradicionales.
¿Alguien puede sugerir algún artículo o documentación que pueda ayudarme a encontrar la manera de lograrlo?
(El uso de OpenSSL no está escrito en piedra, y podría cambiar a otra biblioteca si proporciona una mejor manera de lograr esto, así como hash [SHA-512] y encriptación simétrica [AES]. m con el objetivo de apuntar a Linux, pero estaría bien si el producto final fuera portátil para Windows para que mis amigos también lo puedan usar).
Comparar una clave pública con una lista de claves públicas es esencialmente usar una contraseña, que anula la PKI completa de https y ssl. La sugerencia de crear y usar certificados autofirmados es buena si controla tanto el cliente como el software del servidor (para que pueda configurar la relación de confianza). –
@AdamLiss, no, no es lo mismo que la contraseña: el usuario nunca tiene que enviar la clave privada, mientras que el usuario debería enviar la contraseña. (Y comparar certificados con firma automática en una lista es más o menos lo mismo que comparar sus claves públicas). – Bruno
Aunque no estoy usando la PKI. La idea es que si eres mi "amigo" (tengo tu clave pública/certificado), puedes descargar los archivos (que especifico) de los archivos PLUS de mi computadora que puedo descargar de MIS amigos. El problema es que no se puede ver de dónde vienen los archivos (es decir, si A y B son amigos, B y C son amigos, A puede descargar de C a B, pero no sabe nada de C) . Al menos, esa es la idea en pocas palabras. [OneSwarm] (http://www.oneswarm.org/) me inspiró para este proyecto. – Ethan