# 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** 既存の証明書署名要求を送信するため

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

{% 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. App Service URL

SCEPman アプリ サービスの URL です。

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

#### 3. API スコープ

これは ***アプリケーション ID URI*** を ***SCEPman-api*** アプリ登録で作成できる 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. 証明書拡張

これはサブジェクトの別名として追加されます

*例: 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;
