当社の主力製品は、ロシア語のオンボード暗号化を備えたデバイスであるRutoken EDSです。 デバイスをブラウザーと統合するために、
Rutokenプラグインがリリースされました。 プラグインの機能のデモは、
テストサイトで表示でき
ます 。 それらのいくつかは、デバイスに保存されたデジタル証明書の操作を伴います。 たとえば、ユーザーを登録するとき、
デモバンクはユーザー証明書を発行し、システムにログインすると、それを要求してチェックします。 これらのタスクをサーバーに実装するには、BouncyCastleライブラリが使用されます。

この記事では、PKCS#10の要求に応じて証明書を発行し、ロシアの暗号化アルゴリズムによって生成されたCMS署名を検証するための使用例について説明します。
「認証局」は、BouncyCastleライブラリに基づいています。 サイト
bouncycastle.org/csharp/には、修正なしではソリューションで動作しなかった古いバージョンのライブラリが含まれていることに注意してください。 作業バージョンはgithub-
https://github.com/bcgit/bc-csharpで取得でき
ます 。
また、さまざまなニーズにライブラリを使用するための一連のオプションを使用したテストもあります。
これらのすべてのうち、多くは必要ありません。
-PKCS#10リクエストを処理する
-要求に応じた証明書の発行
証明書を使用してサイトへのアクセスを整理する必要がある場合は、以下で別のアルゴリズムを実装します。
ルート証明書はライブラリによって生成され、後で使用できます。 PEM形式で既にあります。 秘密鍵もあります。
お客様
私たちのシステムでは、ASP.NET web-apiを備えたIISサーバーは、PKCS#10の要求によって証明書を発行する方法で外の世界を調べます。 クライアント上、つまりデモサイト自体で、
プラグインを操作するAngularJs上のアプリケーション
が回転しています。 もちろん、クライアントなら何でも書くことができますが、クライアント側の仕事の本質は次のようになります。
-PKCS#10リクエストを作成するためのフィールドデータをcreatePkcs10プラグイン関数に渡し、リクエストテキストを取得します。
-PKCS#10リクエストのテキストは、ポストリクエストによってapiメソッドに送信されます。証明書を作成できない場合は、証明書またはエラーを取得します。
-受信した証明書をimportCertificateプラグイン関数に転送し、デバイスにインポートします。
Rutoken EDSデバイスで証明書を管理する機能を備えたサイトの作業バージョンは、現在、
http: //ra.rutoken.ruでスピンしています。 キーを作成し、必要なフィールドを使用してリクエストを行うことができます。 次に、トークンにインポートされるテスト証明書を書き出します。
! 動作するには、プラグインをインストールし、Rutoken EDSを接続する必要があります!サーバー
しかし、サーバー側に戻ります。 そのため、PEM形式のルート証明書とプライベートキーがあります。 PKCS#10のリクエストでユーザー証明書を発行します。 要求自体も、PEM形式のテキスト形式でクライアントから送信されます。
const string cCACert = @"-----BEGIN CERTIFICATE----- *** *** -----END CERTIFICATE-----"; const string cCAKey = @"-----BEGIN PRIVATE KEY----- *** *** -----END PRIVATE KEY-----";
サーバー上の署名済みCMSの検証
クライアントでCMSを生成し、サーバーに送信します。サーバーで署名と証明書のチェーンを検証します。
BouncyCastleから以下を使用します。
-署名検証署名済みCMS
-証明書チェーンの構築
すべての検証は、署名の検証、およびルートとそれに発行されたユーザーを含む証明書チェーンの構築に限定されます。 簡単にするために、中間証明書を使用せず、CRLで動作しませんが、もちろんライブラリには失効した証明書のリストをチェックする機能があります。
署名済みCMSの検証は次のように行います。
繰り返しになりますが、この例はロシアの証明書で機能するソリューションの
テストまたは
実証に適してい
ます 。