Indy ベースのサーバーコンポーネント (TsgcWebSocketServer、 TsgcWebSocketHTTPServer) は、OpenSSL の代わりに Windows SChannel (Secure Channel) を TLS プロバイダーとして使用できます。SChannel はネイティブの Windows TLS 実装であるため、外部 DLL は不要です。
サーバーコンポーネントで SSL が有効になっており、IOHandler が iohSChannel に設定されている場合、サーバーは Windows SChannel API を使用してすべての TLS 操作を処理する TsgcIdServerIOHandlerSSLSChannel インスタンスを作成します。 受信クライアント接続ごとに、サーバーは SChannel プロバイダーを通じて TLS ハンドシェイクを実行し、プロトコルバージョン、暗号スイートをネゴシエートし、設定された証明書をバインドします。
SChannel はWindows 証明書ストアまたは PFX ファイル(.pfx / .p12)から証明書を読み込みます。PEM ファイルは不要で、OpenSSL ライブラリをデプロイする必要もありません。
Indy サーバーで SChannel を有効にするには、以下のプロパティを設定してください。
1.SSLプロパティをTrueに設定します。
2. SSLOptions.IOHandler を iohSChannel に設定します。
3. SSLOptions.Versionを 目的のTLSバージョン(tls1_2、tls1_3など)に設定します。
4. SSLOptions.Port をセキュア接続に使用するポートに設定します。
5. 以下に説明する2つの方法のいずれかを使用して 証明書を設定します。
SSLOptions.SChannel_Options サブプロパティは SChannel 固有の設定を公開します:
| プロパティ | 説明 |
| CertHash | Windows 証明書ストアにインストールされた証明書のサムプリント (16進数のハッシュ)。 |
| CertStoreName | 検索する証明書ストア: scsnMY(個人)、scsnRoot、scsnTrust、scsnCA。 |
| CertStorePath | ストアの場所: scspStoreLocalMachineまたは scspStoreCurrentUser です。 |
| CipherList | オプションのコロン区切り暗号アルゴリズムリスト(例: CALG_AES_256:CALG_AES_128)。空の場合はシステムのデフォルトを使用します。 |
| UseLegacyCredentials | True の場合、新しい SCH_CREDENTIALS 構造の代わりにレガシーの SCHANNEL_CRED 構造を使用します。新しい API をサポートしていない古い Windows バージョンでこれを有効にしてください。 |
さらに、一般的な SSLOptions プロパティの CertFile と Password は、PFXファイルから証明書を読み込む際に使用されます。
証明書がすでにWindows証明書ストアにインストールされている場合は、 証明書のサムプリントを 提供し、それがどこにあるかを指定してください。
サムプリントを確認するには、PowerShell を開いて実行してください:
dir cert:\localmachine\my
Thumbprint 列に 必要な16進数ハッシュが表示されます。
Directory: Microsoft.PowerShell.Security\Certificate::localmachine\my
Thumbprint Subject
---------- -------
C12A8FC8AE668F866B48F23E753C93D357E9BE10 CN=*.mydomain.com
oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.SSL := True;
oServer.SSLOptions.IOHandler := iohSChannel;
oServer.SSLOptions.Version := tls1_2;
oServer.SSLOptions.Port := 443;
oServer.Port := 443;
oServer.SSLOptions.SChannel_Options.CertHash := 'C12A8FC8AE668F866B48F23E753C93D357E9BE10';
oServer.SSLOptions.SChannel_Options.CertStoreName := scsnMY;
oServer.SSLOptions.SChannel_Options.CertStorePath := scspStoreLocalMachine;
oServer.Active := True;
PFX(.pfx または .p12)証明書ファイルをお持ちの場合は、SSLOptionsでCertFile とPasswordプロパティを設定します。 SChannelは起動時に証明書をインポートします。
oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.SSL := True;
oServer.SSLOptions.IOHandler := iohSChannel;
oServer.SSLOptions.Version := tls1_2;
oServer.SSLOptions.Port := 443;
oServer.Port := 443;
oServer.SSLOptions.CertFile := 'c:\certificates\server.pfx';
oServer.SSLOptions.Password := 'mypassword';
oServer.Active := True;
PEM 証明書と秘密鍵をお持ちの場合は、まず OpenSSL を使用して PFX 形式に変換してください:
openssl pkcs12 -inkey server.key -in server.crt -export -out server.pfx
SSLOptions.Version プロパティを使用して、サーバーが受け付ける TLS バージョンを制御します:
| 値 | 説明 |
| tls1_0 | TLS 1.0(非推奨) |
| tls1_1 | TLS 1.1 |
| tls1_2 | TLS 1.2(推奨) |
| tls1_3 | TLS 1.3 |
| tlsUndefined | TLS 1.0、1.1、1.2を受け入れます |
デフォルトでは、SChannelはシステムの暗号構成を使用します。SChannel_Options.CipherListを コロン区切りのアルゴリズム名のリストに設定することで、許可される暗号を制限できます。例:
CALG_AES_256:CALG_AES_128
Windowsのデフォルトを使用するには、このプロパティを空のままにしてください。
Windows Server 2019以前では、新しい SCH_CREDENTIALS APIがサポートされない場合があります。古いWindowsバージョンでサーバーの起動に失敗した場合は、レガシーの SCHANNEL_CRED 構造を使用するために SChannel_Options.UseLegacyCredentials を True に設定してください。
コンポーネントはほとんどの場合Windowsバージョンを自動的に検出しますが、必要に応じてレガシーモードを強制することもできます。