# Linuxサーバー

{% hint style="info" %}
この機能にはバージョンが必要です **2.3.689** 以上。
{% endhint %}

{% hint style="warning" %}
SCEPman Enterprise Edition のみ
{% endhint %}

SCEPman の他のユースケースがユーザーを対話的に認証してそのアカウントやデバイス用のユーザー証明書のみを登録できるようにする機能を提供する一方で、任意のサブジェクトに対して非対話的に証明書を登録したい場合があります。

これを実現するには、サービスプリンシパルを認証し、それを SCEPman の Enrollment REST API を利用できるようにします。

## 前提条件

認証に使用できるサービスプリンシパルの作成方法については、API Enrollment の記事を参照してください：

{% content-ref url="" %}
[](https://docs.scepman.com/ja/zheng-ming-shu-guan-li/api-certificates/api-enrollment)
{% endcontent-ref %}

## Powershell モジュール SCEPmanClient

### 初期リクエスト

Linux サーバーで証明書をリクエストするには、SCEPmanClient PowerShell モジュールを使用できます：

```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
$Parameters = @{
    'CertificateFromFile' = '/home/user/.certs/server.pem'
    'KeyFromFile'         = '/home/user/.certs/server.key'
    'SaveToFolder'        = '/home/user/.certs'
}

New-SCEPmanCertificate @Parameters
```

## 登録および更新スクリプト

PowerShell モジュールが利用できない場合は、 [enrollrenewcertificate.sh](https://github.com/scepman/csr-request/blob/main/enroll-certificate/enrollrenewcertificate.sh) スクリプトを使用して、最初に証明書を取得したり、それを検証して、有効期限が近い場合に更新を試みることができます。

### クライアント前提条件

例：

{% code overflow="wrap" %}

```bash
./enrollrenewcertificate.sh -s https://scepman.contoso.net/ api://a7a1d6c8-51b9-48ec-9ca0-a363dc2c8436 ~/certs/ "myCertificate" "myKeyName" 30 edbc406b-7384-414e-af8b-1a3b187b3f7e [Client_Secret] 736e80bb-3102-479b-83ba-e45c80ef723b "/CN=SubjectName,O=Organization" "DNS:webserver.contoso.com"
```

{% endcode %}

#### 1. コマンド

スクリプトの動作を定義します

このユースケースでは次のオプションを使用できます：

**-s** 初回登録か更新かを自動検出するサーバー証明書用

**-y** サーバー証明書の初回登録用

**-c** 既存の証明書署名要求 (CSR) を提出するため

クライアント認証のユースケースについては以下を参照してください：

{% content-ref url="../self-service-enrollment/unmanaged-linux-client" %}
[unmanaged-linux-client](https://docs.scepman.com/ja/zheng-ming-shu-guan-li/api-certificates/self-service-enrollment/unmanaged-linux-client)
{% endcontent-ref %}

#### 2. アプリ サービス URL

SCEPman アプリ サービスの URL。

*例: "<https://scepman.contoso.net/>"*

#### 3. API スコープ

これは ***アプリケーション ID URI*** おめでとうございます！SCEPman のデプロイが完了しました。次の ***SCEPman-api*** アプリ登録で作成できます。

*例: "api://a7a1d6c8-51b9-48ec-9ca0-a363dc2c8436"*

<figure><img src="https://114237723-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LoGejQeUQcw7lqnQ3WX%2Fuploads%2F9B88qmSsU3P2pcacwkHK%2Fimage.png?alt=media&#x26;token=26ea1304-d3d6-4fbf-a65b-27191a7be232" alt=""><figcaption></figcaption></figure>

#### 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 コマンド)*&#x20;

{% code overflow="wrap" %}

```bash
# 秘密鍵を生成する
openssl genrsa -out myKey.rsa 4096

# クライアント認証用のユーザー証明書の CSR を作成する
openssl req -new -key myKey.rsa -sha256 -out myCSR -subj "/CN=John Smith" -addext "subjectAltName=otherName:1.3.6.1.4.1.311.20.2.3;UTF8:john.smith@contoso.net" -addext "extendedKeyUsage=1.3.6.1.5.5.7.3.2"

./enrollrenewcertificate.sh -c https://scepman.contoso.net/ api://a7a1d6c8-51b9-48ec-9ca0-a363dc2c8436 ~/certs "myCertificate" myKey.rsa 30 edbc406b-7384-414e-af8b-1a3b187b3f7e [Client_Secret] 736e80bb-3102-479b-83ba-e45c80ef723b myCSR

```

{% endcode %}

#### 考慮事項

* このスクリプトは生成された鍵を暗号化しません（パスフレーズ入力が必要なため、自動更新を可能にするために暗号化は省略されています）。
* Certificate Master からパスフレーズ保護された証明書を更新する場合、それらを更新するにはこのパスフレーズを入力する必要があります。

## 自動更新の設定

上記の bash スクリプトが実行され、すでに証明書が登録されていることを検出した場合、mTLS を使用して証明書を更新します（有効期限が近い場合）。スクリプトを定期的に実行すれば、証明書の有効期限が近づいたときに更新されることが保証されます。これを実現するには cronjob を設定できます。以下のコマンドはその例です。システムが起動している場合にコマンドを毎日実行する cronjob と、再起動時にコマンドを実行する cronjob を設定します。

{% code overflow="wrap" %}

```
(crontab -l ; echo @daily /path/to/enrollrenewcertificate.sh -s https://scepman.contoso.net/ api://a7a1d6c8-51b9-48ec-9ca0-a363dc2c8436 /path/to/certs "myCertificate" "myKeyName" 30 edbc406b-7384-414e-af8b-1a3b187b3f7e [Client_Secret] 736e80bb-3102-479b-83ba-e45c80ef723b "/CN=SubjectName,O=Organization" "DNS:webserver.contoso.com" ; echo @reboot /path/to/enrollrenewcertificate.sh -s https://scepman.contoso.net/ api://a7a1d6c8-51b9-48ec-9ca0-a363dc2c8436 /path/to/certs "myCertificate" "myKeyName" 30 edbc406b-7384-414e-af8b-1a3b187b3f7e [Client_Secret] 736e80bb-3102-479b-83ba-e45c80ef723b "/CN=SubjectName,O=Organization" "DNS:webserver.contoso.com" ) | crontab -
```

{% endcode %}

Cron によって実行されるコマンドは必ずしもスクリプト/証明書があるディレクトリから実行されるとは限らないため、スクリプト/証明書への絶対パスを指定することが重要です。&#x20;
