Как создать сертификат для использования с SslStream AuthenticateAsServer без импорта

Я потерялся в извилистом лабиринте сертификатов и закрытых ключей.

Я пишу сервер в С#. Я хочу, чтобы он принимал SSL-соединения. Для целей тестирования я хочу создать сертификат для "localhost" и использовать этот сертификат для сервера. В идеале я не хочу загрязнять хранилище сертификатов, поэтому мне просто нужен файл или файлы на диске, который может загрузить код С# для предоставления сертификата.

Все, что я пробовал (используя подходы к кулинарной книге, предлагаемые веб-поисками), либо дает мне "Учетные данные, предоставленные в пакет, не были распознаны", либо "Режим сервера SSL должен использовать сертификат с соответствующим закрытым ключом".

Есть ли способ создать сертификат и закрытый ключ, а затем загрузить их в объект X509Certificate, не загружая их в хранилище сертификатов моего компьютера?

+8
источник поделиться
5 ответов

В конце я создал следующую команду для создания файла server.pfx:

makecert.exe -r -pe -n "CN=localhost" -sky exchange -sv server.pvk server.cer
pvk2pfx -pvk server.pvk -spc server.cer -pfx server.pfx

Затем я загрузил его в код:

certificate = new X509Certificate2("server.pfx", "password");

(на самом деле я не написал такой пароль: -)

Хитрость заключалась в том, чтобы знать, что мне нужен файл pfx, и что мне нужно было загрузить его, используя класс X509Certificate2, а не X509Certificate.

+12
источник

Работает метод Ники Лоше.

Если вы получаете The specified network password is not correct., тогда вы должны попробовать его без пароля на С#. Неважно, что ваш пароль ввода находился в makecert.

certificate = new X509Certificate2("Server.pfx", "");

Но если вы хотите использовать пароль (есть причина, он там:)), попробуйте изменить команду pvk2pfx.exe на:

pvk2pfx.exe "-pi password -pvk Server.pvk -spc Server.cer -pfx Server.pfx

и в С# введите:

certificate = new X509Certificate2 ( "Server.pfx", "password" );

Пароль должен быть таким же, как при создании файла cer.

Это трюк для меня. Надеюсь, это поможет кому-то.

+3
источник

Существует несколько инструментов, которые должны позволить вам действовать как ваш собственный ЦС и создавать сертификат. XCA является одним из них. Существует также ряд методов, например, с использованием команд OpenSSL.

Создание самозаверяющего сертификата может показаться самым простым вариантом, но использование тестового ЦС (и отдельного сертификата сервера) может стоить того. Это позволит вам импортировать тестовый ЦС в хранилище браузера, если это необходимо, чтобы сделать тесты более реалистичными. Это не намного сложнее с помощью правильных инструментов (например, XCA).

Как только вы создали сертификат сервера и его закрытый ключ, превратите его в файл PKCS # 12 (.p12/.pfx).

Затем вы можете загрузить его с помощью X509Certificate2.import(...). (См. Пример в этом ответе.)

+1
источник

Если у вас есть IIS, вы можете сделать это через диспетчер IIS, как описано здесь:

http://blogs.msdn.com/b/ericnel/archive/2009/09/22/using-iis-to-generate-a-x509-certificate-for-use-with-the-windows-azure-service-management-api-step-by-step.aspx

0
источник

У меня была такая же проблема при импорте сертификата машины из хранилища машин (а не в хранилище пользователей). Я решил это, запустив Visual Studio в качестве администратора, поскольку для доступа к закрытому ключу сертификата хранилища компьютеров требуются права администратора.

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос