TsgcWebSocketClient › Properties › TLSOptions

TLSOptions プロパティ

TLS が有効な場合に使用される証明書、TLS バージョン、ALPN、IOHandler、その他のセキュア接続の詳細を設定します。

構文

property TLSOptions: TsgcWSTLS_Options read FTLSOptions write SetTLSOptions;

デフォルト値

Preset=tlspCustom

解説

TLSがTrueの場合にのみアクセス可能です。サブプロパティにはRootCertFile、CertFile、KeyFile、Password、VerifyCertificate、VerifyDepth、Version(tlsUndefinedからtls1_3まで)、ALPNProtocolsおよびIOHandler(iohOpenSSL、iohSChannel、iohAndroidTLS、iohAppleTLSまたはiohNativeTLS)が含まれます。AndroidではiohAndroidTLSがプラットフォームネイティブのTLS(javax.net.ssl.SSLEngine)を使用し、iOSおよびmacOSではiohAppleTLSがAppleネイティブのTLSを使用するため、OpenSSLライブラリをデプロイする必要はありません。OpenSSL固有の設定はOpenSSL_Optionsの下に、SChannel固有の設定はSChannel_Optionsの下にあります。

VerifyCertificateは、iohSChannelを含むすべてのIOHandlerに対して同じ方法で証明書の検証を制御します。デフォルトはFalseであるため、自己署名、期限切れ、またはホスト名が一致しない証明書を提示するサーバーは、Trueに設定されるまで警告なしに受け入れられます。SChannelの場合、検証はWindows証明書ストアに対して行われます。OnSChannelVerifyPeerを使用すると、アプリケーションはチェーンを検査したり、本来は拒否される証明書を受け入れたりできます。

VerifyCertificateは、証明書が発行後に失効させられたかどうかについては何も示しません。そのため、証明書が失効しているものの、まだ有効期限が切れていない盗まれた鍵でも認証に成功します。iohSChannelの場合、失効状態が確認されるのはSChannel_Options.Revocation.CheckがscrcDisabled(デフォルト)以外に設定されている場合のみです。scrcEndCertificateはサーバー証明書のみをチェックし、scrcChainExcludeRootは中間証明書も併せてチェックし、scrcChainはルート証明書も含めます。Revocation.TimeoutはCRLおよびOCSPの取得全体を制限し(デフォルトは5000ミリ秒)、到達できないレスポンダーがハンドシェイクを停滞させないようにします。Revocation.CacheOnlyはWindowsが既にキャッシュしている情報のみを使用し、ネットワークにアクセスしません。Revocation.IgnoreRevocationOfflineとRevocation.IgnoreNoRevocationCheck(いずれもTrue)は、到達できないレスポンダーや失効情報を公開していない証明書を受け入れるかどうかを決定します。失効が確認された証明書は常に拒否されます。SChannel Certificate Revocationを参照してください。

Preset は、一度の代入で一連の安全なデフォルト値を適用します。tlspCustom(デフォルト)では、各オプションは手動で設定した値を保持し、以前の動作が維持されます。Preset := tlspSecureDefaults を設定すると、証明書の検証(VerifyCertificate := True)が有効になり、Version が tls1_0 または tls1_1 に設定されていた場合のみ TLS 1.2 に引き上げられ(tlsUndefined はそのまま維持されるため、TLS 1.3 は引き続き利用可能です)、OpenSSL_Options.VersionMin と SChannel_Options.VersionMin はそれより低いか未定義だった場合に tls1_2 に設定され、サーバー証明書のホスト名チェック(OpenSSL の X509Checks ホスト名検証)が有効になり、SChannel の失効チェックが scrcChainExcludeRoot として有効になります。プリセットを適用した後でも、個々のオプションを調整できます。

IOHandler は 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 形式のコロン区切りです。リストが空の場合はエンジンのデフォルトが維持されます。

ネイティブエンジンでは、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(デフォルトは False)を有効にすると、オペレーティングシステムが信頼するルート、すなわち Windows の ROOT 証明書ストア、macOS では Security.framework のアンカー証明書(フォールバックとして /etc/ssl/cert.pem)、iOS では Security.framework によるピアチェーンの評価、Android では Conscrypt または /system/etc/security/cacerts フォルダー、Linux では /etc/ssl/certs/ca-certificates.crt から始まる6つの標準的な場所のうち最初に見つかった CA バンドルファイルが追加されます。システムルートが見つからない場合、VerifyCertificate := True にはルートファイルが必要です。CertFile には .pfx または .p12 ファイルを指定することもでき、Password で開かれます。このエンジンは TLS 1.3 と TLS 1.2 のセッションチケットでセッションを再開し、これはコンポーネントのセッションキャッシュに保持されるため、再接続時にはフルハンドシェイクが省略されます。NativeTLS_Options.SessionTickets(デフォルトは True)でこれをオンにし、TLS 1.2 の再開にはサーバーが拡張マスターシークレットに対応している必要があります。0-RTT データは送信せず、OpenSSL ハンドラーに属する OnSSLVerifyPeer も発生させません。証明書が持つべき名前を固定するには、OpenSSL_Options.X509Checks.HostName または IPAddress を設定してください。ネイティブエンジンもこれらを読み取ります。ネイティブ TLS を参照してください。

使用例


oClient := TsgcWebSocketClient.Create(nil);
oClient.URL := 'wss://www.esegece.com:2053';
oClient.TLSOptions.Version := tls1_2;
oClient.TLSOptions.VerifyCertificate := true;
oClient.TLSOptions.RootCertFile := 'cacert.pem';
oClient.Active := true;

プロパティに戻る