Skip to main content

カスタムエクステンションのデータ型とテンプレート例

DigiCert では、ASN.1 標準を使用して、DigiCert ONE DigiCert Private CA を通じて発行されるプライベート証明書のカスタムエクステンション向けに JSON ベースのテンプレートを定義しています。

証明書プロファイルの作成時に、次のとおり単一の値または値の集合で構成されるカスタムエクステンションを定義できます。

  • カスタムエクステンション内で単一の値を定義するには、基本データ型を使用します。

  • より複雑なテンプレート構造を定義するには、構造化データ型を使用します。

型の定義

カスタムエクステンションの各型定義には、以下のコンポーネントを含めることができます。必須なのは「TYPE」コンポーネントのみです。

"type" : "[[CLASS] [TAG]] [MODE] TYPE ['OPTIONAL']"

これらのコンポーネントの説明は以下のとおりです。

  • [[CLASS] [TAG]]: オプションです。より詳細なデータ識別のためにタグとそれに対応するクラスを適用するために使用します。

  • [MODE]: オプションです。タグ付けモード(「IMPLICIT」または「EXPLICIT」)を定義するために使用します。デフォルトは「IMPLICIT」です。

  • TYPE: 必須です。カスタムエクステンションに含まれるデータ型を定義します。詳細については、以下の「basic data types」と「constructed data types」を参照してください。

  • ['OPTIONAL']: オプションです。カスタムエクステンションまたはカスタムエクステンションフィールドがオプションであることを示すには、「OPTIONAL」をそのまま入力します。

基本データ型

カスタムエクステンションの作成には、以下の基本データ型のいずれかを使用します。

データ型

説明

AutoString

値は「PrintableString」または「UTF8String」のいずれかです。

AutoTime

値は「UTCTime」(2050 年以前)または「GeneralizedTime」(2050 年以降)のいずれかです。

BIT STRING

バイナリの文字列(Base64 エンコード)。値の後にオプションでビット数を指定可能。ビット数指定がない場合、バイナリ値の長さの 8 倍に設定されます。

BMPString

String that contains Unicode characters from the Basic Multilingual Plane (BMP).

BOOLEAN

「true」または「false」。

DER ENCODED

バイナリの DER データ(Base64 エンコード)。

IA5String

IA5/ASCII 文字セットの文字のみを含む文字列。

INTEGER

整数、または整数値を含む文字列のいずれか。

NULL

値なし。

NumericString

数字とスペースのみを含む文字列。

OBJECT IDENTIFIER

OID 値。

OCTET STRING

バイナリの文字列(Base64 エンコード)。

PrintableString

英字、数字、および限定された特殊文字のセットを含む文字列。

UTF8String

Unicode 文字を含むことができる文字列。

構造化データ型

基本データ型のより複雑な集合を含むカスタムエクステンションを定義するには、以下の構造化データ型のいずれか 1 つを使用します。構造化型の基盤となる構造を指定するには、JSON テンプレートに対応する structure の要素を含めます。

  • SEQUENCE

  • SEQUENCE OF

  • SET OF

注記

ASN.1 標準に関する詳細情報(データ型と各データ型の許容値を含む)については、ITU-T の Web サイトを参照してください。

基本データ型を使用したテンプレートの例

カスタムエクステンションの構造を定義するには、「template」JSON オブジェクトを使用します。

次の例では、カスタムエクステンションは単一の値で構成されています。以下の点に注意してください。

  • これらの例では、「type」プロパティは基本データ型を参照します。

  • value」プロパティは、登録時に実際の値を指定するために参照可能なプレースホルダー名を定義します。

例 1:

"template": {
    "type": "BOOLEAN",
    "value": "${is_staging_server}"
}

単一のブール値を含むカスタムエクステンションを定義します。登録時に値を指定するには、プレースホルダー名「is_staging_server」を対象にします。

例 2:

"template": {
    "type": "PrintableString OPTIONAL",
    "value": "${server_location}"
}

PrintableString」型の単一の文字列を含むカスタムエクステンションを定義します。このエクステンションはオプションとみなされます。登録時に値を指定するには、プレースホルダー名「server_location」を対象にします。オプションと示されているため、管理者は Trust Lifecycle Manager のユーザーインターフェース経由で証明書を登録する際に、このエクステンションの値を指定するよう厳密に求められているわけではありません。

構造化データ型を使用したテンプレートの例

より複雑なデータ構造のカスタムエクステンションテンプレートを定義するには、構造化データ型(「SEQUENCE」、「SEQUENCE OF」、または「SET OF」)のいずれか 1 つを使用し、対応する「structure」オブジェクトを JSON 内で指定して他のデータ型の集合を記述します。

例 1(フラット構造)

"template": {
    "type": "SEQUENCE",
    "structure": [
      {
        "type": "PrintableString",
        "value": "${user_name}"
      },
      {
        "type": "BOOLEAN",
        "value": "${is_manager}"
      },
      {
        "type": "INTEGER",
        "value": 1
      },
      {
        "type": "UTF8String OPTIONAL",
        "value": "${user_background}"
      }
    ]
}

この例では次の結果が得られます。

  • このカスタムエクステンションは、さまざまなデータフィールドで構成されるフラットな構造を採用しています。

  • INTEGER」フィールドはすべての証明書に適用される固定値が含まれます。

  • その他のフィールドにはすべてプレースホルダー名があり、登録時に動的に値を割り当てる対象となります。

  • UTF8String」フィールド(user_background)はオプションと示されています。管理者は Trust Lifecycle Manager のユーザーインターフェース経由で登録する際に、このフィールドの値を指定するよう厳密に求められているわけではありません。

例 2(ネスト構造)

"template": {
    "type": "SEQUENCE",
    "structure": [
      {
        "type": "INTEGER",
        "value": "${user_id_number}"
      },
      {
        "type": "SEQUENCE",
        "structure": [
            {
              "type": "PrintableString",
              "value": "${user_dob}"
            },
            {
              "type": "PrintableString",
              "value": "${user_security_clearance}"
            }
        ]
      }
   ]
}

この例では次の結果が得られます。

  • このカスタムエクステンションは、ネスト化されたデータ構造を採用しています。

  • この構造は、「INTEGER」フィールド(user_id_number)と、ネスト化された 2 つの「PrintableString」フィールド(「user_dob」と「user_security_clearance」)の集合で構成されています。

  • 登録時にフィールドに値を割り当てるには、基本となるプレースホルダー名を対象とします。発行された証明書では、カスタムエクステンションの値はテンプレートの構造と同じ構造になります。