sgcIndy の機能

OpenSSL 1.1/3.0 サポート、XOAuth2 認証、改良されたネットワーク機能を備えた、Delphi と Free Pascal 向けの拡張 Indy TCP/IP コンポーネント。

最新の OpenSSL サポート

最新の OpenSSL ライブラリと TLS 標準で、Indy アプリケーションを最新の状態に保ちましょう。

OpenSSL 1.1

TLS 1.2 と TLS 1.3 を含む OpenSSL 1.1.x に完全対応。従来の Indy OpenSSL 統合をそのまま置き換えられます。

OpenSSL 3.0

新しいプロバイダーアーキテクチャ、FIPS 準拠、改善された暗号スイート管理を含む、最新の OpenSSL 3.x シリーズに対応します。

TLS 1.3

0-RTT 再開、改善されたハンドシェイク性能、最新の暗号スイートを含む、ファーストクラスの TLS 1.3 サポートです。

XOAuth2 と拡張 TCP/IP

XOAuth2 認証

Gmail、Outlook、その他の OAuth 2.0 プロバイダー向けに XOAuth2 を標準対応。SMTP、IMAP、POP3 接続を最新の OAuth フローで認証できます。

拡張 TCP/IP

標準の Indy コンポーネントよりも改善された接続処理、キープアライブ管理、タイムアウト制御、バッファ管理を提供します。

無料・オープン

sgcIndy は無料で利用できます。Delphi 7 から RAD Studio 13、Free Pascal/Lazarus に対応します。ライセンス料もロイヤリティもありません。

SSH クライアント — TIdSSHClient

安全なリモート接続のためのフル機能 SSH 2.0 クライアントです。コマンド実行、対話シェル、ポート転送まで、すべて暗号化チャネル上で行えます。

安全なリモート実行

TIdSSHClient は SSH のライフサイクル全体 (バージョン交換、鍵ネゴシエーション、ユーザー認証、チャネル管理) を扱います。任意の SSH サーバーに接続し、クリーンな Delphi コンポーネント API でコマンド実行、シェル起動、ポート転送を行えます。

  • パスワード、公開鍵、キーボードインタラクティブの各種認証
  • Execute() — リモートコマンドを実行し、1 回の呼び出しで出力を取得
  • RequestShell / RequestPTY — 対話的なターミナルセッションを開始
  • ポート転送 — OpenDirectTCPIP と RequestForwarding によるローカル・リモート TCP/IP トンネリング
  • マルチチャネル — 単一接続上で複数の同時セッションを開始
SSH_Example.pas
var
  SSH: TIdSSHClient;
  Output: string;
begin
  SSH := TIdSSHClient.Create(nil);
  try
    SSH.Host := 'server.example.com';
    SSH.Port := 22;
    SSH.Authentication.Username := 'admin';
    SSH.Authentication.Password := 'secret';
    SSH.Connect;

    // Execute a command and get output
    Output := SSH.Execute('ls -la /var/log');
    Memo1.Text := Output;

    SSH.Disconnect;
  finally
    SSH.Free;
  end;
end;

認証

パスワード、公開鍵 (RSA、ECDSA、ED25519)、キーボードインタラクティブの各方式に対応します。秘密鍵は PEM ファイルから (任意でパスフレーズ付きで) 読み込めます。ホスト鍵の検証は OnSSHHostKey イベントで行います。

最新の暗号

Curve25519、ECDH、Diffie-Hellman の鍵交換に対応します。AES-CTR と AES-GCM の暗号、HMAC-SHA2 のメッセージ認証を提供します。Algorithms プロパティでアルゴリズムの優先順位を設定できます。

チャネルとサブシステム

OpenChannel を使って、1 つの接続上で複数のチャネルを開けます。チャネルごとに exec、shell、サブシステム (SFTP など) を要求できます。データ、シグナル、EOF の送信もチャネル単位で独立して行えます。

キープアライブとタイムアウト

切断検出のためのキープアライブ間隔と最大回数を設定できます。接続および読み取りタイムアウトは SSHOptions で設定します。Rekey() による自動的な鍵再生成にも対応します。

ポート転送

OpenDirectTCPIP でローカルからリモートへのトンネリング、RequestForwarding と CancelForwarding でリモートからローカルへの転送が可能です。暗号化された SSH 接続を通じて、任意の TCP トラフィックをトンネリングできます。

豊富なイベント

受信データ用の OnSSHChannelData、コマンド結果用の OnSSHChannelExitStatus、サーバーバナー用の OnSSHAuthBanner、エラー処理用の OnSSHError を提供します。完全なイベント駆動アーキテクチャです。

SFTP クライアント — TIdSFTPClient

SSH 上での安全なファイル転送です。リモートのファイルとディレクトリをアップロード、ダウンロード、管理でき、進捗追跡と完全な属性サポートを備えています。

安全なファイル操作

TIdSFTPClient は TIdSSHClient の上に構築されており、SFTP サブシステムを自動的に処理します。一般的なファイル操作向けの高レベル API を提供し、SSH チャネルや SFTP プロトコルを手動で扱う必要はありません。

  • Get / Put — パスまたはストリーム経由でファイルをダウンロード・アップロード
  • ListDirectory — リモートディレクトリの内容をファイル属性付きで一覧表示
  • Delete / Rename — リモートファイル・ディレクトリの管理
  • MakeDirectory / RemoveDirectory — フォルダーの作成・削除
  • OnSFTPProgress — 転送済みバイト数、合計サイズ、キャンセル対応で転送進捗を追跡
