Skip to main content

スクリプトタイプ

DigiCert​​®​​ Trust Lifecycle Manager は、サーバーでのエージェントベースの証明書ライフサイクル管理をカスタマイズするために、以下のスクリプトタイプをサポートしています。各スクリプトタイプの詳細については、それぞれのリンクを選択してください。

スクリプトタイプ

説明

カスタム自動化

カスタムサーバーアプリケーション用の証明書を管理する

SNI 情報

DigiCert エージェントが使用する SNI ドメインの情報を動的に取得し、証明書を検出および管理する

インストール前

自動化イベント中、Web サーバーアプリケーション用の証明書のインストールに、追加作業を実行する

インストール後

自動化イベント中、Web サーバーアプリケーション用の証明書のインストールに、追加作業を実行する

配信後の管理者要求

証明書をサーバーシステムに配信した後、Admin web request 登録方法を使用して追加作業を実行する

重要

カスタムエージェントスクリプトでは、ホストオペレーティングシステムに基づき、以下のいずれかの言語を使用します。

  • Windows: bat、cmd、または PowerShell スクリプト

  • Linux: シェルスクリプト(任意)

作業を実行するために別の言語/形式を使用する場合は、上記のいずれかのスクリプト言語をラッパーとして使用して互換性を確保します。

カスタム自動化

DigiCert エージェントを通してカスタムサーバーアプリケーション用の証明書を管理するために、カスタム自動化スクリプトを使用します。

このタイプのスクリプトでは、サーバーで独自の ACME クライアント形式の Certbot を使用して、Trust Lifecycle Manager によってネイティブにサポートされていないアプリケーションの証明書ライフサイクルを管理することができます。

アプリケーション用の証明書の要求とインストールに必要なオプションを使用してサードパーティの ACME クライアントを起動するカスタム自動化スクリプトを構成します。

詳細については、「カスタムアプリケーションの管理下の自動化を設定する」を参照してください。

SNI 情報

Trust Lifecycle Manager では、SNI(サーバー名表示)を使用して Web サイト上の証明書を検出および自動化するために、管理者がアクティブなドメインのリストを提供する必要があります。SNI 情報スクリプトを使用して、サーバー上の SNI FQDN(完全修飾ドメイン名)の情報を動的に取得できるため、SNI FQDN を手動で設定する必要はありません。

たとえば、DigiCert エージェントが常に最新情報を得られるようにするために、Web サーバー構成から直接 SNI FQDN を読み取る方法があります。

管理を簡素化するために、Trust Lifecycle Manager では、スクリプトを複数のエージェントに一括で割り当てることができます。

スクリプト出力形式

SNI FQDN 情報を JSON として次の形式で出力する SNI スクリプトをセットアップします。

1. SNI 情報スクリプトの JSON 出力形式
[
   {
        "IP": "10.1.2.3",
        "Port": "8443",
        "Domain": "www.example.com"
    },
    {
        "IP": "10.1.2.3",
        "Port": "8443",
        "Domain": "app2.example.com"
    }
]

スクリプトの例(PowerShell)

次の SNI 情報スクリプトの例は、Microsoft PowerShell スクリプト言語を使用して、ローカル IIS Web サーバーから最新の SNI 情報を読み取ります。このスクリプトは、ローカルの DigiCert エージェントを動的に構成するために使用される情報を JSON 形式で出力します。

2. IIS Web サーバーアプリケーション用の SNI 情報スクリプト(PowerShell)
$bindingInfo = get-website | select -ExpandProperty Bindings | Select -ExpandProperty Collection | where sslFlags -eq 1 | select bindingInformation

$res = @{}

foreach($ele in $bindingInfo) {
        $list = $ele.bindingInformation.split(":")
        $res[$list[2]] = @{IP=$list[0]; Port=$list[1]; Domain=$list[2]}
}

$thumbs = Get-ChildItem IIS:SSLBindings | Foreach-Object {
        [PSCustomObject]@{
                Host       = $_.Host
                Thumbprint = $_.Thumbprint
        }
}

echo($res.values | ConvertTo-Json)

インストール前/後

