Разделение в качестве клиента сертификатов транспорта и подписи сообщений с помощью WCF - PullRequest
4 голосов
/ 19 сентября 2011

В настоящее время я в процессе интеграции клиента WCF в веб-службу Java. Сервер требует от клиента аутентификации через сертификат с использованием SSL и подписываемого сообщения.

Я успешно отправил сообщение на сервер через SSL, Подписано и т. Д. Однако ответное сообщение сервера также подписано, но с сертификатом, отличным от того, который использовался для аутентификации сервера.

Клиенту WCF не нравится это поведение. Не удалось с сообщением: «Входящее сообщение было подписано токеном, который отличался от того, что использовалось для шифрования тела. Это не ожидалось». Проблема описана здесь подробно.

Оглядываясь в Google, я обнаружил, что можно отделить транспортный сертификат клиента от певческого сертификата, внедрив ClientCredentials и другие связанные с безопасностью классы, и добавив новое расширение. Вы можете прочитать все подробности об этом здесь . Однако у меня возникли проблемы с выяснением, где именно я должен расширяться, чтобы обеспечить такое же поведение для сертификата сервера в режиме клиента.

Буду признателен за любую помощь по этому вопросу или ссылки.

Заранее спасибо.

1 Ответ

1 голос
/ 09 ноября 2011

Посмотрите здесь

Здесь показано, как создать пользовательский ServiceCredentialsSecurityTokenManager, который позволяет указывать различные сообщения для подписи и шифрования сертификатов для запросов и ответов.на сервер и с сервера.

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

Игнорируйте безопасность транспорта, так как она ниже в конвейере WCF и, кажется, работает правильно из вашего описания.Морской вопрос - это безопасность сообщений.Похоже, вам нужно иметь возможность использовать сертификат для расшифровки ответа и сертификат для проверки подписи.В приведенной выше статье показан пример включения этого типа управления сертификатами, а также подробно описаны способы создания вариантов поведения и расширений для применения этого к вашему клиенту, что вызывает серьезную обеспокоенность.Это зависит от того, как вы хотите настроить прокси-серверы, т. Е. Через код или через конфигурацию.

Пример статьи , который вы тоже связали, не является полной реализацией того, что вам нужно, он только предусматриваетсертификат для подписи и сертификат для учетных данных транспортного клиента.

Вы можете создать гибридный ServiceCredentialsSecurityTokenManager, который предоставляет транспортный сертификат, а также подпись и расшифровку, это должно быть достаточно ясно из рассмотрения SecurityTokenRequirement документация

...