Red Hat Training

A Red Hat training course is available for RHEL 8

74.8. certmonger での SCEP の使用

Simple Certificate Enrollment Protocol (SCEP) は、さまざまなデバイスやオペレーティングシステムで使用できる証明書管理プロトコルです。環境内で SCEP サーバーを外部認証局 (CA) として使用している場合、certmonger を使用して Identity Management (IdM) クライアントの証明書を取得できます。

74.8.1. SCEP の概要

Simple Certificate Enrollment Protocol (SCEP) は、さまざまなデバイスやオペレーティングシステムで使用できる証明書管理プロトコルです。SCEP サーバーを外部認証局 (CA) として使用できます。

Identity Management (IdM) クライアントを設定して、CA SCEP サービスから直接 HTTP 経由で証明書を要求および取得できます。このプロセスは、通常、限られた時間でのみ有効な共有シークレットで保護されます。

クライアント側で、SCEP は以下のコンポーネントを提供する必要があります。

  • SCEP URL: CA SCEP インターフェイスの URL。
  • SCEP 共有シークレット: CA と SCEP クライアントの間で共有される、証明書を取得するために使用される challengePassword PIN。

その後、クライアントは SCEP 経由で CA 証明書チェーンを取得し、CA に証明書署名要求を送信します。

certmonger で SCEP を設定する場合は、発行した証明書パラメーターを指定する新しい CA 設定プロファイルを作成します。

74.8.2. SCEP 経由での IdM CA 署名証明書の要求

以下の例では、SCEP_example SCEP CA 設定を certmonger に追加し、IdM クライアント client.idm.example.com で新しい証明書を要求します。certmonger は、NSS 証明書データベース形式と、OpenSSL などのファイルベース (PEM) 形式の両方をサポートしています。

前提条件

  • SCEP URL を知っている。
  • challengePassword PIN 共有シークレットがある。

手順

  1. CA 設定を certmonger に追加します。

    [root@client.idm.example.com ~]# getcert add-scep-ca -c SCEP_example -u SCEP_URL
    • -c: CA 設定に必要なニックネーム。後で同じ値を、他の getcert コマンドと合わせて使用できます。
    • -u: サーバーの SCEP インターフェイスへの URL。

      重要

      HTTPS URL を使用する場合は、-R オプションを使用して SCEP サーバー CA 証明書の PEM 形式のコピーの場所も指定する必要があります。

  2. CA 設定が正常に追加されたことを確認します。

    [root@client.idm.example.com ~]# getcert list-cas -c SCEP_example
    CA 'SCEP_example':
           is-default: no
           ca-type: EXTERNAL
           helper-location: /usr/libexec/certmonger/scep-submit -u http://SCEP_server_enrollment_interface_URL
           SCEP CA certificate thumbprint (MD5): A67C2D4B 771AC186 FCCA654A 5E55AAF7
           SCEP CA certificate thumbprint (SHA1): FBFF096C 6455E8E9 BD55F4A5 5787C43F 1F512279

    設定が正常に追加された場合、certmonger はリモート CA から CA チェーンを取得します。CA チェーンは、コマンド出力でサムプリントとして表示されます。暗号化されていない HTTP でサーバーにアクセスすると、中間者攻撃を防ぐため、サムプリントを SCEP サーバーに表示されるものと手動で比較します。

  3. CA から証明書を要求します。

    • NSS を使用している場合:

      [root@client.idm.example.com ~]# getcert request -I Example_Task -c SCEP_example -d /etc/pki/nssdb -n ExampleCert -N cn="client.idm.example.com" -L one-time_PIN -D client.idm.example.com

      オプションを使用して、証明書要求の以下のパラメーターを指定できます。

      • -I : (オプション) タスクの名前: リクエストの追跡 ID。後で getcert list コマンドで同じ値を使用できます。
      • -c: 要求を送信する CA 設定。
      • -d: 証明書およびキーを保存する NSS データベースを備えたディレクトリー。
      • -n: NSS データベースで使用される証明書のニックネーム。
      • -N: CSR のサブジェクト名。
      • -L : CA が発行する期限付きの 1 回限りの challengePassword PIN。
      • -d: 証明書のサブジェクト代替名。通常はホスト名と同じです。
    • OpenSSL を使用している場合は、以下を行います。

      [root@client.idm.example.com ~]# getcert request -I Example_Task -c SCEP_example -f /etc/pki/tls/certs/server.crt -k /etc/pki/tls/private/private.key -N cn="client.idm.example.com" -L one-time_PIN -D client.idm.example.com

      オプションを使用して、証明書要求の以下のパラメーターを指定できます。

      • -I : (オプション) タスクの名前: リクエストの追跡 ID。後で getcert list コマンドで同じ値を使用できます。
      • -c: 要求を送信する CA 設定。
      • -f: 証明書へのストレージパス。
      • -k: キーへのストレージパス。
      • -N: CSR のサブジェクト名。
      • -L : CA が発行する期限付きの 1 回限りの challengePassword PIN。
      • -d: 証明書のサブジェクト代替名。通常はホスト名と同じです。

