Как установить безопасное соединение с помощью Synapse? - PullRequest
9 голосов
/ 13 июня 2011

Я тестирую Synapse и хочу знать, как мне установить безопасное соединение.Я заметил, что он поддерживает SSL, но я не уверен, соответствует ли он моим потребностям.У меня нет сертификата от CA.Я просто хочу зашифровать все данные между моей серверной программой и клиентской программой.Конечно, я могу зашифровать данные самостоятельно перед отправкой.Но если SSL может зашифровать данные, возможно, я смогу просто использовать его.Насколько я знаю, SSL предназначен для «шифрования» и «аутентификации».Что мне нужно, это только «шифрование».Это возможно с Synapse?

ОБНОВЛЕНИЕ:

Спасибо за помощь от daemon_x и автора Synapse Лукаса Гебауэра, я думаю, что наконец-то все заработало.Вот что я сделал:

На стороне сервера :

1) Использует ssl_openssl в вашем устройстве и помещает «libeay32.dll» и «ssleay32.dll» в одно и то жекаталог исполняемого файла

2) После того, как соединение принято, добавьте следующие строки кода для вновь созданного сокета.

fclient.SSLAcceptConnection;

Клиентская сторона :

1) Использует ssl_openssl в вашем устройстве и помещает 'libeay32.dll' и 'ssleay32.dll' в один и тот же каталог exe-файла

2) После подключения к серверу добавьте следующую строку.

fclient.SSLDoConnect;

Если ошибок не произошло, соединение теперь безопасно.Но когда вы запускаете свой код, как сказано в документе Synapse, вы можете заметить, что для возврата SSLAcceptConnection требуется некоторое время.Поэтому, если вы хотите ускорить процесс, лучше заранее создать файл сертификата и файл закрытого ключа.И добавьте следующий код перед SSLAcceptConnection

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

Если у вас нет сертификата и закрытого ключа, обратитесь к «CreateSelfSignedCert» в ssl_openssl для получения самозаверяющего сертификата и закрытого ключа.Вы можете сохранить с помощью WriteStrToStream, например, FCertificate и FPrivatekey в файлы и использовать их позже.

1 Ответ

6 голосов
/ 14 июня 2011

Да, это так; Вы можете использовать один из плагинов , поставляемых с Synapse. Как там также упоминается, лучше всего использовать ssl_openssl.pas . Если вы решите следовать этому, вам понадобится, кроме Sysapse и OpenSSL library . Автор рекомендует OpenSSL 0.9.7 , но, как он сказал на нашем местном форуме, похоже, он работает и с OpenSSL 1.0.0d.

Обратите внимание: если вы используете D2009 up, вам потребуется поддержка Unicode, которая не полностью поддерживается в версии. Загрузите последнюю версию .

Следующий пример кода получает первые 1024 байта в ответ на метод HTTP GET защищенного веб-сайта с использованием шифрования SSL. Я использовал для этого OpenSSL 0.9.8h с последней версией Synapse . Обратите внимание, что вам нужно поместить libssl32.dll и libeay32.dll из пакета OpenSSL в выходной каталог, чтобы он работал правильно. Давайте создадим форму с кнопкой и напоминанием, где мы получим результат.

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;
...