# Macでのリモートアクションスクリプトの署名（クラシック）

以下はMacデバイスでリモートアクションスクリプトを署名するためのステップバイステップガイドです。

{% hint style="info" %}
本番環境では、コード署名証明書の使用をお勧めします。
{% endhint %}

## 証明書を作成する <a href="#signingremoteactionscriptsonmac-classic-createyourcertificate" id="signingremoteactionscriptsonmac-classic-createyourcertificate"></a>

* Macデバイスでキーチェーンアクセスを起動します。
* キーチェーンアクセス > 証明書アシスタント > **証明書を作成...** に進みます。

<figure><img src="https://3549141153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeLm8O7QKZDn6z806e7Sv%2Fuploads%2Fgit-blob-60ca3c99acf701c49083aa135c2b9b75affdb20f%2Fimage-20231026-133403%20(1).png?alt=media" alt="Create a certificate" width="760"><figcaption></figcaption></figure>

* 証明書の名前を入力してください。
* **証明書タイプ** に **Code Signing** を選択します。
* テスト目的の場合、**デフォルトをオーバーライドする** は未選択のままでかまいません。

<figure><img src="https://3549141153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeLm8O7QKZDn6z806e7Sv%2Fuploads%2Fgit-blob-d552e086d77e8861b670ebbce07775b6cc3e1fc9%2Fimage-20210723-101154%20(1).png?alt=media" alt=""><figcaption></figcaption></figure>

* **作成** をクリックして、**完了** をクリックします。 システムが証明書を生成しました。

<figure><img src="https://3549141153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeLm8O7QKZDn6z806e7Sv%2Fuploads%2Fgit-blob-9a05899661f21fb6fe4a1a9db47cb075e2bc6de4%2Fimage-20210723-101311%20(1).png?alt=media" alt=""><figcaption></figcaption></figure>

## リモートアクションスクリプトの署名とパッケージ化 <a href="#signingremoteactionscriptsonmac-classic-signingandpackagingaremoteactionscript" id="signingremoteactionscriptsonmac-classic-signingandpackagingaremoteactionscript"></a>

### 署名 <a href="#signingremoteactionscriptsonmac-classic-signing" id="signingremoteactionscriptsonmac-classic-signing"></a>

標準のmacOSコードサインユーティリティを使用してリモートアクションスクリプトに署名します。

```
codesign -s <your certificate identity> --timestamp --prefix=<code signature identifier prefix> --force <script file name>
```

パラメーター：

```
-s <your certificate identity>
```

