OpenSSL TLS 백엔드
OpenSSL(iohOpenSSL)은 sgcWebSockets의 크로스 플랫폼 TLS 전송입니다. 라이브러리가 대상으로 하는 모든 플랫폼에서 동작하고 대부분에서 기본값이며, 어떤 백엔드보다도 가장 넓은 프로토콜 및 암호 커버리지를 제공합니다. TLSOptions.IOHandler를 iohOpenSSL로 설정해 활성화한 다음, OpenSSL 런타임 라이브러리를 애플리케이션과 함께 배포하세요.
OpenSSL(iohOpenSSL)은 sgcWebSockets의 크로스 플랫폼 TLS 전송입니다. 라이브러리가 대상으로 하는 모든 플랫폼에서 동작하고 대부분에서 기본값이며, 어떤 백엔드보다도 가장 넓은 프로토콜 및 암호 커버리지를 제공합니다. TLSOptions.IOHandler를 iohOpenSSL로 설정해 활성화한 다음, OpenSSL 런타임 라이브러리를 애플리케이션과 함께 배포하세요.
Indy 소켓 위에 구현된 크로스 플랫폼 TLS로, sgcWebSockets가 대상으로 하는 모든 플랫폼에서 사용할 수 있습니다.
OpenSSL은 sgcWebSockets가 Indy 소켓 위에 계층화하는 크로스 플랫폼 TLS 구현입니다. Windows, Linux, macOS, iOS, Android에서 사용할 수 있으며 대부분에서 기본 백엔드입니다. 모든 플랫폼에서 동일한 TLS 동작이 필요하거나, OpenSSL만 노출하는 기능에 의존할 때 OpenSSL을 선택하세요.
이 백엔드는 TLS 1.0부터 TLS 1.3까지 커버하며, 어떤 sgcWebSockets 전송보다도 가장 넓은 암호 제품군 선택을 제공합니다. 사용자 지정 CA 루트(RootCertFile)로 비공개 또는 자체 서명 기관을 신뢰하고, 상호 TLS를 위해 클라이언트 인증서를 제시하며, ALPN을 통해 http/1.1 같은 애플리케이션 프로토콜을 광고할 수 있습니다. 네 가지 백엔드 모두 동일한 TLSOptions API를 공유하므로, OpenSSL을 기준으로 작성한 코드는 IOHandler 줄만 바꾸면 네이티브 백엔드로 옮겨집니다.
절충점은 배포입니다. OpenSSL은 외부 의존성이므로 런타임 라이브러리를 애플리케이션과 함께 출하하고 패치 상태를 유지해야 합니다. Windows에서는 libssl-3.dll과 libcrypto-3.dll을, Linux와 Android에서는 일치하는 .so 파일을, Apple 플랫폼에서는 .dylib 파일을 의미합니다. 배포할 라이브러리가 전혀 없는 네이티브 TLS를 원한다면 Windows의 SChannel, 또는 네이티브 Android 및 Apple 백엔드를 살펴보거나, OpenSSL을 계속 사용하면서 Windows 실행 파일에 정적으로 링크하세요(아래 참고).
TLSOptions.IOHandler를 iohOpenSSL로 설정한 다음, OpenSSL 라이브러리를 빌드와 함께 배포하세요.
uses
sgcWebSocket, sgcWebSocket_Types;
// ...
WSClient.TLS := True;
WSClient.TLSOptions.IOHandler := iohOpenSSL;
WSClient.TLSOptions.VerifyCertificate := True;
WSClient.TLSOptions.RootCertFile := ''; // optional custom CA (PEM/DER)
WSClient.TLSOptions.CertFile := ''; // optional client cert for mTLS
WSClient.TLSOptions.Password := '';
WSClient.TLSOptions.ALPNProtocols.Add('http/1.1');
WSClient.Host := 'your.server.com';
WSClient.Port := 443;
WSClient.Active := True;
WSClient->TLS = true;
WSClient->TLSOptions->IOHandler = iohOpenSSL;
WSClient->TLSOptions->VerifyCertificate = true;
WSClient->TLSOptions->RootCertFile = ""; // optional custom CA (PEM/DER)
WSClient->TLSOptions->CertFile = ""; // optional client cert for mTLS
WSClient->TLSOptions->Password = "";
WSClient->TLSOptions->ALPNProtocols->Add("http/1.1");
WSClient->Host = "your.server.com";
WSClient->Port = 443;
WSClient->Active = true;
OpenSSL은 외부 의존성이므로, 런타임 라이브러리가 모든 플랫폼에서 애플리케이션과 함께 따라다닙니다.
실행 파일 옆에 libssl-3.dll과 libcrypto-3.dll을 배포하세요(대상에 맞춰 32비트 또는 64비트 빌드), 또는 OpenSSL을 정적으로 링크해 DLL을 아예 건너뛰세요(아래 참고).
일치하는 libssl과 libcrypto .so 파일을 번들한 다음, 애플리케이션이 런타임에 접근할 수 있는 경로에서 로드하세요.
libssl과 libcrypto .dylib 파일을 앱 번들과 함께 출하해 기기에서 OpenSSL 런타임을 사용할 수 있게 하세요.
라이브러리는 사용자가 배포하는 것이므로, 보안 수정이 릴리스되면 업데이트할 책임은 사용자에게 있습니다.
Windows에서는 런타임에 libssl-3.dll과 libcrypto-3.dll에서 로드하는 대신, OpenSSL을 .exe 안에 직접 링크할 수 있습니다.
프로젝트의 uses 절에 sgcIdSSLOpenSSL_Static 유닛을 추가하면 그 외에 설정할 것이 없습니다. 활성화할 컴파일러 지시문도, 선택할 OpenSSL API 버전도 없습니다. 애플리케이션은 다음 실행부터 클라이언트와 서버 컴포넌트 모두에서, 32비트와 64비트 빌드 모두에서 실행 파일에 링크된 OpenSSL 라이브러리를 사용하기 시작합니다. uses 절에서 유닛을 제거하면 애플리케이션은 이전과 똑같이 OpenSSL DLL을 로드하는 방식으로 돌아갑니다.
uses
sgcWebSocket, sgcWebSocket_Classes,
sgcIdSSLOpenSSL_Static;
현재 링크되어 있는 OpenSSL 버전은 3.5.7이며, 향후 업데이트에서 계속 새로 반영되므로 OpenSSL 바이너리를 직접 추적하거나 재배포할 필요가 없습니다. 정적 링크에는 Delphi XE2 이상과 커스텀 Indy 라이브러리(이 에디션들의 기본값)가 필요하며, 그보다 이전 버전의 Delphi에서는 해당 유닛이 아무 것도 컴파일하지 않아 애플리케이션이 평소처럼 OpenSSL DLL을 계속 로드합니다.
OpenSSL(iohOpenSSL)은 sgcWebSockets의 모든 에디션에 포함됩니다. 전체 내역은 기능 매트릭스를 참고하세요.
Windows에서의 정적 링크에는 Delphi XE2 이상이 필요하며 Enterprise 및 All-Access 에디션에서 사용할 수 있습니다.