Pergunta

Estou testando o Synapse e gostaria de saber como posso estabelecer uma conexão segura. Percebi que ele suporta SSL, mas não tenho certeza se atende às minhas necessidades. Não tenho um certificado da CA. Eu só quero criptografar todos os dados entre meu programa servidor e o programa cliente. Claro, posso criptografar os dados sozinho antes de enviar. Mas se SSL pode criptografar os dados, talvez eu possa apenas usá-lo. Pelo que eu sei, SSL é para "criptografia" e "autenticação". O que eu preciso é apenas de "criptografia". É possível com o Synapse?

< PaulUPDATE:

Obrigado pela ajuda de daemon_x e do autor de Synapse, Lukas Gebauer, acho que finalmente consegui fazer funcionar. Aqui está o que eu fiz:

Lado do servidor :

1) Usa ssl_openssl em sua unidade e coloca 'libeay32.dll' e 'ssleay32.dll' no mesmo diretório do arquivo exe

2) Depois que uma conexão for aceita, adicione as seguintes linhas de código para o soquete recém-criado.

fclient.SSLAcceptConnection;

Lado do cliente :

1) Usa ssl_openssl em sua unidade e coloca 'libeay32.dll' e 'ssleay32.dll' no mesmo diretório do arquivo exe

2) Após conectar ao servidor, adicione a seguinte linha.

fclient.SSLDoConnect;

Se nenhum erro ocorreu, a conexão está segura agora. Mas quando você executa seu código, conforme dito no documento da Synapse, você pode notar que o SSLAcceptConnection demora um pouco para retornar. Portanto, se você quiser acelerar as coisas, é melhor criar um arquivo de certificado e um arquivo de chave privada antecipadamente. E adicione o seguinte código antes de SSLAcceptConnection

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

Se você não tiver um certificado e uma chave privada, consulte "CreateSelfSignedCert" em ssl_openssl para obter um certificado autoassinado e uma chave privada. Você pode salvar, por WriteStrToStream, por exemplo, FCertificate e FPrivatekey em arquivos e usá-los posteriormente.

Foi útil?

Solução

Sim, é; você pode usar um dos os plug-ins fornecidos com o Synapse. Como também é mencionado lá, o melhor é usar ssl_openssl.pas . Se decidir seguir este, você precisará, exceto Sysapse e também o Biblioteca OpenSSL . O autor recomenda OpenSSL 0.9.7 , mas como ele disse em nosso fórum parece funcionar também com OpenSSL 1.0.0d.

Observe que se você estiver usando o D2009 ou superior, precisará de um suporte Unicode, que não é totalmente compatível na versão. Faça download da versão mais recente .

O exemplo de código a seguir recebe os primeiros 1024 bytes como resposta ao método HTTP GET de um site seguro usando criptografia SSL. Usei para ele OpenSSL 0.9.8h com a versão mais recente do Synapse . Observe que você precisa colocar libssl32.dll e libeay32.dll do pacote OpenSSL em seu diretório de saída para que funcione corretamente. Vamos ter um formulário com um botão e um memorando onde recebemos um 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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top