2017-06-16 103 views
0

Indy TIdHTTPを使用して、クライアント側SSL証明書を使用してhttpsページを取得しようとしています。Indy TIdHTTPクライアント側SSL証明書付きのhttpsページを取得

コードが

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で、インディはここ10.6.2.0

+0

のですか? 'Get'は例外を起こしていますか?もしそうなら、それは何を言いますか?なぜ最初にクライアント証明書を使用していますか?サーバーは認証されたクライアントにのみ応答しますか?標準のWebブラウザでサーバにアクセスできますか? –

+0

@Remy Lebeauはい、問題は実際のものです。私は最後のインディーバージョン(devのsvnから)とそれに直面する。例外は発生しません。サーバーは許可されていないコンテンツを返します。 FireFoxを使用して証明書をインポートすると、すべて正常に動作しています(私の質問のリンクを参照) –

+0

何ですか? 'Get'がエラーを起こしていなければ、HTTPもSSLも失敗していません。あなたはこれがSSLの問題だと思うのですが、単にユーザー認証の問題ではないと思いますか?サーバーは、HTTP認証またはHTML Webフォーム認証のいずれかを使用して、クライアントにログインする必要がありますか? –

答えて

0

です*実際の*問題でどのような作業コード(インディ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; 
関連する問題