Как использовать сертификат, вызванный из программы Windows Service, с учетной записью Network Service?
Я использую систему Trans Union New Access для запуска кредитных отчетов. Я делаю это на моей 64-битной машине для Windows 7.
У меня есть проект веб-приложения (веб-формы), который использует систему. В одной кнопке у меня есть следующий код:
CreditReportRequestXML requestXMLSupplier = new CreditReportRequestXML();
requestXMLSupplier.RunPendingRequests();
Этот код вызывает метод в другом проекте, который я сам кодировал. Код создает XML, который публикуется в Transunion. Я получаю совершенно хорошие ответы.
У меня есть другой проект, который является проектом службы Windows. Соответствующий код в этом проекте:
CreditReportRequestXML requestXMLSupplier = new CreditReportRequestXML();
requestXMLSupplier.RunPendingRequests();
Когда учетная запись, под которой работает служба, является моей учетной записью, это работает просто отлично. Служба устанавливается как служба и может быть запущена и остановлена с помощью консоли служб.
Все идет нормально.
Вот плохой Когда я настраиваю службу для работы под учетной записью сетевой службы, я получаю следующую ошибку:
Не удалось создать безопасный канал SSL/TLS.
Я пытался использовать winhttpcertcfg, чтобы исправить проблему. Я пробовал -
winhttpcertcfg -g -c LOCAL_MACHINE \ My -s ******** -a "Сетевая служба"
(где ******** - имя субъекта сертификата. Я вижу это имя, когда отлаживаю свой сервис с помощью? clientCertificate.SubjectName.Name)
Я также пытался
winhttpcertcfg -i certfile.p12 -c LOCAL_MACHINE\My -a "Сетевая служба" -p pwforcert
(где certfile - это имя файла - обратите внимание, что у меня есть файл p12, а не файл PFX; pwforcert - это пароль, который я использовал для создания системного клиента на сайте Trans Union.)
Служба завершается с сообщением выше после попытки обеих команд. Когда я перечисляю учетные записи, которые должны иметь доступ к закрытому ключу, используя
winhttpcertcfg -l -c LOCAL_MACHINE\My -s MyCertificate
в выходных данных отображается правильный соответствующий сертификат, а также "Дополнительные учетные записи и группы с доступом к закрытому ключу включают в себя:" и указывается NT AUTHORITY\NETWORK SERVICE в качестве одной из учетных записей.
Причина, по которой я хочу использовать Network Service для запуска службы, заключается в том, что мой босс хочет, чтобы я это сделал. Я говорил с нашими сетевыми парнями сегодня, и у них нет учетной записи на наших серверах, которая имеет права администратора.
Что мне не хватает? Или есть ли другой способ обойти эту проблему?
1 ответ
Я завел экспорт одного из сертификатов в файл PFX, включая закрытый ключ и все связанные сертификаты. Это можно сделать только из одного или двух сертификатов на моей машине. Затем я удалил все сертификаты TU. Winhttpcertcfg -i имя_файла.pfx -c LOCAL_MACHINE\My -a "NETWORK SERVICE" -p **** было использовано. Это сработало.