コード署名証明書のアイデンティティはキーチェーンにあります。 一般的には、証明書のサブジェクトコモン名または証明書のハッシュです。 完全な説明については、[codesign マニュアルページ](https://www.unix.com/man-page/osx/1/codesign/)を参照してください。

```
--timestamp
```

署名のための信頼できるタイムスタンプ。

```
--prefix
```

コード署名識別子のプレフィックス。 これにより、識別子に会社のアイデンティティを付加し、識別子をユニークにするのに役立ちます。 コード署名識別子生成ルールについては、[codesign マニュアルページ](https://www.unix.com/man-page/osx/1/codesign/)を参照してください。

```
--force
```

既に存在する場合、コード署名を強制的に書き換えます。

### **例**

*example\_ra\_script.sh* リモートアクションスクリプトのためのテスト証明書の例:<br>

```
codesign -s "RA scripts code signing certificate" --timestamp --prefix=com.my-organisation.remote-action.macos. --force example_ra_script.sh
```

\
スクリプトファイルの署名は、ファイルに付随するファイルシステムの拡張属性で生成されます。 コード署名の詳細を取得し、署名を検証するには、codesignユーティリティを使用してください。

<figure><img src="https://3549141153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeLm8O7QKZDn6z806e7Sv%2Fuploads%2Fgit-blob-c967761b49bc8e192f842f1abe0d24d6cd074de0%2Fimage-20210723-101721%20(1).png?alt=media" alt="Screenshot of the terminal" width="742"><figcaption></figcaption></figure>

<figure><img src="https://3549141153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeLm8O7QKZDn6z806e7Sv%2Fuploads%2Fgit-blob-3b5402fb5768865a585eb7eeaa91e14524c5988d%2Fimage-20210723-101735%20(1).png?alt=media" alt="Screenshot of the terminal" width="742"><figcaption></figcaption></figure>

### パッケージング <a href="#signingremoteactionscriptsonmac-classic-packaging" id="signingremoteactionscriptsonmac-classic-packaging"></a>

リモートアクションスクリプトを.tarアーカイブと.gzip圧縮でパッケージします。 拡張子".tar.gz"は必須です。

```
tar -czvf ./<your script name>.tar.gz ./<your script name>.sh
```

スクリプトファイルが署名されている場合、tarユーティリティはその拡張属性もパックします。 このようにして、システムはコード署名をスクリプトファイルと共に転送することができます。\
\
**制約**

* 1つのアーカイブには1つのスクリプトのみを入れることができます。
* スクリプトファイルはルートパッケージフォルダーに入れる必要があり、`./myscript/myscript.sh`パスは正しくありません。
* スクリプトは.sh拡張子を持っている必要があります。
* スクリプトファイル名は、macOSでデフォルトであるUTF-8でエンコードされている必要があります。

### **例**

`test.sh`スクリプトのパッケージングの例：

```
tar -czvf ./example_ra_script.tar.gz ./example_ra_script.sh
```

結果として得られる`example_ra_script.tar.gz`は、リモートアクションスクリプトファイルです。

#### リモートアクションスクリプトの署名とパッケージ化 <a href="#signingremoteactionscriptsonmac-classic-signingandpackagingaremoteactionscript.1" id="signingremoteactionscriptsonmac-classic-signingandpackagingaremoteactionscript.1"></a>

Nexthinkは、このスクリプトを使用して署名とパッケージ化のプロセスを簡素化することを推奨します。

```
#!/bin/bash
#
# script_signing.sh
# 
# Copyright (C) 2023 by Nexthink S.A., Switzerland. Any usage, copy or partial copy of
# this code without the explicit agreement of Nexthink S.A. is prohibited and will be
# pursued to the full extend of the law.
#
# The arguments for the script:
# - input script filename
# - output archive filename
# - Certificate owner
# - Prefix
#
 
 
# エラーハンドリング
set -euo pipefail
trap "echo unrecoverable error !" ERR
 
 
# codesignの確認
if [[ ! -x /usr/bin/codesign ]]
then
    echo "Error: this script requires that codesign is installed"
    exit 2
fi
 
# tarの確認
if [[ ! -x /usr/bin/tar ]]
then
    echo "Error: this script requires that tar is installed"
    exit 2
fi
 
 
# 引数の確認
if [[ $# -lt 4 ]]
then
    echo "Usage: script_signing.sh inputScriptFilename outputArchiveFilename CertificateOwner prefix"
    echo "Example: ./script_signing.sh script.sh script.tar.gz \"John Doe\" com.john.remote-action.macos."
    exit 1
fi
 
/usr/bin/codesign -s "$3" --timestamp --prefix="$4" --force "$1"
/usr/bin/tar czf "$2" "$1"
```

### エンドポイントにインストールするためのコード署名証明書のエクスポート <a href="#signingremoteactionscriptsonmac-classic-exportingacodesigningcertificatetoinstallonendpoints" id="signingremoteactionscriptsonmac-classic-exportingacodesigningcertificatetoinstallonendpoints"></a>

コード署名証明書がキーチェーンにある場合、その公開版をエンドポイントにインストールするには、まずエクスポートする必要があります。<br>

<figure><img src="https://3549141153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeLm8O7QKZDn6z806e7Sv%2Fuploads%2Fgit-blob-f3f7592c725fb91bf46b71979d822cfe6c1b332a%2Fimage-20210723-102807%20(1).png?alt=media" alt=""><figcaption></figcaption></figure>

* ポップアップウィンドウで、公開証明書として *Certificate (.cer)* ファイル形式を選択します。

### エンドポイントのキーチェーンにコード署名証明書をインポート <a href="#signingremoteactionscriptsonmac-classic-importingacodesigningcertificatetothekeychainonendpoints" id="signingremoteactionscriptsonmac-classic-importingacodesigningcertificatetothekeychainonendpoints"></a>

* コード署名された証明書をシステムキーチェーンにインポートし、*Trusted Publisher* 実行ポリシーでリモートアクションスクリプトを使用します。
* .cerファイルをダブルクリックし、**Keychain** ドロップダウンメニューで **System** オプションを選択します。

<figure><img src="https://3549141153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeLm8O7QKZDn6z806e7Sv%2Fuploads%2Fgit-blob-0dd5dff3d4fb25f407c4806aa54f83944f0ae9bd%2Fimage-20210723-102902%20(1).png?alt=media" alt="Add certificates" width="745"><figcaption></figcaption></figure>

* 証明書をインポートするには、ルートパスワードをEnterします。

証明書が自己署名されている場合、コード署名にも信頼される必要があります。

* ユーティリティのキーチェーンアクセス証明書をダブルクリックし、**コード署名** オプションで **常に信頼** を選択します。

<figure><img src="https://3549141153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeLm8O7QKZDn6z806e7Sv%2Fuploads%2Fgit-blob-9aaf51e861fafb10d3b239ddfff2fd12873e92e1%2Fimage-20210723-102935%20(1).png?alt=media" alt="Certificate details"><figcaption></figcaption></figure>

これらのタスクを自動化するには、[セキュリティユーティリティ](https://www.unix.com/man-page/osx/1/security/)（外部リンク）または自分の自動化フレームワークを使用してください。

### 証明書がエンドポイントに正しくインポートされたことを確認する <a href="#signingremoteactionscriptsonmac-classic-verifythatthecertificatewasproperlyimportedtoanendpoint" id="signingremoteactionscriptsonmac-classic-verifythatthecertificatewasproperlyimportedtoanendpoint"></a>

* 署名されたリモートアクションスクリプトをエンドポイントにコピーして展開します。

```
tar -xzvf example_ra_script.tar.gz
```

* 署名を検証します。

```
codesign -vvvv -R="certificate leaf trusted" example_ra_script.sh
```

署名が正しくインポートされている場合、次の出力が表示されるはずです：

<figure><img src="https://3549141153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeLm8O7QKZDn6z806e7Sv%2Fuploads%2Fgit-blob-9828e7e7115722833c9057a116e7529e4a591e3c%2Fimage-20210723-103057%20(1).png?alt=media" alt="" width="745"><figcaption></figcaption></figure>

***

関連トピック

* [MacでのFinder用リモートアクションのためのスクリプトを書く（クラシック）](https://docs.nexthink.com/platform/ja/user-guide/remote-actions/remote-actions-in-finder-classic/writing-scripts-for-remote-actions-on-mac-for-finder-classic)
