Служба WCF с сертификатами OpenSSL - PullRequest
2 голосов
/ 14 октября 2009

Я запустил свой веб-сервис WCF с базовыми самозаверяющими сертификатами, сгенерированными makecert (используя некоторые из множества онлайновых руководств по этой теме), но обнаружил, что существуют определенные возможности, которые нам требуются при создании сертификатов, которые makecert не поддерживает. кажется справиться. Поэтому я пытаюсь создать свои сертификаты, используя OpenSSL, подписывая их собственным CA (также сгенерированным с помощью OpenSSL). Кажется, я хорошо создаю и регистрирую сертификат, но при попытке запросить веб-сервис я получаю следующее:

Сертификат '[Cert Details]' должен иметь закрытый ключ. Процесс должен иметь права доступа к закрытому ключу.

Попробуй, хотя, возможно, я не могу заставить систему распознать то, что я считал закрытым ключом (может быть, я совершенно не прав, и мне следовало бы искать другой файл целиком ...) Может кто-нибудь предложить какой-нибудь мудрый совет, где я могу пойти не так?

Я генерирую сертификат примерно так:

# Generate key and certificate request
openssl req -new -newkey rsa:1024 -nodes -keyout MyCompany.key -out MyCompany.csr

# Generate certificate from certificate request
openssl ca -batch -in MyCompany.csr -out MyCompany.cert

Затем я могу зарегистрировать «Mycompany.cert» в хранилище сертификатов компьютеров (в этом случае и сервер, и клиент работают на локальном хосте), но MyCompany.key (который, как я предполагаю, является закрытым ключом, да?) Не будет импортирован , всегда ссылаясь на неизвестный формат файла. Регистрация выполняется с помощью утилиты "mmc" с оснасткой сертификата.

В моих файлах Web.Config для моего клиента и сервера я заменяю прежние (рабочие) имена сертификатов именем нового сертификата:

<!-- Client Web.config -->
<clientCredentials>
    <serviceCertificate>
        <authentication certificateValidationMode="PeerOrChainTrust"/>
    </serviceCertificate>
    <clientCertificate findValue="MyCompany" storeLocation="CurrentUser" storeName="TrustedPeople" x509FindType="FindBySubjectName" />
</clientCredentials>

<!-- Server Web.config -->
<serviceCredentials>
    <clientCertificate>
        <authentication certificateValidationMode="PeerOrChainTrust"/>
    </clientCertificate>
    <serviceCertificate findValue="MyCompany" storeLocation="CurrentUser" storeName="TrustedPeople" x509FindType="FindBySubjectName" />
</serviceCredentials>

Это, конечно, приводит к ошибке, которую я перечислил ранее. Я знаю, что он находит сертификат, потому что все данные, которые он отображает в сообщении об ошибке, верны, но я явно что-то упускаю. Итак, что еще мне нужно сделать, чтобы WCF работал с моими сертификатами OpenSSL?

Я прошу прощения, если мой вопрос кажется очевидным, или если я опускаю какую-то важную информацию, но я довольно новичок в сцене сертификатов / SSL, и многое из того, что у меня уже есть, - это я нащупываю в темно. Я был бы очень благодарен любому, кто мог бы просветить меня!

1 Ответ

9 голосов
/ 14 октября 2009

Windows не понимает формат ключа PEM OpenSSL. После генерации пары ключей вам нужно преобразовать их в формат PKCS12 (.pfx), чтобы иметь возможность импортировать всю пару ключей. Что-то вроде:

openssl pkcs12 -export -in yourcert.cer -inkey yourkey.pem -out output.pfx

Затем импортируйте файл .pfx, используя оснастку «Сертификаты», как и раньше. Вам будет предложено ввести пароль ключа, который вы указали при экспорте, а затем вы увидите маленький значок ключа при просмотре сертификата, который говорит: «У вас есть закрытый ключ, соответствующий этому сертификату».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...