9.5. 証明書マッピングとマッチングルールのトラブルシューティング

スマートカードでの認証に問題がある場合は、スマートカード証明書がユーザーに正しくリンクされていることを確認してください。デフォルトでは、ユーザーエントリーに usercertificate 属性の一部として完全な証明書が含まれる場合、証明書はユーザーに関連付けられます。ただし、証明書マッピングルールを定義している場合は、証明書をユーザーに関連付ける方法を変更している可能性があります。証明書マッピングとマッチングルールをトラブルシューティングするには、以下のセクションを参照してください。

注記

スマートカードを使用して SSH で認証する場合は、Identity Management(IdM) のユーザーエントリーに完全な証明書を追加する必要があります。スマートカードを使用して SSH を使用した認証を行っていない場合は、ipa user-add-certmapdata コマンドを使用して証明書マッピングデータを追加できます。

9.5.1. 証明書がユーザーにどのようにマッピングされているかを確認する

デフォルトでは、ユーザーエントリーに usercertificate 属性の一部として完全な証明書が含まれる場合、証明書はユーザーに関連付けられます。ただし、証明書マッピングルールを定義している場合は、証明書をユーザーに関連付ける方法を変更している可能性があります。証明書マッピングルールを確認するには、次の手順に従ってください。

前提条件

手順

  1. IdM 用に現在設定されている証明書マッピングルールを確認します。

    # ipa certmaprule-find
    -------------------------------------------
    1 Certificate Identity Mapping Rule matched
    -------------------------------------------
      Rule name: smartcardrule
      Mapping rule: (ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})
      Matching rule: <ISSUER>CN=Certificate Authority,O=IDM.EXAMPLE.COM
      Enabled: TRUE
    ----------------------------
    Number of entries returned 1
    ----------------------------

    以下のマッピングルールのいずれかが定義されていることが予想されます。

    • ipacertmapdata は、IdM ユーザーエントリーの certmapdata 属性が使用されていることを示します。
    • altSecurityIdentities は、Active Directory のユーザーエントリー名マッピング属性が使用されることを指定します。
    • userCertificate;binary= は、IdM または AD のいずれかの証明書全体が使用されていることを示します。

    多数のマッチングオプションを定義できますが、通常設定されたオプションの一部は以下のようになります。

    • <ISSUER>CN=[…​] は、使用されている証明書の発行者属性がこれと一致することを確認するためにチェックされることを指定します。
    • <SUBJECT>.*,DC=MY,DC=DOMAIN は、証明書のサブジェクトがチェックされていることを示します。
  2. IdM サーバーの /etc/sssd/sssd.conf ファイルに debug_level = 9 を追加して、System Security Services Daemon (SSSD) ログを有効にします。

    [domain/idm.example.com]
    ...
    debug_level = 9
  3. SSSD を再起動します。

    # systemctl restart sssd
  4. マッピングが正しく読み込まれる場合は、/var/log/sssd/sssd_idm.example.com.log ファイルに以下のエントリーが表示されるはずです。

    [be[idm.example.com]] [sdap_setup_certmap] (0x4000): Trying to add rule [smartcardrule][-1][<ISSUER>CN=Certificate Authority,O=IDM.EXAMPLE.COM][(|(userCertificate;binary={cert!bin})(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500}))].
  5. マッピングルールに無効な構文が含まれる場合は、以下のようなエントリーがログファイルに表示されます。

    [be[idm.example.com]]] [sss_certmap_init] (0x0040): sss_certmap initialized.
    [be[idm.example.com]]] [ipa_certmap_parse_results] (0x4000): Trying to add rule [smartcardrule][-1][<ISSUER>CN=Certificate Authority,O=IDM.EXAMPLE.COM][(ipacertmapdata=X509:<I>{issuer_dn!x509}<S>{subject_dn})].
    [be[idm.example.com]]] [parse_template] (0x0040): Parse template invalid.
    [be[idm.example.com]]] [parse_ldap_mapping_rule] (0x0040): Failed to add template.
    [be[idm.example.com]]] [parse_mapping_rule] (0x0040): Failed to parse LDAP mapping rule.
    [be[idm.example.com]]] [ipa_certmap_parse_results] (0x0020): sss_certmap_add_rule failed for rule [smartcardrule], skipping. Please check for typos and if rule syntax is supported.
    [be[idm.example.com]]] [ipa_subdomains_certmap_done] (0x0040): Unable to parse certmap results [22]: Invalid argument
    [be[idm.example.com]]] [ipa_subdomains_refresh_certmap_done] (0x0020): Failed to read certificate mapping rules [22]: Invalid argument
  6. マッピングルールの構文を確認してください。

    # ipa certmaprule-show smartcardrule
      Rule name: smartcardrule
      Mapping rule: (|(userCertificate;binary={cert!bin})(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500}))
      Matching rule: <ISSUER>CN=Certificate Authority,O=IDM.EXAMPLE.COM
      Domain name: ipa.test
      Enabled: TRUE
  7. 必要に応じて、証明書マッピングルールを変更します。

    # ipa certmaprule-mod smartcardrule --maprule '(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})'

関連情報

  • man ページの sss-certmap を参照してください。

9.5.2. スマートカード証明書に関連付けられたユーザーの確認

スマートカードでの認証に問題がある場合は、正しいユーザーがスマートカード証明書に関連付けられていることを確認してください。

前提条件

手順

  1. ユーザーがスマートカード証明書に関連付けられていることを確認します。

    # ipa certmap-match cert.pem
    --------------
    1 user matched
    --------------
      Domain: IDM.EXAMPLE.COM
      User logins: idmuser1
    ----------------------------
    Number of entries returned 1
    ----------------------------

    ユーザーまたはドメインが正しくない場合は、証明書がユーザーにどのようにマッピングされているかを確認してください。証明書がユーザーにどのようにマッピングされているかを確認する を参照してください。

  2. ユーザーエントリーに証明書が含まれているかどうかを確認します。

    # ipa user-show idmuser1
      User login: idmuser1
    [...]
    Certificate:MIIEejCCAuKgAwIBAgIBCzANBgkqhkiG9w0BAQsFADAzMREwDwYDVQQKDAhJUEEuVEVTVDEeMBwGA1UEAwwVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XD
  3. ユーザーエントリーに証明書が含まれていない場合は、base-64 でエンコードされた証明書をユーザーエントリーに追加します。

    1. ヘッダーとフッターのある証明書を含む環境変数を作成し、1 行に連結します。これは、ipa user-add-cert コマンドで必要な形式です。

      $ export CERT=`openssl x509 -outform der -in idmuser1.crt | base64 -w0 -`

      idmuser1.crt ファイルの証明書は PEM 形式である必要があることに注意してください。

    2. ipa user-add-cert コマンドを使用して、証明書を idmuser1 のプロファイルに追加します。

      $ ipa user-add-cert idmuser1 --certificate=$CERT
    3. System Security Services Daemon (SSSD) キャッシュをクリアします。

      # sssctl cache-remove
      SSSD must not be running. Stop SSSD now? (yes/no) [yes] yes
      Creating backup of local data…
      Removing cache files…
      SSSD needs to be running. Start SSSD now? (yes/no) [yes] yes
  4. ipa certmap-match を再度実行して、ユーザーがスマートカード証明書に関連付けられていることを確認します。