2013-09-01 51 views
0

我正在为连接到Web服务器的WP7创建应用程序。我有我的应用程序的服务器根证书,我需要阅读我的应用程序来比较整个certifacte路径等。这里是我的代码读取文件:Windows Phone 7 - 无法在C#代码中加载证书

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小时) 在System.Security.Cryptography.X509Certificates.X509Utils._QueryCertBlobType(字节[] RAWDATA) 在系统.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(字节[] RAWDATA,对象密码,X509KeyStorageFlags keyStorageFlags) 在System.Security.Cryptography.X509Certificates.X509Certificate..ctor(字节[]数据)

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

而这正是我的格式。

你有什么想法,因为我认为我测试了一切没有任何影响。

证书没问题,并在控制台应用程序中正常加载。

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

预先感谢,

回答

1

证书包含二进制内容,你不应该使用一个StreamReader读它(它的意思为文本仅使用)。

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

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);