Я запустил свой веб-сервис 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, и многое из того, что у меня уже есть, - это я нащупываю в темно. Я был бы очень благодарен любому, кто мог бы просветить меня!