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 지원이에요. 최신 OAuth 흐름으로 SMTP, IMAP, POP3 연결을 인증해요.

향상된 TCP/IP

표준 Indy 컴포넌트보다 향상된 연결 처리, 킵얼라이브 관리, 타임아웃 제어, 버퍼 관리를 제공해요.

무료 & 개방형

sgcIndy는 무료로 사용할 수 있어요. Delphi 7부터 RAD Studio 13 및 Free Pascal/Lazarus와 호환돼요. 라이선스 비용이나 로열티가 없어요.

SSH 클라이언트 — TIdSSHClient

안전한 원격 연결을 위한 완전한 기능을 갖춘 SSH 2.0 클라이언트예요. 암호화된 채널을 통해 명령 실행, 대화형 셸 열기, 포트 포워딩 설정이 가능해요.

안전한 원격 실행

TIdSSHClient는 완전한 SSH 수명 주기를 처리해요: 버전 교환, 키 협상, 사용자 인증, 채널 관리. 깔끔한 Delphi 컴포넌트 API로 SSH 서버에 연결하고 명령을 실행하거나, 셸을 열거나, 포트를 포워딩할 수 있어요.

  • 비밀번호, 공개 키 & 키보드-인터랙티브 인증
  • Execute() — 원격 명령을 실행하고 한 번의 호출로 출력을 가져와요
  • 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로 하나의 연결에서 여러 채널을 열어요. 채널별로 exec, 셸 또는 서브시스템(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는 전송된 바이트, 전체 크기, 취소 플래그와 함께 전송 중에 발생해요.

디렉터리 작업

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는 전송을 중단하기 위한 취소 플래그와 함께 전송된 바이트 및 전체 크기를 추적해요. 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 지원을 추가해 보세요.