sgcWebSockets での OpenSSL 静的リンク: libcrypto と libssl の DLL が不要に | eSeGeCe ブログ

sgcWebSockets での OpenSSL 静的リンク: libcrypto と libssl の DLL が不要に

· コンポーネント

Windows で sgcWebSockets を使って TLS を導入する場合、これまでは libcryptolibssl を、正しい OpenSSL のバージョンとビット数に合わせて実行ファイルと一緒に配布する必要がありました。sgcWebSockets は現在、OpenSSL を実行ファイル内に直接リンクできるようになったため、DLL を配布する必要も、バージョンを合わせる必要も、それらを置くフォルダーを用意する必要もありません。この機能は Enterprise および All-Access エディションで利用できます。

ユニット1つだけ、他に設定は不要

有効にするコンパイラディレクティブも、選択する 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 不要のデプロイ計画についてのご相談は、お問い合わせください。実際にコードを書いたメンバーから返信いたします。