2011-06-13 18 views
9

Estoy probando Synapse y quiero saber cómo puedo establecer una conexión segura. Me di cuenta de que es compatible con SSL, pero no estoy seguro si se adapta a mis necesidades. No tengo un certificado de CA. Solo quiero cifrar todos los datos entre mi programa de servidor y el programa de cliente. Claro, puedo encriptar los datos yo mismo antes de enviarlos. Pero si SSL puede encriptar los datos, tal vez solo pueda usarlo. Por lo que sé, SSL es para "cifrado" y "autenticación". Lo que necesito es solo "encriptación". ¿Es posible con Synapse?¿Cómo establecer una conexión segura mediante el uso de Synapse?

ACTUALIZACIÓN:

Gracias por ayudar a daemon_x y el autor de la sinapsis, Lukas Gebauer, creo que finalmente hacer que funcione. Aquí son lo que yo hice:

lado del servidor:

1) Usos ssl_openssl en su unidad y poner 'libeay32.dll' y 'ssleay32.dll' en el mismo directorio del archivo exe

2) Después de que se acepte una conexión, agregue las siguientes líneas de código para el socket recién creado.

fclient.SSLAcceptConnection; 

lado del cliente:

1) Usos ssl_openssl en su unidad y poner 'libeay32.dll' y 'ssleay32.dll' en el mismo directorio del archivo exe

2) Después de conectarlo al servidor, agregue la siguiente línea.

fclient.SSLDoConnect; 

Si no se produjo ningún error, la conexión es segura ahora. Pero cuando ejecuta su código, como se dice en el documento de Synapse, puede observar que SSLAcceptConnection tarda un tiempo en regresar. Entonces, si desea acelerar las cosas, es mejor que cree un archivo de certificado y un archivo de clave privada por adelantado. Y añadir siguiente código antes de SSLAcceptConnection

fclient.SSL.CertificateFile := 'bs-cert'; 
    fclient.SSL.PrivateKeyFile := 'bs-privatekey'; 

Si usted no tiene un certificado y una clave privada, consulte "CreateSelfSignedCert" en ssl_openssl para la obtención de un certificado de firma y la clave privada. Puede guardar, mediante WriteStrToStream por ejemplo, FCertificate y FPrivatekey en archivos y usarlos más adelante.

Respuesta

6

Sí lo es; puede usar uno de the plugins enviado con Synapse. Como también se menciona allí, lo mejor es usar el ssl_openssl.pas. Si decide seguir este, necesitará Sysapse también el OpenSSL library. El autor recomienda OpenSSL 0.9.7, pero como dijo en nuestro foro local, parece funcionar también con OpenSSL 1.0.0d.

Nota: si está usando D2009, necesitará una compatibilidad con Unicode que no es completamente compatible con la versión. Descargue el latest version en su lugar.

El siguiente código de ejemplo recibe primeros 1024 bytes como respuesta al método HTTP GET de un sitio web seguro que utiliza el cifrado SSL. Lo he usado OpenSSL 0.9.8h con el latest version of Synapse. Tenga en cuenta que necesita poner libssl32.dll y libeay32.dll del paquete OpenSSL en su directorio de salida para que funcione correctamente. Tengamos un formulario con un botón y nota donde recibamos un resultado.

uses blcksock, synautil, synsock, ssl_openssl, ssl_openssl_lib; 

procedure TForm1.Button1Click(Sender: TObject); 
var Socket: TTCPBlockSocket; 

begin 
    Socket := TTCPBlockSocket.Create; 

    try 
    Socket.Connect('www.yousendit.com', '443'); // connect to the host 
    Socket.SSLDoConnect; // start SSL connection; only server has a certificate 

    if Socket.LastError = 0 then 
     begin 
     Socket.SendString('GET' + CRLF); // request GET method 
     Memo1.Text := Socket.RecvBufferStr(1024, 1000); // receive 1024 bytes 
     end; 

    finally 
    Socket.Free; 
    end; 
end; 
+0

Agradezco su ayuda. La mayor confusión para mí es que no sé cómo puedo usar el canal encriptado cuando no tengo certificado. Intenté invocar "SSLAcceptConnection" después de aceptar una conexión en el servidor. Y, invocado "SSLDoConnect" en el lado del cliente después de conectado al servidor. Ellos "parecen" funcionar. Pero, ¿dónde puedo configurar la contraseña? Intenté "SSL.Password" pero parece que es para descifrar el certificado. La conexión aún se establece aunque la contraseña sea diferente. – trudger

+0

@trudger Puede crear certificados autofirmados. – Harriv

+0

¿Hay algún componente/código que pueda integrar a mi programa para generar el certificado? Creo que es un poco complicado para los usuarios generar el certificado ellos mismos. – trudger

Cuestiones relacionadas