I am trying to create X509Certificate2
from string. Let me show an example:
string keyBase64String = Convert.ToBase64String(file.PKCS7);
var cert = new X509Certificate2(Convert.FromBase64String(keyBase64String));
and keyBase64String
has a such content: "MIIF0QYJKoZI ........hvcNAQcCoIIFwjCCBb4CA0="
and file.PKCS7
is byte array which I downloaded from database.
I've got the following exception when creating X509Certificate2
:
Cannot find the requested object
And the stack trace:
"Cannot find requested object" X509Certificate2 Exception "Cannot find
requested object"} at
System.Security.Cryptography.CryptographicException.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.d__7.MoveNext()
in
D:\Projects\WebApp\Controllers\SoupController.cs:line
118
Please, say me what I am doing wrong. Any help would be greatly appreciated!
Best Answer
If
file.PKCS7
represents a PKCS#7 SignedData blob (what gets produced fromX509Certificate2.Export(X509ContentType.Pkcs7)
orX509Certificate2Collection.Export(X509ContentType.Pkcs7)
) then there are two different ways of opening it:new X509Certificate2(byte[])
/new X509Certificate2(string)
Cannot find the original signer.
(Win 2012r2, other versions could map it to a different string)X509Certificate2Collection::Import(byte[])
/X509Certificate2Collection::Import(string)
So if it's really PKCS#7 you likely want the collection Import (instance) method. If it isn't, you have some odd variable/field/property names.