Служба WCF - сертификаты и безопасность сообщений с аутентификацией UserName

Я готовлюсь к созданию службы WCF, которую наши клиенты могут использовать для обновления данных в нашей системе. Так что это должно быть доступно через Интернет. У меня есть книга о WCF, из которой я знаю Message Security это способ сделать службу WCF доступной через Интернет. Это потому, что вы не должны использовать транспортную безопасность, потому что она должна использоваться только в средах, где вы можете гарантировать, что существует соединение точка-точка между сервисом и клиентом. Я правильно понял? Поэтому я хочу использовать Message Security в сочетании с пользовательским UserName аутентификация. Я понимаю, что для этого мне нужно получить сертификат. Наша компания уже имеет сертификат SSL, который используется для наших веб-сайтов.

  • Могу ли я использовать один и тот же сертификат для защиты сообщений службы WCF?

А также

  • Способ защиты сообщений совместим с клиентами, которые ожидают ASMX Webservice?

Для тестирования я создал свой собственный сертификат с Makecert. Это работало нормально, но мне всегда приходилось добавлять сертификат в Trusted Persons на клиентской машине.

  • Можно ли включить Message Security с указанным выше сертификатом, не заставляя клиента добавить сертификат в Trusted Persons вручную?

Теперь давайте предположим следующий сценарий:

Инфраструктура компании

За ISA-сервером / брандмауэром находятся два веб-сервера. Этот ISA-сервер содержит сертификат для адреса www.company.com. Таким образом, все вещи SSL обрабатываются им. Он также перенаправляет входящие запросы на веб-серверы соответственно. Недавно созданная служба WCF должна работать на втором веб-сервере.

  • Нужно ли копировать сертификат на веб-сервер, чтобы иметь возможность использовать Message Security ?

Если да, я слышал, что копирование сертификатов не является хорошей практикой, поскольку снижает уровень безопасности. Перенос сертификата на веб-сервер невозможен, поскольку он необходим и для веб-сайтов на веб-сервере1.

  • Какие у меня варианты в этом случае?

А также:

  • Какова будет лучшая практика для этого сценария, независимо от заданных требований?

Спасибо...

1 ответ

Решение

Красиво подготовленный вопрос. Прежде всего, я, наверное, прочитал ту же книгу и хотел бы уточнить это утверждение:

Это потому, что вы не должны использовать транспортную безопасность, потому что она должна использоваться только в средах, где вы можете гарантировать, что существует соединение точка-точка между сервисом и клиентом.

Да. HTTPS (транспортная безопасность) предлагает только двухточечную безопасность, но сотрудники IMO неправильно понимают этот сценарий. Считаете ли вы, что если вы подключитесь к своему интернет-банкингу через HTTP, это будет случайным образом где-то посреди обмена Интернет-обменом с HTTPS на HTTP? НЕТ! Двухточечное соединение означает защищенный транспортный канал между клиентом и доступным шлюзом, предоставляющий запрошенный URL-адрес. В вашем сценарии это означает защищенный транспортный канал между Клиентом и вашим ISA-сервером. Связь не будет защищена между вашим ISA и веб-сервером 2. Если вы хотите иметь сквозную связь, которая обеспечит безопасный канал между клиентом и веб-сервером 2 (ISA не сможет перехватывать сообщения), вам нужна безопасность сообщений.

Теперь к вашим другим вопросам:

Могу ли я использовать один и тот же сертификат для защиты сообщений службы WCF?

Да, вы можете, но вы должны скопировать закрытый ключ на ваш веб-сервер 2.

Способ защиты сообщений совместим с клиентами, которые ожидают ASMX Webservice?

Нет. Чистый клиент ASMX не может использовать защиту сообщений, если вы не кодируете много пользовательских заголовков и расширений SOAP или не устанавливаете WSE 3.0.

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

Да, но центр сертификации, опубликовавший сертификат, должен быть доверенным на клиентском компьютере. То же самое с HTTPS. Службы, защищенные защитой сообщений, также могут выставлять отпечаток сертификата внутри WSDL. Клиенты могут проверять подлинность услуги с помощью этого отпечатка. Я думаю, что в этом случае вам также не нужно устанавливать сертификат на клиенте, но когда сертификат истекает, все клиенты должны быть обновлены.

Нужно ли копировать сертификат на веб-сервер, чтобы иметь возможность использовать безопасность сообщений?

Да, вы должны. Но это может быть проблемой, потому что по соображениям безопасности сертификат может быть помечен как не экспортируемый. Лучшее решение - запросить новый сертификат только для этой цели.

Другие вопросы по тегам