0

我正在为连接到 Web 服务器的 WP7 创建应用程序。我的应用程序上有服务器根证书,我需要在我的应用程序中读取它来比较整个证书路径等。这是我读取文件的代码:

var resourceStream = Application.GetResourceStream(new Uri("myCert.der", UriKind.Relative)); 
var content = Encoding.UTF8.GetBytes(new StreamReader(resourceStream.Stream).ReadToEnd()); 
X509Certificate cert = new X509Certificate(content);

但在最后一行出现异常:

[Cryptography_LegacyNetCF_UnknownError] 参数:80092009 调试资源字符串不可用。通常,关键和论据提供了足够的信息来诊断问题。请参阅http://go.microsoft.com/fwlink/?linkid=106663&Version=4.0.50829.0&File=mscorlib.dll&Key=Cryptography_LegacyNetCF_UnknownError

堆栈跟踪:

在 System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr) 在 System.Security.Cryptography.X509Certificates.X509Utils._QueryCertBlobType(Byte[] rawData) 在 System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData,对象密码,X509KeyStorageFlags keyStorageFlags) 在 System.Security.Cryptography.X509Certificates.X509Certificate..ctor(Byte[] data)

在 msdn 页面http://msdn.microsoft.com/en-us/library/5128sby8(v=vs.95).aspx我读到“ASN.1 DER 是此类支持的唯一证书格式”

这正是我的格式。

您有什么想法吗,因为我认为我测试了所有内容而没有任何效果。

证书没问题,并且在控制台应用程序上加载良好。

你有什么想法,你能帮帮我吗?

预先感谢,

4

1 回答 1

1

证书包含二进制内容,您不应使用 aStreamReader来读取它(它仅用于文本)。

相反,直接从流中读取内容:

var resourceStream = Application.GetResourceStream(new Uri("myCert.der", UriKind.Relative));

var content = new byte[resourceStream.Stream.Length];
resourceStream.Stream.Read(content, 0, content.Length);

X509Certificate cert = new X509Certificate(content);
于 2013-09-01T09:29:40.693 回答