はじめに
このドキュメントでは、SSLVPN接続確立中のAnyConnectとセキュアゲートウェイ(SGW)間のイベントフローについて説明します。
背景説明
AnyConnect
AnyConnectは、Secure Socket Layer(SSL)およびInternet Key Exchange(IKEv2)プロトコル用に設計されたCisco VPNクライアントです。ほとんどのデスクトップおよびモバイルプラットフォームで使用できます。AnyConnectは主に、Firepower Threat Defense(FTD)、適応型セキュリティアプライアンス(ASA)、またはセキュアゲートウェイと呼ばれるCisco IOS®およびCisco IOS® XEルータとセキュアな接続を確立します。
セキュアゲートウェイ
シスコの用語では、SSL VPNサーバはセキュアゲートウェイと呼ばれ、(IPSec)IKEv2サーバはリモートアクセスVPNゲートウェイと呼ばれます。シスコでは、次のプラットフォームでSSL VPNトンネルの終端をサポートしています。
- Cisco ASA(ASAv、5500、および5500-Xシリーズ)
- Cisco FTD(FTDv、1000、2100、3100、4100、4200、および9300シリーズ)
- Cisco ISR 4000およびISR G2シリーズ
- Cisco CSR 1000v
- Cisco Catalyst 8000v
AnyConnect SSL VPNの接続フロー
SSL VPN接続の確立中にAnyConnectとセキュアゲートウェイの間で発生するイベントは、次の6つのフェーズに分けられます。
1. SSLハンドシェイク
2. POST – グループの選択
3. POST – ユーザ名/パスワードによるユーザ認証(オプション)
4. VPNダウンローダ(オプション)
5. CSTP接続
6. DTLS接続(オプション)
SSLハンドシェイク
SSLハンドシェイクは、Client Helloメッセージを使用してTransmission Control Protocol(TCP;伝送制御プロトコル)3ウェイハンドシェイクが完了した後、AnyConnect Clientによって開始されます。イベントの流れと重要なポイントは次のとおりです。
Client Hello
SSLセッションは、クライアントがClient Helloメッセージを送信することから始まります。このメッセージの内容:
- SSLセッションIDは0に設定され、新しいセッションの開始を示します。
- ペイロードには、クライアントがサポートする暗号スイートと、クライアントが生成するランダムなナンスが含まれます。
Server Hello
サーバは、次を含むServer Helloメッセージで応答します。
- クライアントが提供するリストから選択した暗号スイート。
- サーバはSSLセッションIDとランダムなナンスを生成しました。
サーバ証明書
Server Helloの後、サーバはそのIDとして機能するSSL証明書を送信します。キーポイントは次のとおりです。
- この証明書が厳密な検証チェックに失敗すると、デフォルトではAnyConnectによってサーバがブロックされます。
- ユーザはこのブロックを無効にすることができますが、以降の接続では、報告されたエラーが解決されるまで警告が表示されます。
クライアント証明書要求
また、サーバはクライアント証明書を要求し、セキュアゲートウェイにロードされたすべての認証局(CA)証明書のサブジェクト名のリストを送信することもできます。この要求は、次の2つの目的を果たします。
- 複数のID証明書が使用可能な場合、クライアント(ユーザ)が正しいID証明書を選択するのに役立ちます。
- 返された証明書がSecure Gatewayによって信頼されていることを確認しますが、さらに証明書の検証を行う必要があります。
Client Key Exchange
次に、クライアントはClient Key Exchangeメッセージを送信します。このメッセージには、プレマスター秘密キーが含まれています。このキーは次を使用して暗号化されます。
- 選択した暗号スイートがRSAベースの場合にサーバ証明書から取得されるサーバの公開キー(TLS_RSA_WITH_AES_128_CBC_SHAなど)
- 選択された暗号スイートがDHEベースの場合(たとえば、TLS_DHE_DSS_WITH_AES_256_CBC_SHA)、Server Helloメッセージで指定されたサーバのDH公開キー。
プレマスターシークレット、クライアントが生成したランダムナンス、およびサーバが生成したランダムナンスに基づいて、クライアントとSecure Gatewayの両方が独立してマスターシークレットを生成します。このマスターシークレットは、セッション鍵を導出するために使用され、クライアントとサーバ間のセキュアな通信を確保します。
SSLセッション1
POST – グループの選択
この操作の間、クライアントは、ユーザが明示的に指定しない限り、接続プロファイルに関する情報を持ちません。要求のgroup-access要素によって示されるように、接続の試行はSecure Gateway URL(asa.example.com)に転送されます。クライアントは、集約認証バージョン2のサポートを示しています。これは、特に効率的なXMLトランザクションの観点で、以前のバージョンに比べて大幅な改善を示しています。セキュアゲートウェイとクライアントの両方が、使用するバージョンに合意する必要があります。セキュアゲートウェイがバージョン2をサポートしていないシナリオでは、追加のPOST操作がトリガーされ、クライアントが以前のバージョンにフォールバックします。
HTTP応答で、セキュアゲートウェイは次を示します。
- セキュアゲートウェイがサポートする集約認証のバージョン。
- トンネルグループリストとユーザ名/パスワードフォーム
注:フォームにはselect要素が含まれています。この要素には、セキュアゲートウェイで設定されたすべての接続プロファイルのグループエイリアスが一覧表示されます。デフォルトでは、これらのグループエイリアスの1つが、selected = "true"ブール属性でハイライト表示されます。tunnel-group要素とgroup-alias要素は、この選択された接続プロファイルに対応します。
POST – グループ選択1
ユーザがこのリストから別の接続プロファイルを選択すると、別のPOST処理が実行されます。この例では、次の図に示すように、選択された接続プロファイルを反映するために、クライアントはgroup-select要素を更新した状態でPOST要求を送信します。
POST – グループ選択2
POST – ユーザ認証
この操作では、AnyConnectはセキュアゲートウェイに次の情報を送信します。
- 選択された接続プロファイル情報:これには、以前の操作でセキュアゲートウェイによって示されたトンネルグループ名とグループエイリアスが含まれます。
- ユーザ名とパスワード:ユーザの認証資格情報。
注:このフローはAAA認証に固有であるため、他の認証方式とは異なる場合があります。
POST操作への応答で、Secure Gatewayは次の情報を含むXMLファイルを送信します。
- セッションID:これはSSLセッションIDとは異なります。
- セッショントークン:このトークンは、後でクライアントによってWebVPN Cookieとして使用されます。
- 認証ステータス:id = successのauth要素によって示されます。
- サーバ証明書ハッシュ:このハッシュはpreferences.xmlファイルにキャッシュされます。
- vpn-core-manifest要素:この要素は、AnyConnectコアパッケージのパスとバージョン、およびDart、ポスチャ、ISEポスチャなどの他のコンポーネントを示します。これは、次のセクションのVPNダウンローダで使用されます。
- vpn-profile-manifest要素:この要素は、プロファイルのパス(プロファイルの名前)とSHA-1ハッシュを示します。
注:クライアントにプロファイルがない場合は、次のセクションのVPNダウンローダによってプロファイルがダウンロードされます。クライアントがすでにプロファイルを持っている場合、クライアントのプロファイルのSHA-1ハッシュがサーバのハッシュと比較されます。不一致が発生した場合、VPNダウンローダは、クライアントプロファイルをセキュアゲートウェイ上のプロファイルで上書きします。これにより、認証後にセキュアゲートウェイ上のプロファイルがクライアントに確実に適用されます。
POST – ユーザ認証
AnyConnectダウンローダ
AnyConnectダウンローダは常に新しいSSLセッションを開始します。そのため、セキュアゲートウェイの証明書が信頼できない場合に2番目の証明書警告が表示されます。このフェーズでは、ダウンロードする必要がある項目ごとに個別のGET操作を実行します。
注:クライアントプロファイルがSecure Gatewayにアップロードされている場合は、ダウンロードが必須です。アップロードされていない場合は、接続試行全体が終了します。
VPNダウンローダ
CSTP接続
AnyConnectは、セキュアチャネルを確立するための最後のステップとしてCONNECT操作を実行します。CONNECT操作中、AnyConnectクライアントは、処理するためにセキュアゲートウェイのさまざまなX-CSTP属性とX-DTLS属性を送信します。セキュアゲートウェイは、クライアントが現在の接続の試行に適用する追加のX-CSTP属性とX-DTLS属性で応答します。この交換には、XMLファイルを伴うX-CSTP-Post-Auth-XMLが含まれており、これはPOST-User Authentication手順で確認されるものとほぼ同じです。
正常な応答を受信した後、AnyConnectはTLSデータチャネルを開始します。同時に、後続のDTLSハンドシェイクが成功したと仮定して、AnyConnect仮想アダプタインターフェイスがX-DTLS-MTUに等しいMTU値でアクティブ化されます。
CSTP接続
DTLSハンドシェイク
このハンドシェイクは、CONNECTイベントの間にクライアントとサーバの間で交換される属性が原因で、比較的高速です。Datagram Transport Layer Security(DTLS)ハンドシェイクは次のように行われます。
クライアント
X-DTLS-Master-Secret:DTLSマスターシークレットは、クライアントによって生成され、サーバと共有されます。このキーは、セキュアなDTLSセッションを確立するために重要です。
X-DTLS-CipherSuite:クライアントでサポートされているDTLS暗号スイートのリスト。クライアントの暗号化機能を示します。
サーバ
X-DTLS-Session-ID:クライアントが使用するためにサーバによって割り当てられるDTLSセッションID。これにより、セッションの継続性が確保されます。
X-DTLS-CipherSuite:サーバがクライアントから提供されたリストから選択する暗号スイート。これにより、両方の当事者が互換性のある暗号化方式を使用することが保証されます。
注:DTLSハンドシェイクの進行中は、TLSデータチャネルは引き続き動作します。これにより、ハンドシェイクプロセス中のデータ転送の一貫性と安全性が確保されます。DTLSデータ暗号化チャネルへのシームレスな移行は、DTLSハンドシェイクが完了した後にのみ行われます。
DTLSハンドシェイク
ブロックされたDTLSポート
DTLSポートがブロックされた場合、またはセキュアゲートウェイがDTLS Client Helloパケットへの応答に失敗した場合、AnyConnectは最大5回の再試行で指数関数的なバックオフを実行します。1秒間の遅延から開始し、最大16秒まで増加します。
これらの試行が失敗した場合、AnyConnectは、CONNECT操作中にセキュアゲートウェイによって返されるX-CSTP-MTU値で指定された実際のTLS MTUをAnyConnect仮想アダプタに適用します。このMTUは、以前に適用されたMTU(X-DTLS-MTU)とは異なるため、仮想アダプタの再設定が必要です。この再設定は、エンドユーザにとっては再接続の試行のように見えますが、処理中に新しいネゴシエーションは発生しません。仮想アダプタが再設定されると、TLSデータチャネルは引き続き動作します。
DTLSポートブロック
関連情報