Android搭載のCitrix Gateway証明書ピンニング Citrix SSO

証明書のピン留めは、中間者攻撃の防止に役立ちます。Citrix SSOは、Android Enterprise モードおよびレガシーデバイス管理者モードの管理対象VPN構成でのみ証明書ピン接続をサポートします。エンドユーザによって追加された VPN プロファイルではサポートされません。

Android Citrix SSOでCitrix Gateway証明書ピンニングを構成する

Citrix SSOの管理対象構成(以前のアプリの制限)での証明書のピン留めについて詳しくは、「 証明書と認証」を参照してください。

固定されたCitrix Gateway 証明書ハッシュを伝送するために、新しいキーと値のペアが次のように定義されます。

Key: ServerCertificatePins
Value: {
  "hash-alg": "sha256",
  "pinset": [
    "cert1_base64_encoded_SHA-256_hash_of_the_X509_SubjectPublicKeyInfo(SPKI)",
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
    "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB="
    ...
  ]
}
<!--NeedCopy-->

管理対象構成で証明書ピン留めの詳細を指定するためのキーは ServerCertificatePinsです。この値は、固定されたCitrix Gateway 証明書のbase64でエンコードされたSHA-256ハッシュと使用されるハッシュアルゴリズムを運ぶJSONペイロードです。固定証明書には、オペレーティングシステムによって検証された信頼チェーン内の任意の証明書を使用できます。この場合、それはAndroidです。

証明書のピン留めは、オペレーティングシステムが TLS ハンドシェイク中に証明書チェーンを検証した後にのみ実行されます。証明書の PIN は、証明書のサブジェクト公開キー情報 (SPKI) をハッシュすることによって計算されます。JSON ペイロードには、両方のフィールド ( hash-alg」と「pinset」) を指定する必要があります。

hash-alg」は、SPKI ハッシュの計算に使用されるハッシュアルゴリズムを指定します。 「ピンセット」は、Citrix Gateway 証明書のSPKIデータのbase64でエンコードされたSHA-256ハッシュを含むJSON配列を指定します。 証明書の PIN には少なくとも 1 つの値を指定する必要があります。証明書のローテーションまたは有効期限を許可するために、PIN 値をさらに指定できます。

次の openssl コマンドを使用して、ドメイン(たとえば、gw.yourdomain.com)の暗証番号の値を計算できます。

openssl s_client -servername gw.yourdomain.com -connect gw.yourdomain.com:443 | openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
<!--NeedCopy-->

このコマンドは、ゲートウェイによって提示されたリーフ証明書の base64 エンコードされた SHA-256 ハッシュを表示します。チェーン内の任意の証明書を証明書のピン留めに使用できます。たとえば、企業が独自の中間 CA を使用して複数のゲートウェイの証明書を生成している場合、中間署名証明書に対応する PIN を使用できます。検証済みの証明書チェーン内の証明書と一致する PIN がない場合、TLS ハンドシェイクは中止され、ゲートウェイへの接続は続行されません。

注:

デバイス管理者モードでは、証明書のピン留めは、Citrix Endpoint ManagementおよびMicrosoft Endpoint Managementソリューションでのみサポートされます。証明書のピン留めは、レガシー VPN プロファイル(管理対象設定ではない)で使用されるカスタムパラメータで、固定用の同じ JSON ペイロードを持つカスタムパラメータ serverCertificatePins で設定する必要があります。

Android搭載のCitrix Gateway証明書ピンニング Citrix SSO