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 などのアプリケーションプロトコルをアドバタイズできます。4 つのバックエンドはすべて同じ 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 エディションで利用できます。