18.8. certmonger での SCEP の使用
Simple Certificate Enrollment Protocol (SCEP) は、さまざまなデバイスやオペレーティングシステムで使用できる証明書管理プロトコルです。環境内で SCEP サーバーを外部認証局 (CA) として使用している場合、certmonger
を使用して Identity Management (IdM) クライアントの証明書を取得できます。
18.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 設定プロファイルを作成します。
18.8.2. SCEP 経由での IdM CA 署名証明書の要求
以下の例では、SCEP_example
SCEP CA 設定を certmonger
に追加し、IdM クライアント client.idm.example.com
で新しい証明書を要求します。certmonger
は、NSS 証明書データベース形式と、OpenSSL などのファイルベース (PEM) 形式の両方をサポートしています。
前提条件
- SCEP URL を知っている。
-
challengePassword
PIN 共有シークレットがある。
手順
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 形式のコピーの場所も指定する必要があります。
-
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 サーバーに表示されるものと手動で比較します。
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
: 証明書のサブジェクト代替名。通常はホスト名と同じです。
-
検証
証明書が発行され、ローカルデータベースに正しく保存されていることを確認します。
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: true auto-renew: true
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: true auto-renew: true
ステータス MONITORING は、発行した証明書の取得に成功したことを表します。
getcert-list(1)
の man ページには、その他の状態とその意味が記載されています。
関連情報
-
証明書を要求する場合の他のオプションは、
getcert-request(1)
の man ページを参照してください。
18.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 以降を実行している必要がある。
手順
-
AD サーバーで
regedit
を開きます。 -
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MSCEP サブキーに、新しい 32 ビットの REG_DWORD エントリー
DisableRenewalSubjectNameMatch
を追加し、その値を1
に設定します。 certmonger
が実行されているサーバーで、/etc/certmonger/certmonger.conf
ファイルを開き、次のセクションを追加します。[scep] challenge_password_otp = yes
certmonger を再起動します。
# systemctl restart certmonger