Linux サーバー
SCEPman Enterprise Edition のみ
SCEPman の他のユースケースがユーザーを対話的に認証してそのアカウントやデバイス用のユーザー証明書のみを登録できるようにする機能を提供する一方で、任意のサブジェクトに対して非対話的に証明書を登録したい場合があります。
これを実現するには、サービスプリンシパルを認証し、それを SCEPman の Enrollment REST API を利用できるようにします。
前提条件
認証に使用できるサービスプリンシパルの作成方法については、API Enrollment の記事を参照してください:
API 登録Powershell モジュール SCEPmanClient
初期リクエスト
Linux サーバーで証明書をリクエストするには、SCEPmanClient PowerShell モジュールを使用できます:
$Parameters = @{
'Url' = 'scepman.contoso.com'
'ClientId' = '569fbf51-aa63-4b5c-8b26-ebbcfcde2715'
'TenantId' = '8aa3123d-e76c-42e2-ba3c-190cabbec531'
'ClientSecret' = 'csa8Q~aVaWCLZTzswIBGvhxUiEvhptuqEyJugb70'
'Subject' = 'CN=LinuxServer'
'IP' = '10.22.11.8'
'ExtendedKeyUsage' = 'ServerAuth'
'SaveToFolder' = '/etc/ssl/scepman'
'IncludeRootCA' = $true
}
New-SCEPmanCertificate @Parameters証明書の更新
既存の証明書を更新するためにも PowerShell モジュールを使用できます。これにより、認証にサービス プリンシパルを使用する必要がなくなります:
登録および更新スクリプト
PowerShell モジュールが利用できない場合は、 enrollrenewcertificate.sh スクリプトを使用して、最初に証明書を取得したり、それを検証して、有効期限が近い場合に更新を試みることができます。
クライアント前提条件
Enrollment REST API を使用するためには、実行クライアント/ホストに次の前提条件が存在している必要があります。
Azure CLI (バージョン 2.61 以上)
Azure CLI は、登録ユーザーを認証してその適格性を確認し、アクセストークンを取得するために使用されます。
cURL
作成した CSR を SCEPman Enrollment API エンドポイントに送信し、証明書を受け取るために使用されます。
OpenSSL
OpenSSL は、秘密鍵を生成し、証明書を登録または更新するための CSR を作成するために使用されます。
例:
1. コマンド
スクリプトの動作を定義します
このユースケースでは次のオプションを使用できます:
-s 初回登録か更新かを自動検出するサーバー証明書用
-y サーバー証明書の初回登録用
-c 既存の証明書署名要求 (CSR) を提出するため
クライアント認証のユースケースについては以下を参照してください:
管理外の Linux クライアント2. アプリ サービス URL
SCEPman アプリ サービスの URL。
例: "https://scepman.contoso.net/"
3. API スコープ
これは アプリケーション ID URI おめでとうございます!SCEPman のデプロイが完了しました。次の SCEPman-api アプリ登録で作成できます。
例: "api://a7a1d6c8-51b9-48ec-9ca0-a363dc2c8436"

4. 証明書ファイル名
作成されるか、更新のために読み取られる証明書のファイル名(拡張子なし)。
例: "myCertificate"
5. 証明書ディレクトリ
証明書が作成されるか、更新のために読み取られようとするディレクトリ。
例: ~/certs/
8. 更新しきい値
スクリプトが更新プロセスを開始するために、証明書の有効期限が残っている必要がある日数。
例: 30
サーバー証明書向けの追加パラメーター:
9. サービスプリンシパル クライアント ID
認証したいアプリ登録のアプリケーション (クライアント) ID。
10. サービスプリンシパル クライアント シークレット
認証に使用するアプリ登録で作成したクライアントシークレット。
11. サービスプリンシパル テナント ID
アプリ登録のテナント ID。
12. 証明書サブジェクト
証明書を登録する際のサブジェクト。
形式: /CN=SubjectName,O=Organization
13. 証明書拡張
これはサブジェクト代替名 (SAN) として追加されます
例: DNS:webserver.contoso.com
CSR 署名の使用例 (-c コマンド)
考慮事項
このスクリプトは生成された鍵を暗号化しません(パスフレーズ入力が必要なため、自動更新を可能にするために暗号化は省略されています)。
Certificate Master からパスフレーズ保護された証明書を更新する場合、それらを更新するにはこのパスフレーズを入力する必要があります。
自動更新の設定
上記の bash スクリプトが実行され、すでに証明書が登録されていることを検出した場合、mTLS を使用して証明書を更新します(有効期限が近い場合)。スクリプトを定期的に実行すれば、証明書の有効期限が近づいたときに更新されることが保証されます。これを実現するには cronjob を設定できます。以下のコマンドはその例です。システムが起動している場合にコマンドを毎日実行する cronjob と、再起動時にコマンドを実行する cronjob を設定します。
Cron によって実行されるコマンドは必ずしもスクリプト/証明書があるディレクトリから実行されるとは限らないため、スクリプト/証明書への絶対パスを指定することが重要です。
最終更新
役に立ちましたか?