sgcIndy の機能
OpenSSL 1.1/3.0 サポート、XOAuth2 認証、改良されたネットワーク機能を備えた、Delphi と Free Pascal 向けの拡張 Indy TCP/IP コンポーネント。
OpenSSL 1.1/3.0 サポート、XOAuth2 認証、改良されたネットワーク機能を備えた、Delphi と Free Pascal 向けの拡張 Indy TCP/IP コンポーネント。
最新の OpenSSL ライブラリと TLS 標準で、Indy アプリケーションを最新の状態に保ちましょう。
TLS 1.2 と TLS 1.3 を含む OpenSSL 1.1.x に完全対応。従来の Indy OpenSSL 統合をそのまま置き換えられます。
新しいプロバイダーアーキテクチャ、FIPS 準拠、改善された暗号スイート管理を含む、最新の OpenSSL 3.x シリーズに対応します。
0-RTT 再開、改善されたハンドシェイク性能、最新の暗号スイートを含む、ファーストクラスの TLS 1.3 サポートです。
Gmail、Outlook、その他の OAuth 2.0 プロバイダー向けに XOAuth2 を標準対応。SMTP、IMAP、POP3 接続を最新の OAuth フローで認証できます。
標準の Indy コンポーネントよりも改善された接続処理、キープアライブ管理、タイムアウト制御、バッファ管理を提供します。
sgcIndy は無料で利用できます。Delphi 7 から RAD Studio 13、Free Pascal/Lazarus に対応します。ライセンス料もロイヤリティもありません。
安全なリモート接続のためのフル機能 SSH 2.0 クライアントです。コマンド実行、対話シェル、ポート転送まで、すべて暗号化チャネル上で行えます。
TIdSSHClient は SSH のライフサイクル全体 (バージョン交換、鍵ネゴシエーション、ユーザー認証、チャネル管理) を扱います。任意の SSH サーバーに接続し、クリーンな Delphi コンポーネント API でコマンド実行、シェル起動、ポート転送を行えます。
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 を提供します。完全なイベント駆動アーキテクチャです。
SSH 上での安全なファイル転送です。リモートのファイルとディレクトリをアップロード、ダウンロード、管理でき、進捗追跡と完全な属性サポートを備えています。
TIdSFTPClient は TIdSSHClient の上に構築されており、SFTP サブシステムを自動的に処理します。一般的なファイル操作向けの高レベル API を提供し、SSH チャネルや SFTP プロトコルを手動で扱う必要はありません。
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() は相対パスやシンボリックパスをサーバー上の絶対位置に解決します。
TIdSSHClient のすべての SSH 認証 (パスワード、公開鍵 (RSA、ECDSA、ED25519)、キーボードインタラクティブ) を継承します。資格情報は Authentication プロパティで設定します。OnSSHHostKey イベントでサーバーの検証を行います。
OnSFTPProgress は転送済みバイト数と合計サイズを追跡し、Cancel フラグで転送を中止できます。OnSFTPError はエラーコードとメッセージを通知します。OnSFTPStatus はステータス更新用、OnSFTPDirectoryList はディレクトリ一覧の取得完了時に発生します。
TCP、TLS、HTTP の各サーバーコンポーネントを一般的な攻撃から保護する、オプトイン方式の保護機能です。各オプションは既定で従来の動作のままなので、有効にするまで既存のアプリケーションには影響しません。
TLS のピア検証コールバックは、もはやフェイルオープンしなくなりました。TIdSSLOptions.StrictVerify を有効にすると OpenSSL の検証結果が強制されるため、カスタムコールバックは検証をさらに厳しくすることしかできず、信頼できない証明書を受け入れることは決してできません。
DisableCompression は CRIME を緩和し、DisableRenegotiation はクライアント発信の再ネゴシエーションによる DoS をブロックし、ServerCipherPreference はサーバー側の暗号スイート順序をネゴシエーションで優先させます。
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 にわたって、デプロイに必要な保護機能だけを正確に有効化できます。