導入部で読者を直接引き付けるために、上記のライブラリの機能の短いリストを示します。
- オブジェクト指向コード
- HTML5での作業(ArrayBuffer、Promises、WebCrypto(Google Chromeの「dev nightly build」を使用);
- 次のオブジェクトのデータを作成、検証、受信、変更する機能:
- X.509証明書
- レビューリスト(CRL)X.509
- 証明書リクエスト(PKCS#10)
- OCSPリクエスト;
- OCSPサーバーの応答
- タイムスタンプ(TSP)リクエスト
- TSPサーバーの応答
- CMS署名データ
- CMSエンベロープデータ
- JavaScriptで独自の「証明書チェーン検証エンジン」を実装します。
- ...その他多数! カットの下を見てください!
ライブラリとそのヘルプを使用してできることの詳細。
ASN1js
ASN1jsライブラリはASN.1 BERデータエンコーダー/デコーダー(基本エンコーディングルール)です。つまり、自動的にDERおよびCERルールセットを操作できます。 このライブラリでは、データのエンコード/デコードに加えて、ASN.1オブジェクトのわかりやすいスキームを作成したり、デコードされたASN.1 BERデータを以前に作成したスキームとさらに比較したりすることもできます。
このライブラリの一連の機能をリストします。
- 完全にオブジェクト指向のコード、継承機能の継続的な使用。
- HTML5標準(ArrayBuffer)のオブジェクトを操作する
- すべてのデータタイプASN.1:2008で作業する
- このライブラリのすべてのデータタイプには、すべてのサブブロックに関する情報が格納されます。識別サブブロック(タグ)、長さのサブブロック(長さ)、および値のサブブロック(値)。
- ユーザーはいつでもサブブロックから特定のバイトにアクセスできます。
- 標準で説明されているように、すべてのサブユニットの長さは無制限です(識別サブユニットも含む)。
- 国際文字列で動作する型を含むすべてのASN.1文字列データ型での本格的な動作:UniversalString、BMPString、UTF8String。 JavaScriptの標準文字列は、ASN.1文字列型のコンストラクターへの入力として使用できます。 逆もまた真です-ASN.1の文字列データ型をデコードすると、標準JavaScript文字列へのデコードが自動的に行われます(オブジェクトフィールドとして格納されます)。
- 「日時」タイプのASN.1データタイプについても同様です。 主なデータ型(UTCTimeおよびGeneralizedTime)の場合、通常のJavaScriptを使用してDateオブジェクトを初期化できます。 逆変換も当てはまります-デコード時に、これらのタイプの値はJavaScriptタイプ「Date」で自動的にデコードされます。
- わかりやすいASN.1回線を使用します。
- ライブラリは、ASN.1スキームを操作するために次の特別なタイプを提供します。
- なんでも
- チョイス
- 繰り返し
- ユーザーは、ASN.1スキーマ内に名前付きブロックを作成し、後で名前で必要なASN.1データを受け取ることができます。
- ライブラリ内のすべてのタイプは動的です。
- すべてのタイプのライブラリは、動的に、および静的データをコンストラクタに渡すことによって初期化できます。
ライブラリには多くの例があります(GitHubを参照)。 さらに、設計された別のライブラリであるPKIjsは、ASN1jsライブラリを使用する最大の「例」かもしれません。
PKIjs
このライブラリはもともと、最も単純なものから最も複雑なものまで、PKIソリューションの本格的な構造を作成するための基礎として考えられていました。 ユーザーがそれを操作するのが便利である必要があり、データに簡単にアクセスでき、簡単に変更できる必要があります。 ライブラリには、必要なすべてのPKI関連構造(GeneralName、さまざまなタイプのX.509証明書拡張など)を操作するための50を超える「ヘルパー」があります。 ライブラリは多層構造であり、簡単に変更および補足できます。 GitHubでは、「問題」セクションでこのライブラリの現在の開発計画を確認できます。
このライブラリの一連の機能をリストします。
- 完全にオブジェクト指向のコード
- 最新の標準(ArrayBuffer、Promises、WebCrypto(最新のGoogle Chromeナイトビルドを使用)のデータ型を操作します);
- 次のような補助型を操作するためのオブジェクトの完全なセットがあります。
- GeneralName
- RelativeDistinguishedName;
- 時間
- AlgorithmIdentifier;
- すべての標準タイプのX.509証明書拡張機能。
- OCSPリクエストおよびレスポンスを操作するためのすべての補助オブジェクト。
- タイムスタンププロトコル(TSP)で動作するすべての補助オブジェクト。
- PromisesとWebCryptoを使用して、独自の証明書チェーンエンジン検証機能をJavaScriptで完全に実装しました。
- PKIに関連するすべての主要なデータタイプで作業を実装しました。
- X.509証明書
- ネストされたものを含む、証明書のすべてのフィールドに関する情報の取得。
- 内部構造の作成および変更。
- 最初から証明書を作成する機能。
- 組み込みの「認証チェーン検証エンジン」。
- 証明書失効リスト(CRL)X.509
- ネストされたものを含む、構造のすべてのフィールドに関する情報の取得。
- 内部構造の作成および変更。
- 「ゼロから」CRLを作成する機能。
- デジタル署名CRLの有効性を検証する機能。
- CRLへのエントリの証明書の組み込み検索機能。
- PKCS#10証明書リクエスト
- ネストされたものを含む、構造のすべてのフィールドに関する情報の取得。
- 内部構造の作成および変更。
- 「ゼロから」PKCS#10を作成する機能。
- デジタル署名PKCS#10の精度を検証する機能。
- OCSPリクエスト
- ネストされたものを含む、構造のすべてのフィールドに関する情報の取得。
- 内部構造の作成および変更。
- 最初からOCSP要求を作成する機能。
- OCSPサーバーの応答
- ネストされたものを含む、構造のすべてのフィールドに関する情報の取得。
- 内部構造の作成および変更。
- 最初からOCSPサーバー応答を作成する機能。
- OCSPサーバーの応答のデジタル署名を検証する機能。
- タイムスタンププロトコル(TSP)要求
- ネストされたものを含む、構造のすべてのフィールドに関する情報の取得。
- 内部構造の作成および変更。
- 最初からTSP要求を作成する機能。
- TSP要求のデジタル署名の正当性を検証する機能。
- TSPサーバーの応答
- ネストされたものを含む、構造のすべてのフィールドに関する情報の取得。
- 内部構造の作成および変更。
- 「ゼロから」応答TSPサーバーを作成する機能。
- TSPサーバーの応答のデジタル署名の正当性を検証する機能。
- CMS署名データ
- ネストされたものを含む、構造のすべてのフィールドに関する情報の取得。
- 内部構造の作成および変更。
- 「ゼロから」CMS署名データを作成する機能。
- デジタル署名CMS署名データの正確性を検証する機能。
- CMSエンベロープデータ
- ネストされたものを含む、構造のすべてのフィールドに関する情報の取得。
- 内部構造の作成および変更。
- CMSエンベロープデータおよびキー管理を作成する機能は、近い将来の開発のために計画されています。
- X.509証明書
そして今、PKIjs + ASN1jsを使用して作成できることの少し:
- 完全にJavaScriptの認証局。
- OCSPサーバーは完全にJavaScriptです。
- 完全にJavaScriptのTSPサーバー。
- OCSPおよびTSPサーバーのクライアントは完全にJavaScriptで動作します。
- JavaScriptで完全に「CryptoARM」のような「暗号化ワークベンチ」。
- S / MIMEを操作するためのツール。
- CAdESと連携するためのライブラリ。
- Webページ上のドキュメントでデジタル署名を操作するためのサポートのさまざまなライブラリ。
- さらに多く!
これらのライブラリに関する質問については、著者として直接連絡してください。 繰り返しますが、これらのライブラリーのリポジトリーであるASN1jsおよびPKIjsを思い出します。 すべてのコメントと提案を受け付けます。
PS:2014年5月7日から追加-CMS署名付きデータ+ CSMエンベロープデータに関する情報を追加するのを忘れて、修正しました。