2016-12-01 32 views
4

C#アセンブリ(ターゲット.NET 4.0)で、(プログラムで)自己署名証明書を生成し、他の証明書を生成するルートCAとして機能させようとしています。証明書はWindows証明書ストアに保存する必要はなく、ファイルとしてエクスポートします。CngKey.Createで要求された操作がサポートされていません

this question(特に、@dthorpe's answer)を読んで、私はCLR Securityを試してみることにしました。これらの行のいずれかが例外を発生させる

var key = CngKey.Create(CngAlgorithm.Sha1); //same with Sha256, Sha512 and MD5 
//or 
var key = CngKey.Create(CngAlgorithm.Sha1, null, new CngKeyCreationParameters() 
{ 
    ExportPolicy = CngExportPolicies.AllowExport, 
    KeyUsage = CngKeyUsages.AllUsages, 
    KeyCreationOptions = CngKeyCreationOptions.MachineKey, 
}); 

CLR Securityライブラリは自己署名証明書を生成するためにCngKey classに拡張メソッドを置くが、私はCngKeyのインスタンスを作成することに成功しませんでした

System.Security.Cryptography.CryptographicExceptionは未処理であった
HRESULT = -2146893783
メッセージ=要求された操作はサポートされていません。 SOおよびインターネットを介して検索

Source=System.Core 
StackTrace: 
    at System.Security.Cryptography.NCryptNative.CreatePersistedKey(SafeNCryptProviderHandle provider, String algorithm, String name, CngKeyCreationOptions options) 
    at System.Security.Cryptography.CngKey.Create(CngAlgorithm algorithm, String keyName, CngKeyCreationParameters creationParameters) 
    at System.Security.Cryptography.CngKey.Create(CngAlgorithm algorithm) 
    at Tests.Program.Main(String[] args) at Program.cs:line 51 

、私は次のことをチェックしました:

  • 私はWindows 7のボックス(それがMSDNごとにRPCをサポートしています)
  • しようとしましたが実行していますよWindows Server 2012のボックスで同じエラーが発生する
  • プロセスは管理者として実行されているため(とにかくすべての証明書ストレージにアクセスできるように)
  • Th eサービスCNG Key IsolationRemote Procedure Call (RPC)が実行されています

助けていただければ幸いです。

答えて

1

小型オフトピック:この質問のためのGoogle検索時には、私は、コード失敗が含まれているtopic on MSDNを見つけSOおよびMSDN(私は単にあなたのHRESULTコード-2146893783のためにGoogleで検索)


a site with HRESULT descriptionsと便利な検索ツールを見つけました

NCRYPT_ALGORITHM_GROUP_PROPERTY L "アルゴリズムグループ" 0123:同様のHRESULTで、と著者はlink to MSDN article about CNGを提供します オブジェクトのアルゴリズムグループの名前を含む、NULLで終了するUnicode文字列。このプロパティはキーにのみ適用されます。次の識別子は、マイクロソフトのキーストレージプロバイダーによって返されます。

  • NCRYPT_RSA_ALGORITHM_GROUP
    「RSA」、RSAアルゴリズムグループ。
  • NCRYPT_DH_ALGORITHM_GROUP
    "DH"、Diffie-Hellmanアルゴリズムグループ。
  • NCRYPT_DSA_ALGORITHM_GROUP
    "DSA"、DSAアルゴリズムグループ。
  • NCRYPT_ECDSA_ALGORITHM_GROUP
    "ECDSA"、elliptic curve DSAアルゴリズムグループ。
  • NCRYPT_ECDH_ALGORITHM_GROUP
    "ECDH"、elliptic curve Diffie-Hellmanアルゴリズムグループ。

また、私はアルゴリズムの同様のリストが含まれているMSDNの記事についてCNG Key Storage Providers、実測値:

  • のDiffie-Hellmanの(DH)
    密約と鍵交換、512 to 4096 in 64-bit increments
  • デジタル署名アルゴリズム(DSA) 署名、512 to 1024 in 64-bit increments
  • 楕円曲線のDiffie-Hellmanの(ECDH) 密約と鍵交換、P256, P384, P521
  • 楕円曲線デジタル署名アルゴリズム(ECDSA) 署名、P256, P384, P521
  • RSA 非対称暗号化と署名、512 to 16384 in 64-bit increments

だから、Sha1Sha256Sha512MD5だけを試したと言われているので、別のalgorithm from list availableを使っても良いでしょうか?あなたは上記のあったものを見つけることができます。

Here other developers successfully created 1とそれをエクスポートすることができました:

var cngKey = CngKey.Create(CngAlgorithm.ECDiffieHellmanP256, null, 
    new CngKeyCreationParameters { ExportPolicy = CngExportPolicies.AllowPlaintextExport }); 
+0

、確かに、私の問題でした。ありがとうございました。リンクしたCNGキーストアプロバイダのページには、「MicrosoftがWindows VistaおよびWindows Server 2008で始まる次のKSPをインストールします。ベンダーは、他のプロバイダを作成してインストールできます。 – Dinei

関連する問題