2015-02-25 5 views
0

Я пытаюсь автоматизировать создание тестовых сред, а одним из шагов является создание самоподписанных сертификатов, которые будут использоваться для привязок SSL в IIS. Это приложение WPF, предназначенное для запуска всех веб-сайтов, приложений, служб Windows и т. Д., Основанных на указанных настройках конфигурации.Правильная автоматизация создания самозаверяющих сертификатов для разработки

Я попытался с помощью CertEnrollLib (certenroll.dll), но по какой-то неизвестной причине, я получаю следующее сообщение об ошибке при запуске кода на сервере:

enter image description here

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

Problems when compiling and running code that uses CertEnroll with .NET 4.0 and x64

Я попытался указанное решение:

Чтобы избавиться от этих ошибок компиляции мы изменились «Вставить Interop Типы» в «ложных "в Свойства ссылок CERTCLIENTLib и CERTENROLLLib.

Безрезультатно. Также попытался изменить платформу, как сказано в ссылке:

Я до сих пор не было время, чтобы выяснить, почему это происходит, но если вы собираете против x86 платформы вместо любой платформы CPU (что делает код для запуска по сравнению с платформой x64 на x64-системах по умолчанию), он будет работать нормально.

Но это тоже не работает, я получаю ту же ошибку. Я также пытался использовать BouncyCastle раньше, но получил еще одну ошибку COM.


EDIT: Я получил его фиксированной благодаря @CryptoGuy. Вместо того чтобы использовать конструктор класса ссылочного библиотеки:

var cert = new CX509CertificateRequestCertificate(); // old, not working 
// gets the right class to use with my machine, but not with the server 

Я заменил его с этим:

IX509CertificateRequestCertificate cert = (IX509CertificateRequestCertificate) Activator.CreateInstance(Type.GetTypeFromProgID("X509Enrollment.CX509CertificateRequestCertificate")); 
// gets whatever is the CX509CertificateRequestCertificate implementation is 
+0

какая ОС работает на вашем сервере? – Crypt32

+0

@CryptoGuy Server: 'Windows Server 2008® Service Pack 2, а именно Windows Server Web® на панели управления -> система. Моя машина: 'Windows 7® Service Pack 1'. –

ответ

1

Спасибо за подтверждение вашей серверной ОС. Проблема в том, что интерфейс IX509CertificateRequestCertificate2 недоступен в Windows Server 2008, он был добавлен в Windows 6.1 (Windows 7/Windows Server 2008 R2). Вам необходимо использовать стандарт IX509CertificateRequestCertificate. Технически они равны, новый интерфейс просто добавляет поддержку веб-сервисов регистрации (которые недоступны в предыдущих системах).

Смежные вопросы