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