Пример X509Certificate2 RawData для использования для модульных тестов? - PullRequest
0 голосов
/ 14 декабря 2011

Я работаю над некоторыми модульными тестами шифрования / дешифрования RSA, и для всех моих функций требуются некоторые сертификаты. Я использую внедрение зависимостей для этих сертификатов, поэтому для своих модульных тестов я хотел бы просто получить образец фиктивного (но функционального) сертификата для тестирования моей библиотеки шифрования / дешифрования. Я хотел бы сделать это путем жесткого кодирования RawData действительного сертификата в методе SetUp моих модульных тестов.

Где я могу найти что-то подобное для включения в метод SetUp моих модульных тестов? Или как я могу создать это и извлечь эти «необработанные данные»? Я не уверен, что именно это «RawData». Если у кого-то есть что-то опубликованное в сети (что, очевидно, было бы небезопасно, что хорошо для моих модульных тестов), это было бы предпочтительным (с ленивой точки зрения), но я в порядке, генерируя сертификат и извлекая также эти данные. *

Ответы [ 2 ]

3 голосов
/ 26 мая 2016

Используйте .Export () вместо .RawData

Когда X509Certificate2 имеет закрытый ключ внутри, вы можете вызвать:

var certBytes = certificateWithPrivateKey.Export(X509ContentType.Pkcs12);

, который возвращает байт [], аналогичный .RawData,но он хранит закрытый ключ.Чтобы сохранить это в модульном тесте, вы можете просто использовать строку const в качестве Base64 этих данных.Что вы получите от:

var certAsString = Convert.ToBase64String(certBytes);

Вы можете восстановить ключ из этого байта [], создав для него X509Certificate2:

var certificateCopy = new X509Certificate2(certBytes);
// Or from the string:
var certificateCopy2 = new X509Certificate2(Convert.FromBase64String(certAsString));
1 голос
/ 15 декабря 2011

Я не понимаю, но это то, что происходит ...

У меня есть вспомогательный метод, который я вызываю:

var cert = X509CertificateHelper.LoadCertificate(StoreName.My, StoreLocation.LocalMachine, "thumbprintgoeshere");

Когда я вызываю это, certуспешно заселен и даже HasPrivateKey верно.Однако, если я затем сделаю следующее:

var cert2 = new X509Certificate2(cert.RawData);

, тогда для полученного сертификата cert2, который также является действительным сертификатом, для HasPrivateKey установлено значение false.Похоже, что свойство RawData «удаляет» закрытый ключ (и да, его можно экспортировать - у меня нет проблем с созданием .pfx с закрытым ключом и импортом его в другую систему и воспроизведением этого поведения).

Теперь, когда я обнаружил все это, мое решение больше не заключается в жестком кодировании RawData, а вместо этого в том, чтобы фактически загрузить сертификат из хранилища сертификатов - именно то, чего я пытался избежать.Если у кого-то есть идея получше, пожалуйста, возложите ее на меня.Но до тех пор я называю это неудачей, и это мой конечный результат.: - (

...