Я пытаюсь настроить службу WCF для использования сертификата для аутентификации клиента. Я прочитал массу сообщений о том, как создать сертификат, и мне удалось это сделать (наконец).
Я устанавливаю центр сертификации и сертификат на сервере под управлением Windows 2008 R2. Когда я открываю оснастку сертификатов MMC, я выбираю Учетная запись компьютера. Это правильно? Я делаю это, потому что моя служба WCF будет работать в службе Windows и будет работать, даже если ни один пользователь не вошел в систему. Но, по общему признанию, я не знаю, в чем разница между тремя вариантами:
- Моя учетная запись пользователя
- Сервисный аккаунт
- Учетная запись компьютера
После загрузки оснастки я импортирую сертификат центра сертификации в доверенные корневые центры сертификации. Затем я импортирую сертификат в доверенных издателей. Я при этом не сталкиваюсь с ошибками. Когда я выполняю импорт как сертификата органа, так и сертификата, подписанного этим органом, я не делаю никаких ссылок на файл .pvk. Насколько я понимаю, закрытый ключ встроен либо в сертификат, либо в авторитетный сертификат. Вот команды, которые я использую для создания каждого сертификата:
MakeCert.exe
-n “CN=InternalCA”
-r
-sv InternalCA.pvk InternalCA.cer
-cy authority
MakeCert.exe
-sk InternalWebService
-iv InternalCA.pvk
-n “CN=InternalWebService”
-ic InternalCA.cer InternalWebService.cer
-sr localmachine
-ss root
-sky exchange
-pe
Обратите внимание, я использовал -ss root. Я видел много сообщений с использованием -ss My. Я действительно не понимаю, в чем разница и когда уместно использовать каждое значение.
Моя служба WCF работает на этом компьютере внутри управляемой службы (службы Windows). Когда я запускаю свою службу Windows, в которой размещена служба WCF, она сразу дает сбой, и в средстве просмотра событий отображается, казалось бы, общая ошибка:
System.ArgumentException: вполне вероятно, что сертификат CN = TempCertName может не иметь закрытого ключа, способного к обмену ключами, или процесс может не иметь прав доступа к закрытому ключу.
Я нашел сообщения, в которых говорится, что мне нужно предоставить разрешения пользователю, запускающему службу, на ключ.
Кажется, это популярный ответ здесь, в stackoverflow: Предоставить доступ со всеми задачами / Управление закрытыми ключами
Но у меня нет опции Все задачи / Управление закрытыми ключами.
Но я не понимаю, как это сделать. Но также служба работает под моей учетной записью домена, которая является администратором и тем же пользователем, который установил сертификат.
Пожалуйста помоги :)