Indy TIdHTTP получить https страницу с SSL-сертификатом на стороне клиента

Я пытаюсь получить страницу https с SSL-сертификатом на стороне клиента, с помощью Indy TIdHTTP.

Код

var IdHTTP1 : TIdHTTP;
    IdSSLIOHandlerSocket : TIdSSLIOHandlerSocketOpenSSL;
begin
    try
      IdHTTP1 := TIdHTTP.Create( self );
      IdHTTP1.Request.BasicAuthentication := False;
      IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0';
      IdSSLIOHandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create( IdHTTP1 );
      IdSSLIOHandlerSocket.SSLOptions.CertFile := 'cert.pem';
      IdSSLIOHandlerSocket.SSLOptions.Method := sslvTLSv1_2;
      IdSSLIOHandlerSocket.SSLOptions.Mode:= sslmUnassigned;

      IdHTTP1.IOHandler := IdSSLIOHandlerSocket;

      writeln( IdHTTP1.Get( 'https://www.scriptjunkie.us/auth/verifycert' ) );
    finally
      IdSSLIOHandlerSocket.Free;
      IdHTTP1.Free;
    end;

Get не аутентифицируется Клиентский сертификат PEM не принимается.

Как получить URL с клиентским сертификатом?

Я использую https://www.scriptjunkie.us/auth/verifycert сайт с бесплатной клиентской стороной SSL сертифицирован. FPC 3.0.2, Indy 10.6.2.0

1 ответ

Вот рабочий код (Indy 10.6.2.0, FPC 3.0.2)

uses IdHTTP, IdSSLOpenSSL;

var IdHTTP1 : TIdHTTP;
    Id_HandlerSocket : TIdSSLIOHandlerSocketOpenSSL;
    s : string;

begin
    try
      IdHTTP1 := TIdHTTP.Create( self );
      IdHTTP1.Request.BasicAuthentication := False;
      IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0';
      Id_HandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create( IdHTTP1 );
      cert := 'my_scriptjunkie_pem.pem';
      Id_HandlerSocket.SSLOptions.CertFile := cert; (* PEM contain both CERT and Key *)
      Id_HandlerSocket.SSLOptions.KeyFile := cert;

      Id_HandlerSocket.SSLOptions.Mode := sslmClient;
      Id_HandlerSocket.SSLOptions.Method := sslvSSLv23;
      IdHTTP1.IOHandler := Id_HandlerSocket;

      WriteLn( Id_HandlerSocket.SSLOptions.CertFile );

      s := IdHTTP1.Get( 'https://www.scriptjunkie.us/auth/verifycert' );

      writeln( s );

    finally
      Id_HandlerSocket.Free;
      IdHTTP1.Free;
    end;    
end;
Другие вопросы по тегам