SFTP_Example.pas
var
  SFTP: TIdSFTPClient;
  Items: TIdSFTPDirectoryItems;
  i: Integer;
begin
  SFTP := TIdSFTPClient.Create(nil);
  try
    SFTP.Host := 'sftp.example.com';
    SFTP.Authentication.Username := 'admin';
    SFTP.Authentication.PrivateKeyFile :=
      'C:\Keys\id_rsa';
    SFTP.Connect;

    // Upload a file
    SFTP.Put('C:\local\report.pdf',
      '/remote/reports/report.pdf');

    // List directory
    Items := SFTP.ListDirectory('/remote/reports');
    for i := 0 to Items.Count - 1 do
      Memo1.Lines.Add(Items[i].FileName);

    // Download a file
    SFTP.Get('/remote/data.csv',
      'C:\local\data.csv');

    SFTP.Disconnect;
  finally
    SFTP.Free;
  end;
end;

ファイル転送

Get() はリモートファイルをローカルパスまたは TStream にダウンロードします。Put() はローカルパスまたは TStream からアップロードします。SFTPBufferSize で最適なスループット向けにバッファサイズを設定できます。OnSFTPProgress は転送中に転送済みバイト数、合計サイズ、Cancel フラグとともに発生します。

ディレクトリ操作

ListDirectory() は、各エントリのファイル名、サイズ、権限、タイムスタンプ、種別を含む TIdSFTPDirectoryItems を返します。フォルダー管理には MakeDirectory() と RemoveDirectory() を使用します。GetCurrentDirectory() はリモートの作業パスを返します。

ファイル属性

Stat() と LStat() でサイズ、権限、UID/GID、タイムスタンプを取得できます。SetStat() でリモート属性を変更します。FileExists()、DirectoryExists()、FileSize() で簡単なチェックが行えます。Symlink() と ReadLink() でシンボリックリンクにも対応します。

文字列ヘルパー

GetFileAsString() はリモートファイルを直接 Delphi の文字列として読み込みます。PutFileFromString() は文字列をリモートファイルに書き込みます。RealPath() は相対パスやシンボリックパスをサーバー上の絶対位置に解決します。

SSH 認証

TIdSSHClient のすべての SSH 認証 (パスワード、公開鍵 (RSA、ECDSA、ED25519)、キーボードインタラクティブ) を継承します。資格情報は Authentication プロパティで設定します。OnSSHHostKey イベントでサーバーの検証を行います。

イベントと進捗

OnSFTPProgress は転送済みバイト数と合計サイズを追跡し、Cancel フラグで転送を中止できます。OnSFTPError はエラーコードとメッセージを通知します。OnSFTPStatus はステータス更新用、OnSFTPDirectoryList はディレクトリ一覧の取得完了時に発生します。

サーバーセキュリティの強化

TCP、TLS、HTTP の各サーバーコンポーネントを一般的な攻撃から保護する、オプトイン方式の保護機能です。各オプションは既定で従来の動作のままなので、有効にするまで既存のアプリケーションには影響しません。

証明書の検証

TLS のピア検証コールバックは、もはやフェイルオープンしなくなりました。TIdSSLOptions.StrictVerify を有効にすると OpenSSL の検証結果が強制されるため、カスタムコールバックは検証をさらに厳しくすることしかできず、信頼できない証明書を受け入れることは決してできません。

TLS の強化

DisableCompression は CRIME を緩和し、DisableRenegotiation はクライアント発信の再ネゴシエーションによる DoS をブロックし、ServerCipherPreference はサーバー側の暗号スイート順序をネゴシエーションで優先させます。

Slowloris の緩和

RequestReadTimeout はリクエストの受信にかかる時間を制限します。さらに新しい TIdIOHandler.SetReadDeadline は読み取り全体の期限を追加し、単純な非アクティブタイムアウトをリセットし続ける低速ドリップ型のクライアントを無効化します。

リクエストサイズの制限

MaxRequestBodySize は Content-Length とチャンクボディの上限を設けます(413 を返します)。MaxHeaderTotalSize はヘッダー全体のバイト数を制限し(431 を返します)、TIdIOHandler.MaxInputBufferSize は入力バッファを制限してメモリ枯渇を狙う読み取りを防ぎます。

リクエストスマグリング対策

StrictRequestParsing は、Content-Length と Transfer-Encoding の両方を含む曖昧なリクエストや、負のチャンクサイズを拒否します。また、チャンクのトレーラーヘッダーループには上限が設けられ、メモリと CPU の枯渇による DoS を防止します。

オプトインかつ互換性あり

すべての強化機能はオプトイン方式で、既定では従来の動作のままであり、互換性を損なう変更はありません。Delphi 7 から RAD Studio 13、そして Free Pascal にわたって、デプロイに必要な保護機能だけを正確に有効化できます。

Indy コンポーネントをアップグレード

sgcIndy を無料でダウンロードして、アプリケーションに最新の TLS サポートをもたらしましょう。