nakamurakko’s diary

仕事で覚えたこと、勉強したことを自分のメモ代わりに書いていこうかなと。

Indyを使ってSSL通信

環境

  • Delphi 10.2
  • Indy 10.6.2.5366
  • libeay32.dll
  • ssleay32.dll

実装

IndyコンポーネントTIdHTTPを使って、SSL通信の最小設定(のはず)。

procedure TMainForm.GetContentButtonClick(Sender: TObject);
var
  http: TIdHTTP;
  sslIOHandler: TIdSSLIOHandlerSocketOpenSSL;
  s: string;
begin
  http := TIdHTTP.Create(nil);
  sslIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(http);
  try
    // プロトコルを指定。(この場合はTLS1.2)
    sslIOHandler.SSLOptions.Method := sslvTLSv1_2;

    // 接続にTIdSSLIOHandlerSocketOpenSSLを使う。
    http.IOHandler := sslIOHandler;

    s := http.Get('https://www.nakamurakko.jp');
  finally
    FreeAndNil(http);
  end;
end;

もし、プロトコルの範囲を絞りたい場合はSSLVersionsを設定する。

// TLS1.1、TLS1.2だけ接続。
sslIOHandler.SSLOptions.SSLVersions := [sslvTLSv1_1, sslvTLSv1_2];

リダイレクトさせたい場合はHandleRedirectsをTrueに設定する。

http.HandleRedirects := True;

アプリケーション実行環境にlibeay32.dll、ssleay32.dllを配置するのを忘れずに。