Служба 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. Клиенты могут проверять подлинность услуги с помощью этого отпечатка. Я думаю, что в этом случае вам также не нужно устанавливать сертификат на клиенте, но когда сертификат истекает, все клиенты должны быть обновлены.
Нужно ли копировать сертификат на веб-сервер, чтобы иметь возможность использовать безопасность сообщений?
Да, вы должны. Но это может быть проблемой, потому что по соображениям безопасности сертификат может быть помечен как не экспортируемый. Лучшее решение - запросить новый сертификат только для этой цели.