インストール前/後スクリプトは、自動化イベントの前(インストール前)、または自動化イベントでローカルの DigiCert エージェントが証明書をインストールした後で(インストール後)、追加作業を実行するために使用します。

このタイプのスクリプトでは、サーバーで PKI オペレーションを容易にするために必要な、レディネステスト、準備、クリーンアップなど、あらゆるタイプの作業を実行できます。Web サーバーアプリケーションごとに、さまざまなインストール前/後スクリプトを使用できます。

管理を簡素化するために、Trust Lifecycle Manager では、スクリプトを複数のエージェントに一括で割り当てることができます。

戻りコード

インストール前スクリプトが成功した場合は 0 を返し、失敗した場合は 0 以外の値を返します。戻りコード 1127、または 4294770688 の使用は避けてください。これらは他の目的のためにエージェントによって事前定義されています。

インストール前スクリプトを使用すると、DigiCert エージェントは、スクリプトから成功コード 0 が返されなければ、自動化イベントをキャンセルします。これは、証明書が外部入力に基づいて自動化されるタイミングを制御するのに役立ちます。

配信後の管理者要求

このスクリプトタイプは、管理者ウェブ要求登録方法によりTrust Lifecycle Manager から外部サーバーシステムに証明書を配信した後、追加作業を実行する場合に使用します。

配信後スクリプトをエージェントベースの証明書自動化イベントに割り当てるとき、ターゲットホストに渡してホストでのスクリプトの実行方法を制御するパラメータを、最大 5 つ入力できます。

スクリプト実行データ

証明書配信イベント中に、ローカルの DigiCert エージェントは、スクリプト関連のデータを Base64 でエンコードされた JSON 形式で DC1_POST_SCRIPT_DATA 環境変数に追加します。配信後スクリプト内のこの変数をターゲットにしてデコードし、Trust Lifecycle Manager からパラメータのリストとその他の関連情報の提供を受け、配信された証明書の処理に役立てます。以下に例を示します。

  • Windows システムで PKCS#12 証明書(ファイル拡張子は .pfx)の配信後にデコードされた DC1_POST_SCRIPT_DATA 環境変数値の例:

    {"args":["abc", "def"],"certfolder":"C:\Program Files\DigiCert\TLM Agent\.secrets","files":["my-cert-1.pfx"], "password":"P@ssw0rd"}
  • Linux システムで X.509 証明書(ファイル拡張子は .crt)の配信後の、デコードされた DC1_POST_SCRIPT_DATA 環境変数値の例:

    {"args":["abc","def","ghi"],"certfolder":"/opt/tlm_agent/.secrets","files":["my-cert-1.crt","my-cert-1.key"]}

出力内の JSON フィールドは、配信された証明書のタイプに応じて異なります。以下のようなフィールドがあります。

JSON フィールド

説明

証明書のタイプ

args

Trust Lifecycle Manager からスクリプトに渡される、最大 5 つの追加パラメータのリスト

すべて

certfolder

証明書が配信されたディレクトリパス

すべて

files

上記のディレクトリに配信された証明書ファイルの名前

すべて

password

証明書ファイルの暗号化に使用されるパスワード

PKCS#12(PFX)、PEM、P7B

keystorepassword

証明書が配信されたキーストアのパスワード

JKS

truststorepassword

証明書が配信されたトラストストアのパスワード

JKS

スクリプトの例(PowerShell)

次の配信後スクリプトの例は、Microsoft PowerShell スクリプト言語を使用して、配信された PKCS#12(PFX)証明書を Windows システムの LocalMachine\My 証明書ストアにインポートします。このスクリプトは、DC1_POST_SCRIPT_DATA 環境変数に設定されている JSON をデコードして解析し、証明書のファイル名、パスワード、およびローカルの DigiCert エージェントによって証明書が配信されたディレクトリを判別します。

# Function to decode base64 encoded string
function Decode-Base64 {
    param (
        [string]$base64String
    )
    $bytes = [System.Convert]::FromBase64String($base64String)
    $decodedString = [System.Text.Encoding]::UTF8.GetString($bytes)
    return $decodedString
}

