セキュア接続では、必ず一端では HandshakeRole Client を使用し、もう一端では HandShakeRole Server または HandShakeRole ServerWithClientAuth を使用する必要があります。
SSL プロトコルおよび TLS プロトコルでは、クライアント・サイドは ClientHello ハンドシェーク・ レコードを送信し、サーバー・サイドは ServerHello ハンドシェーク・レコードで応答します。両サイドが ClientHello レコードを送信した場合は、ハンドシェークは失敗します。両サイドが ClientHello を待っている場合は、ハンドシェークはタイムアウトになります。
ハンドシェークで行われる役割は、アプリケーションがクライアント、サーバー、またはピアのいずれとして使用されているかには関係ありません。 また、この役割は、どちらのアプリケーションが listen() および accept() を行い、どちらのアプリケーションが connect() を行うかにも関係ありません。 アプリケーションにどの役割を与えるかを決定するときの最も重要な考慮事項は、証明書管理です。
HandshakeRole Client として指定されたパートナー・アプリケーションでは、サーバーの証明書を認証するために必要なルート証明書を含む鍵リングが必要です。 クライアントは、証明書の秘密鍵にアクセスする必要はありません。 クライアントはこの鍵リングを共用することができます。
HandshakeRole Client として指定されたパートナー・アプリケーションは、ユーザー確認を求められたときにユーザー証明書を提示するかどうか決定します。 ユーザー証明書を提示するには、このアプリケーションは、ユーザー証明書を持つ秘密鍵リングを持っている必要があります。 アプリケーションは、ユーザー証明書の秘密鍵へのアクセス権を持っている必要があります。クライアント鍵リングには、サーバーの証明書を認証するために必要なルート証明書も含まれている必要があります。
HandshakeRole パラメーターが ServerWithClientAuth に設定されている場合は、ハンドシェークの間に、クライアントに認証要求が送信されます。 クライアントは自身の証明書をサーバーに送信し、サーバーはその証明書を検証することができます。 サーバーによって行われる検証レベルは、ClientAuthType パラメーターを設定することにより制御します。 以下の表は、パラメーター設定間の相違を要約したものです。
ClientAuthType | クライアント証明書が必須かオプションか | 証明書の検証 |
---|---|---|
PassThru | オプション | なし |
Full | オプション | 提供された場合は、証明書は鍵リングに照らして検証されます。 |
必須 | 必須 | 証明書は鍵リングに照らして検証されます。 |
SAFCheck | 必須 | 証明書は鍵リングに照らして検証され、セキュリティー製品内のユーザー ID の 1 つと関連している必要があります。 |
証明書の検証が失敗すると、セキュア接続は正常に初期化されません。 ClientAuthType のデフォルト設定は Required です。クライアントの証明書またはユーザー ID を取得するための AT-TLS ioctl 呼び出しを発行しないアプリケーションの場合は、Required の設定により、接続するすべてのクライアントは必ず、有効なクライアント証明書を提供することになります。ClientAuthType に PassThru の設定を使用するのは、SIOCTTLSCTL ioctl 呼び出しを使用して AT-TLS から証明書を取得し、証明書を検証するための独自のセキュリティー・メソッドを実装するアプリケーションのみに限定する必要があります。 ClientAuthType を Full に設定可能な対象アプリケーションは、クライアント証明書が提供されていればそれを検証したいが、セキュア接続の確立にはクライアント証明書が不要なアプリケーションです。ClientAuthType を SAFCheck に設定すると、クライアント認証の使用時にセキュリティー・レベルをより強化することができます。これを行うには、証明書に関連したユーザー ID を取り込むために AT-TLS を必要とします。セキュア接続の確立後に、アプリケーションは SIOCTTLSCTL ioctl を使用して、AT-TLS からユーザー ID を取得できます。 このユーザー ID を使用して、アプリケーションのプロトコル・フローの間にクライアントが提示したユーザー ID を検証できます。あるいはクライアントによるユーザー ID 送信の必要性を排除できます。