Как получить base 64 закодированное значение сертификата с закрытым ключом? - PullRequest
5 голосов
/ 14 января 2012

Продолжите до предыдущего вопроса , у меня есть код, который должен получить сертификат X509 с закрытым ключом.Как отмечается в ответах, в производстве это будет происходить с использованием магазина X509.

Каков наилучший способ провести это модульное тестирование?Я хочу разрабатывать и тестировать с сертификатами, отличными от тех, которые будут в производстве, поэтому я мог бы создать интерфейс CertificateRepository для обеспечения различных реализаций.

Для реализации test / dev было бы неплохо просто использовать закодированную в base64 строку сертификата и таким образом создать экземпляр сертификата с фиктивным паролем и выделенным сертификатом test / dev.Однако до сих пор я не смог понять, как кодировать сертификат с закрытым ключом в виде строки base64.Каждый раз, когда я пытаюсь экспортировать сертификат из MMC как base-64, он кодирует только открытый ключ.

Ответы [ 2 ]

9 голосов
/ 15 января 2012

Мне не удалось понять, как это сделать с помощью mmc.Однако я выяснил, как это сделать в коде:

var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
var certificate = store.Certificates.Find(X509FindType.FindByThumbprint, 
    "BLABLABLA", false)[0]; // doesn't matter how you get the cert
var exported = certificate.Export(X509ContentType.Pfx, "the password");
var base64 = Convert.ToBase64String(exported);
store.Close();

Пока сертификат, который вы получаете из хранилища x 509, имеет закрытый ключ, он окажется в экспортированном массиве байтов, которыйзатем вы можете преобразовать в строку base64.

0 голосов
/ 15 января 2012

Убедитесь, что вы пометили закрытый ключ как экспортируемый при добавлении сертификата в хранилище.

Если вы используете makecert для создания сертификата, добавьте -pe возможность сделать закрытый ключ экспортируемым.

...