文字列からX509Certificate2
を作成しようとしています。例を示しましょう:
string keyBase64String = Convert.ToBase64String(file.PKCS7);
var cert = new X509Certificate2(Convert.FromBase64String(keyBase64String));
keyBase64String
には次のようなコンテンツがあります:"MIIF0QYJKoZI ........hvcNAQcCoIIFwjCCBb4CA0="
file.PKCS7
はデータベースからダウンロードしたバイト配列です。
X509Certificate2
の作成時に次の例外が発生しました:
リクエストされたオブジェクトが見つかりません
そしてスタックトレース:
「要求されたオブジェクトが見つかりません」X509Certificate2例外「要求されたオブジェクトが見つかりません」} System.Security.CryptographyException.ThrowCryptographicException(Int32 hr)at System.Security.Cryptography.X509Certificates.X509Utils._QueryCertBlobType(Byte [] rawData)at System。 Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte [] rawData、Object password、X509KeyStorageFlags keyStorageFlags)at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte [] rawData)at WebApp.SoupController.ove_7)) D:\ Projects\WebApp\Controllers\SoupController.cs:line 118
私が間違っていることを言ってください。どんな助けでも大歓迎です!
_file.PKCS7
_がPKCS#7 SignedData blob(X509Certificate2(Collection).Export(X509ContentType.Pkcs7)から生成されるもの)を表す場合、それを開く方法は2つあります。
new X509Certificate2(byte[])
/new X509Certificate2(string)
Cannot find the original signer.
_で失敗します(Win 2012r2、他のバージョンでは、別の文字列にマッピングできます)X509Certificate2Collection::Import(byte[])
/X509Certificate2Collection::Import(string)
したがって、それが本当にPKCS#7である場合は、おそらくコレクションのインポート(インスタンス)メソッドが必要です。そうでない場合は、変な変数/フィールド/プロパティ名があります。
X509Certificate2のコンストラクタは証明書ファイル名を取得することを期待していますが、キーを与えています( X509Certificate2コンストラクタ(String) )
KeyBase64Stringは証明書のキーであり、証明書はコードを実行するマシンにインストールされていると想定しています。これを試して:
var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
var certCollection = store.Certificates.Find(X509FindType.FindByThumbprint, keyBase64String , false);
//var certCollection = store.Certificates.Find(X509FindType.FindByKeyUsage, keyBase64String , false);
//var certCollection = store.Certificates.Find(X509FindType.FindBySubjectKeyIdentifier, keyBase64String , false);
var cert = certCollection[0];
FindByKeyUsage、FindBySubjectKeyIdentifier、または他のタイプの X509FindType Enumeration を試すこともできます