TsgcWebSocketProxyServer › Properties › SSLOptions
ダウンストリーム TLS リスナーの証明書パス、TLS バージョン選択、OpenSSL チューニングを保持します。
property SSLOptions: TsgcWSSSL_Options read FSSLOptions write SetSSLOptions;
Version=tlsUndefined、VerifyCertificate=False
SSLがTrueの場合、プロキシを起動する前に証明書マテリアルを提供してください: RootCertFile、CertFile、KeyFileはPEMファイルを指します(ファイルにフルチェーンが含まれる場合は3つすべてに同じパスを使用してください)。Passwordは秘密鍵が暗号化されている場合にのみ必要です。クライアント証明書をリクエストして検証するには、VerifyCertificateをTrueに設定します(サブオプションFailIfNoCertificateとVerifyClientOnceがチェックを絞り込みます)。VerifyDepthがチェーンの長さを制御します。Versionは特定のTLSバージョン(tls1_0、tls1_1、tls1_2、tls1_3)を選択するか、ネゴシエーションを未指定のままにします(tlsUndefined)。iohNativeTLSの場合、これは代わりに許可される最も低いバージョンになります(詳細は後述)。OpenSSL_Optionsは低レベルの設定を公開します: APIVersion(oslAPI_1_0/oslAPI_1_1/oslAPI_3_0)、OpenSSLバイナリの場所を特定するためのLibPath/LibPathCustom、UnixSymLinks、ECDHE、CipherList、CurveList、VersionMin、およびホスト名/IP検証用のX509Checks。これらの設定は下流のレッグにのみ適用されます。上流のTLSレッグはProxy.TLSを通じて有効になります。
IOHandler は TLS エンジンを選択します。デフォルトは iohOpenSSL で、iohSChannel は Windows のプロバイダーを使用します。iohNativeTLS は、sgcCrypto パックに含まれる、TLS 1.3 と TLS 1.2 を話す純粋な Object Pascal の TLS エンジンを選択します。OpenSSL ライブラリは読み込まれず、TLS 1.3 では RFC 10024 のハイブリッドポスト量子鍵交換グループが X25519MLKEM768 を先頭にして提示されます。2 つの優先順位リストは NativeTLS_Options.Groups と NativeTLS_Options.CipherSuites で、OpenSSL 形式のコロン区切りです。リストが空の場合はエンジンのデフォルトが維持されます。このエンジンは、従来の接続ごとに 1 スレッドのエンジンでも、IOCP や EPOLL のエンジンでも同じように動作します。iohAppleTLS と iohAndroidTLS はクライアント専用のハンドラーです。これらのいずれかを設定したサーバーは、OnSSLGetHandler が独自のハンドラーを提供しない限り、Active を True に設定した時点で例外を発生させます。代わりに iohNativeTLS、iohOpenSSL、または Windows では iohSChannel を使用してください。
ネイティブエンジンでは、Version は iohOpenSSL の場合と異なり、正確なバージョンではなく許可される最も低いバージョンです。tlsUndefined(デフォルト)と tls1_2 は TLS 1.3 と TLS 1.2 を受け入れ、tls1_3 は TLS 1.3 のみを受け入れ、tls1_0 または tls1_1 は、エンジンが TLS 1.2 と TLS 1.3 のみに対応するため、サーバーの起動時に設定エラーになります。TLS 1.2 のみを受け入れるには、NativeTLS_Options.CipherSuites に TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 のような TLS 1.2 のスイートのみを指定してください。エンジンはクライアント証明書を RootCertFile のルートに対して検証し、NativeTLS_Options.UseSystemRoots が True(デフォルトは False)の場合はオペレーティングシステムが信頼するルートも加えて検証します。iohNativeTLS の場合、CertFile には証明書、チェーン、鍵を保持する .pfx または .p12 ファイルを指定することもでき、Password で開かれます。このエンジンは TLS 1.3 と TLS 1.2 のセッションチケットでセッションを再開します。NativeTLS_Options.SessionTickets(デフォルトは True)でオンにし、NativeTLS_Options.TicketLifetime(デフォルトは 7200 秒)でチケットを使用できる期間を設定します。TLS 1.2 の再開にはクライアントが拡張マスターシークレットに対応している必要があります。0-RTT は受け付けず、OpenSSL ハンドラーに属する OnSSLVerifyPeer も発生させません。VerifyCertificate はクライアントに証明書を要求して検証し、VerifyCertificate_Options.FailIfNoCertificate は証明書を送らないクライアントを拒否し、エンジンは再ネゴシエーションを一切行わないため VerifyClientOnce は効果がありません。ネイティブ TLS を参照してください。
oProxy := TsgcWebSocketProxyServer.Create(nil);
oProxy.SSL := true;
oProxy.SSLOptions.CertFile := 'c:\certificates\mycert.pem';
oProxy.SSLOptions.KeyFile := 'c:\certificates\mycert.pem';
oProxy.SSLOptions.RootCertFile := 'c:\certificates\mycert.pem';
oProxy.SSLOptions.Version := tls1_3;
oProxy.SSLOptions.OpenSSL_Options.VersionMin := tls1_2;
oProxy.SSLOptions.Port := 443;
oProxy.Proxy.Host := 'upstream.example.com';
oProxy.Proxy.Port := 8080;
oProxy.Active := true;