2010-01-09 24 views
7

Como se describe aquí http://www.ddj.com/cpp/184401688código compilable C++ para implementar un cliente SLL/TLS segura usando MS SSPI

no tengo tiempo para escribir esto desde el principio.

preguntado y no responde https://stackoverflow.com/questions/434961/implementing-ssl

la pregunta es:

Busco alguna compilables trabajo código fuente que implementa MS SSPI (como se alude en el hilo anterior), de procedimiento no OOP preferido.

He mirado en la muestra de proyectos de código aquí:

http://www.codeproject.com/KB/IP/sslclasses.aspx

Pero esto es C# programación orientada a objetos. Convertir esto a código C++ no es trivial.

OpenSSL

llamadas SChannel siguen las normas API GSS. Hay, por supuesto, algunas alternativas: OpenSSL, por ejemplo. Este paquete es una implementación completa y exhaustiva del protocolo y para alguien muy familiarizado con UNIX es, sin duda, la mejor opción. El paquete se orientó originalmente a la comunidad UNIX y para compilarlo se basa en el tiempo de ejecución de Perl, por lo que se requiere cierta curva de aprendizaje para los desarrolladores de Windows que nunca trabajaron con sistemas de tipo UNIX.

Aparte de eso, OpenSLL hace algunas cosas muy no estándar

Nikolai, Habiendo contibuted una gran cantidad de código fuente compilables (www.coastrd.com) Tenía la esperanza de encontrar a alguien dispuesto a hacer el mismo.

+1

Usted no encontrará respuesta aquí ... tal vez solo una respuesta de broma con código para escribir una secuencia codificada de ssl de ceros a/dev/null – Frunsi

+1

¿Cuál es la pregunta? –

+1

Bump, atrapó el segundo voto negativo. Por favor haz una mejor pregunta. No quieres OpenSSL, eso está bien. Luego, usa MS SSPI. O escriba su propia implementación de SSL/TLS. – Frunsi

Respuesta

22

Este SSPI SChannel SMTPS ejemplo debe compilar y ejecutar en Visual Studio 2008 como es

http://www.coastrd.com/c-schannel-smtp

SChannel es la implementación de Microsoft de la API GSS que envuelve el protocolo SSL/Protocolo TLS.

Las ventajas de la utilización de SChannel:

  • detalles morbosos están protegidos contra el promotor por el SSPI.
  • No se requiere ninguna configuración adicional para ejecutar la aplicación final:
  • SChannel es una parte integral del sistema operativo
  • En Windows ME/2000/XP/... plataformas, SChannel está instalado y configurado por defecto
  • Las llamadas SChannel siguen los estándares GSS API.
  • No es necesario para crear/instalar cualquier certificado
  • hay una tercera de DLL de las partes (1 MB o más grande) para enviar e instalar

El código debe producir una sesión que tiene este aspecto:

----- SSPI inicializado
----- WinSock ya iniciada
Credenciales ----- ----- inicializado
connectd Para servidor
70 bytes de da apretón de manos ta envió
974 bytes de datos de diálogo recibido
182 bytes de datos enviados apretón de manos
43 bytes de datos de diálogo recibido
apretón de manos fue un éxito
----- cliente realiza apretón de manos
credenciales del servidor ----- autenticado

asunto del servidor: C = US, S = California, L = Mountain View, O = Google Inc, CN = smtp.gmail.com
servidor emisor: C = ZA, S = Western Cape, L = Cabo Ciudad, O = Thawte Consulting cc, OU = División de Servicios de Certificación, CN = Thawte Premium Server CA, E = prem [email protected]

cadena de certificados ----- ----- Se muestra
servidor de certificados verificado
----- contexto certificado de servidor lanzado

Protocolo: TLS1
Cipher : RC4
intensidad de cifrado: 128
hash: MD5 Hash
fuerza : 128
El intercambio de claves RSA
El intercambio de claves s trength: 1024
----- conexión segura Info
64 bytes de datos de la aplicación (cifradas) recibieron
datos descifrados: 43 bytes
220 mx.google.com ESMTP 6sm17740567yxg.66

Envío de 7 bytes de texto llano:
EHLO

28 bytes de datos encriptados enviados
169 bytes de datos de la aplicación (cifradas) recibieron
datos descifrados: 148 bytes
250-mx.google. com a su servicio, [22.33.111.222]
250 TAMAÑO 35651584
250-8BITMIME
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250 PIPELINING

Envío de 7 bytes de texto llano:
QUIT

28 bytes de datos encriptados enviados
69 bytes de datos de la aplicación (cifradas) recibidas
datos descifrados: 48 bytes
221 2.0.0 conexión de cierre 6sm17740567yxg.66

----- SMTP session Complete
Envío Cerrar cuando haya
23 bytes de datos de entrada en comunicación enviado
----- Desconectado del servidor
----- BEGIN Cleanup
----- ----- Todo Hecho

+0

Cómo enviar archivos de gran tamaño con Schannel. lo intentamos, pero si los datos aumentan más de 16432, falla –

5

Repita después de mí: "Quiero usar OpenSSL".

Este problema es demasiado serio y demasiado fácil de arruinar para que funcione cada vez que quiera resolverlo. Si tiene un problema con OpenSSL, intente solucionarlo mediante el diálogo y los parches para OpenSSL.

(Nadie es inmune a atornillar hacia arriba, ni siquiera Microsoft, o de hecho, OpenSSL. Usar algo cuya fuente puede revisar y lo que es parcheado cuando hay problemas. Utilice OpenSSL.)

+2

errr No, gracias. –

+3

Si está pegado a Windows, seguramente debe tener una cuenta de MSDN y/o contrato de desarrollo. Si es así, parece que este es exactamente el tipo de pregunta que pagamos a Microsoft para responder. –

+0

Casi, este es el tipo de pregunta que a alguien que realmente haya desarrollado una * solución * probablemente le encantaría responder. Vea mis comentarios de OpenSLL arriba –

0

¿Cuánto costaría estarás pagando por ese código fuente de trabajo compilable? ¿O esperabas que alguien te lo diera? Los chicos de OpenSSL ya lo hicieron. Es feo, pero el precio es correcto.

+0

ver comentario arriba –

+0

Mi código ya está disponible. Es el mismo precio, pero espero que lo encuentres menos feo. –

5

Tal vez this link es un buen punto de partida. Contiene código de ejemplo que funciona realmente usando MS SSPI (aunque parece muy específico de MSVC, pero está bien, sus ventanas solo de todos modos). Simplemente ignorar los ejemplos de OpenSSL ;-)

+0

Gracias. Me olvidé de mencionar eso. Ver arriba –

+0

Bueno, entonces no puedo ayudar más aquí. Pero no debería ser demasiado difícil convertirlos en un código imperativo. – Frunsi

Cuestiones relacionadas