検証

  1. 証明書が発行され、ローカルデータベースに正しく保存されていることを確認します。

    • NSS を使用している場合は、以下を入力します。

      [root@client.idm.example.com ~]# getcert list -I Example_Task
      	Request ID 'Example_Task':
              status: MONITORING
              stuck: no
              key pair storage: type=NSSDB,location='/etc/pki/nssdb',nickname='ExampleCert',token='NSS Certificate DB'
              certificate: type=NSSDB,location='/etc/pki/nssdb',nickname='ExampleCert',token='NSS Certificate DB'
              signing request thumbprint (MD5): 503A8EDD DE2BE17E 5BAA3A57 D68C9C1B
              signing request thumbprint (SHA1): B411ECE4 D45B883A 75A6F14D 7E3037F1 D53625F4
              CA: IPA
              issuer: CN=Certificate Authority,O=EXAMPLE.COM
              subject: CN=client.idm.example.com,O=EXAMPLE.COM
              expires: 2018-05-06 10:28:06 UTC
              key usage: digitalSignature,keyEncipherment
              eku: iso.org.dod.internet.security.mechanisms.8.2.2
              certificate template/profile: IPSECIntermediateOffline
              pre-save command:
              post-save command:
              track: yes
      	auto-renew: yes
    • OpenSSL を使用している場合は、以下を入力します。

      [root@client.idm.example.com ~]# getcert list -I Example_Task
      Request ID 'Example_Task':
             status: MONITORING
             stuck: no
             key pair storage: type=FILE,location='/etc/pki/tls/private/private.key'
             certificate: type=FILE,location='/etc/pki/tls/certs/server.crt'
             CA: IPA
             issuer: CN=Certificate Authority,O=EXAMPLE.COM
             subject: CN=client.idm.example.com,O=EXAMPLE.COM
             expires: 2018-05-06 10:28:06 UTC
             eku: id-kp-serverAuth,id-kp-clientAuth
             pre-save command:
             post-save command:
             track: yes
             auto-renew: yes

      ステータス MONITORING は、発行した証明書の取得に成功したことを表します。getcert-list(1) の man ページには、その他の状態とその意味が記載されています。

関連情報

  • 証明書を要求する場合の他のオプションは、getcert-request(1) の man ページを参照してください。

74.8.3. certmonger による AD SCEP 証明書の自動更新

certmonger が SCEP 証明書の更新要求を送信すると、この要求は既存の証明書の秘密鍵を使用して署名されます。ただし、certmonger によってデフォルトで送信される更新要求には、最初に証明書を取得するために使用された challengePassword PIN も含まれています。

SCEP サーバーとして機能する Active Directory (AD) Network Device Enrollment Service (NDES) サーバーは、元の challengePassword PIN を含む更新要求を自動的に拒否します。そのため、更新に失敗します。

AD での更新を機能させるには、challengePassword PIN なしで署名済みの更新要求を送信するように certmonger を設定する必要があります。また、更新時にサブジェクト名を比較しないように AD サーバーを設定する必要があります。

注記

challengePassword が含まれるリクエストも拒否する AD 以外の SCEP サーバーが存在する場合があります。この場合は、certmonger 設定を変更する必要もあります。

前提条件

  • RHEL サーバーは RHEL 8.6 以降を実行している必要がある。

手順

  1. AD サーバーで regedit を開きます。
  2. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MSCEP サブキーに、新しい 32 ビットの REG_DWORD エントリー DisableRenewalSubjectNameMatch を追加し、その値を 1 に設定します。
  3. certmonger が実行されているサーバーで、/etc/certmonger/certmonger.conf ファイルを開き、次のセクションを追加します。

    [scep]
    challenge_password_otp = yes
  4. certmonger を再起動します。

    # systemctl restart certmonger