sgcWebSockets의 정적 OpenSSL 링크: 더 이상 libcrypto와 libssl DLL 필요 없음 | eSeGeCe 블로그

sgcWebSockets의 정적 OpenSSL 링크: 더 이상 libcrypto와 libssl DLL 필요 없음

· 컴포넌트

Windows에서 sgcWebSockets로 TLS를 배포하려면 지금까지는 실행 파일 옆에 올바른 OpenSSL 버전과 비트수에 맞는 libcryptolibssl을 함께 넣어야 했어요. 이제 sgcWebSockets는 OpenSSL을 실행 파일 안에 직접 링크할 수 있어서, 배포할 DLL도, 맞춰야 할 버전도, DLL을 보관할 폴더도 필요 없어요. 이 기능은 Enterprise와 All-Access 에디션에서 제공돼요.

유닛 하나, 별도 설정 불필요

활성화해야 할 컴파일러 지시문도 없고, 선택해야 할 OpenSSL API 버전도 없어요. 프로젝트의 uses 절에 유닛 sgcIdSSLOpenSSL_Static을 추가하면, 다음 실행부터 애플리케이션은 클라이언트와 서버 컴포넌트 모두에서 .exe에 링크된 OpenSSL 라이브러리를 사용해요.

uses
  sgcWebSocket, sgcWebSocket_Classes,
  sgcIdSSLOpenSSL_Static;

uses 절에서 이 유닛을 제거하면 애플리케이션은 예전과 똑같이 OpenSSL DLL을 로드하는 방식으로 돌아가요. 코드에서 달리 바꿀 것은 없고, TLS 설정, 인증서, 연결 로직은 어느 쪽이든 그대로 유지돼요.

클라이언트와 서버, Win32와 Win64에서 모두 동작

정적 링크는 TsgcWebSocketClientTsgcWebSocketServer는 물론, TLS를 사용하는 다른 모든 sgcWebSockets 또는 sgcIndy 컴포넌트에도 32비트와 64비트 빌드 모두에서 동일하게 적용돼요. 수백 개의 연결에 대해 TLS를 종료하는 서버든, 단일 엔드포인트로 연결하는 클라이언트든, 프로젝트에 유닛을 추가하기만 하면 똑같은 방식으로 링크된 OpenSSL을 사용하게 돼요.

항상 최신으로 유지되는 OpenSSL 3.5.7

현재 링크되어 있는 OpenSSL 버전은 3.5.7이에요. 새로운 OpenSSL 릴리스가 나오면 이후의 sgcWebSockets 업데이트에서 이 버전도 갱신되므로, OpenSSL 바이너리를 직접 추적하거나 다운로드하거나 재배포할 필요가 없고, 일반적인 컴포넌트 업데이트만으로 충분해요.

요구 사항

XE2보다 오래된 Delphi 버전으로 컴파일하면서도 이 유닛이 링크되기를 기대하고 계속 참조하면 E2045 Bad object file format 오류가 나타나요. 해결 방법은 간단히 uses 절에서 sgcIdSSLOpenSSL_Static을 제거하는 것으로, 애플리케이션은 계속 OpenSSL DLL과 함께 정상적으로 동작해요.

이런 경우에 유용함

정적 링크는 단일 파일로 배포하고 싶을 때, 대상 머신에 올바른 OpenSSL DLL이 이미 설치되어 있다고 보장할 수 없을 때, 또는 잠긴 설치 디렉터리나 하나의 바이너리로 배포되는 도구처럼 배포 프로세스에서 실행 파일 옆에 추가 파일을 둘 수 없을 때 유용해요.

이용 가능성

정적 OpenSSL 링크는 sgcWebSockets의 Enterprise와 All-Access 에디션에 포함되어 있어요. sgcWebSockets가 모든 플랫폼에서 지원하는 TLS 백엔드 전체를 확인하려면 SSL / TLS 섹션OpenSSL TLS 백엔드 페이지를 참고해 주세요.

sgcWebSockets 다운로드 페이지에서 내려받거나, GetIt 또는 등록된 계정을 통해 받을 수 있어요.

궁금한 점이나 피드백이 있으신가요? DLL 없는 배포를 계획하는 데 도움이 필요하신가요? 문의하기, 코드를 직접 작성한 사람들로부터 답변을 받으실 수 있어요.