Windows Phone 7 - невозможно загрузить сертификат в коде C#

Я создаю приложение для 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 ч.) в System.Security.Cryptography.X509Certificates.X509Utils._QueryCertBlobType(Byte[] rawData) в System.Security.lotableFateTateTateTateCate9 Пароль объекта, 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);
Другие вопросы по тегам