# Base64 encoded JSON input
$base64Json = [System.Environment]::GetEnvironmentVariable("DC1_POST_SCRIPT_DATA")

# Decode the base64 encoded JSON
$jsonString = Decode-Base64 -base64String $base64Json

# Convert JSON string to PowerShell object
$jsonObject = $jsonString | ConvertFrom-Json

Write-Host "Arguments : "$jsonObject.args

# Extract values from JSON object
$certFolder = $jsonObject.certfolder
$pfxFile = Join-Path -Path $certFolder -ChildPath $jsonObject.files[0]
$password = $jsonObject.password

# Validate inputs
if (-not (Test-Path -Path $pfxFile)) {
    Write-Error "ERROR: The PFX file does not exist."
    exit 1
}

# Import the PFX file into the LocalMachine\My store
try {
    $cert = Import-PfxCertificate -FilePath $pfxFile -CertStoreLocation Cert:\LocalMachine\My -Password (ConvertTo-SecureString -String $password -Force -AsPlainText)
    if ($null -eq $cert) {
        throw "Failed to import the certificate."
    }
    Write-Output "Certificate imported successfully."
} catch {
    Write-Error "ERROR: Failed to import the certificate. $_"
    exit 1
}

スクリプトの例(Bash シェル)

次の配信後スクリプトの例は、Bash シェルスクリプト言語を使用して、配信された X.509(CRT)証明書を、ca-certificates パッケージがインストールされた Red Hat ベースの Linux システム上の信頼された CA ディレクトリ /etc/pki/ca-trust/source/anchors にインポートします。このスクリプトは、DC1_POST_SCRIPT_DATA 環境変数に設定されている JSON をデコードして解析し、証明書のファイル名、およびローカルの DigiCert エージェントによって証明書が配信されたディレクトリを判別します。

#!/bin/bash

# Step 1: Read the Base64-encoded JSON string from the environment variable
CERT_INFO=${DC1_POST_SCRIPT_DATA}

if [[ -z "$CERT_INFO" ]]; then
    echo "Error: Environment variable 'DC1_POST_SCRIPT_DATA' is not set or is empty."
    exit 1
fi

# Step 2: Decode the Base64 string into JSON
JSON_STRING=$(echo "$CERT_INFO" | base64 -d)

# Step 3: Parse JSON manually to extract 'certfolder' and '.crt' file
CERT_FOLDER=$(echo "$JSON_STRING" | grep -oP '"certfolder":"\K[^"]+')
CRT_FILE=$(echo "$JSON_STRING" | grep -oP '"files":\["\K[^"]+\.crt')

if [[ -z "$CERT_FOLDER" || -z "$CRT_FILE" ]]; then
    echo "Error: Invalid JSON data. Could not find 'certfolder' or '.crt' file."
    exit 1
fi

# Step 4: Construct full path to the certificate file
CRT_FILE_PATH="${CERT_FOLDER}/${CRT_FILE}"

if [[ ! -f "$CRT_FILE_PATH" ]]; then
    echo "Error: Certificate file not found at path '$CRT_FILE_PATH'."
    exit 1
fi

# Step 5: Copy the certificate to the system's trusted CA directory
TRUSTED_CA_DIR="/etc/pki/ca-trust/source/anchors"
DEST_CRT_FILE="${TRUSTED_CA_DIR}/$(basename "$CRT_FILE")"

echo "Copying certificate to trusted CA directory..."
sudo cp "$CRT_FILE_PATH" "$DEST_CRT_FILE"

# Step 6: Update the system's trusted certificates
echo "Updating trusted certificates..."
sudo update-ca-trust extract

if [[ $? -eq 0 ]]; then
    echo "Certificate successfully added to the system's trusted certificates."
else
    echo "Error: Failed to update the trusted certificates."
    exit 1
fi

スクリプト実行を検証する

配信後スクリプトの場合、Trust Lifecycle Manager Web コンソールには実行ステータスやエラー表示は示されません。

スクリプト実行を検証し、エラーを特定するには、Trust Lifecycle Manager プラグインマネージャー(TPM)のローカル DigiCert エージェントに関するログをチェックします。詳細については、「エージェントをトラブルシューティングする」を参照してください。