WCF, безопасность и сертификаты

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

Вы получаете ошибку unable to find valid certification path to requested target, потому что Java не может проверить сертификат сервера (один из начальных этапов рукопожатия TLS).

По умолчанию для указания хранилища ключей и хранилища доверия используются соответствующие свойства, как указано на странице Настройка JSSE в справочном руководстве по Oracle JSSE. В частности:

javax.net.ssl.trustStore=/path/to/keystore.jks
javax.net.ssl.trustStorePassword=mypassword
javax.net.ssl.keyStore=/path/to/keystore.jks
javax.net.ssl.keyStorePassword=mypassword

Они могут быть указаны как системные свойства в командной строке (например, -Djavax.net.ssl.trustStorePassword=mypassword) или (не рекомендуется) заданы программно, например:

System.setProperty("javax.net.ssl.trustStorePassword", "mypassword");

Наконец, обратите внимание, что тип хранилища ключей по умолчанию - JKS. Если вы хотите изменить значение по умолчанию на стандарт PKCS # 12 (расширения файлов обычно .p12 или .pfx), то вам нужно установить два дополнительных свойства: javax.net.ssl.trustStoreType и javax.net.ssl.keyStoreType (необходимо значение быть PKCS12).

Если вы не уверены, чтобы проверить, находится ли ваше хранилище ключей в JKS или PKCS # 12, вы можете использовать свойство keytool, чтобы распечатать содержимое хранилища ключей и указать тип хранилища ключей, используя -storetype PKCS12, или ничего. (по умолчанию JKS)

6
задан GONeale 8 May 2009 в 00:51
поделиться

3 ответа

Если вам интересно, посмотрите сценарий, который я написал - это «дешевая» замена Firebug, которая не мешает нормальной консоли (например, Safari или Chrome), но расширяет ее. почти со всеми методами Firebug:

http://code.google.com/p/glentilities/

Посмотрите под капот, и вы поймете, что я имею в виду под «дешевым». : -)

Объедините его с сериализаторами JSON YUI или json.org, чтобы отсортировать реплику console.dir.

Firebug и Firebug Lite - определенно более приятные графические интерфейсы, но я постоянно использую свой собственный, чтобы безопасно сохранять журналы даже для производственного кода - без постоянных комментариев и комментариев,

Вы, как поставщик программного обеспечения, могли бы выступать в качестве своего собственного центра сертификации и создавать свои собственные клиентские сертификаты (есть несколько способов сделать это в зависимости от вашей инфраструктуры), но тогда вам нужно настроить клиентов для доверия вашему корневому ЦС.

Если сервер и клиент работают в доменной среде, вы можете использовать транспортную безопасность с аутентификацией Windows (вы используете привязку tcp, так что возможность взаимодействия в любом случае отсутствует!) Дополнительным бонусом является аутентификация прозрачный и вам не нужны никакие сертификаты. Если вы хотите проверить подлинность сервера, тогда безопасность сообщений с аутентификацией Windows сделает свое дело.

Если сервер и клиент работают в доменной среде, вы можете использовать транспортную безопасность с аутентификацией Windows (вы используете привязку tcp, так что возможность взаимодействия в любом случае отсутствует)! Дополнительный бонус к этому аутентификация прозрачна и вам не нужны никакие сертификаты. Если вы хотите проверить подлинность сервера, тогда безопасность сообщений с аутентификацией Windows сделает свое дело.

Если сервер и клиент работают в доменной среде, вы можете использовать транспортную безопасность с аутентификацией Windows (вы используете привязку tcp, так что возможность взаимодействия в любом случае отсутствует)! Дополнительный бонус к этому аутентификация прозрачна и вам не нужны никакие сертификаты. Если вы хотите проверить подлинность сервера, тогда безопасность сообщений с аутентификацией Windows сделает свое дело.

5
ответ дан 16 December 2019 в 21:46
поделиться

Если вы собираетесь пересекать границы брандмауэра, сертификаты станут вашим лучшим решением. Я не знаю много о специфике приложений для сертификатов или вашего приложения. К сожалению, насколько я знаю, я думаю, что вам придется помочь им подать заявку на сертификаты, или они должны будут сделать это самостоятельно, если они не захотят предпринять в процессе установки своего собственного сервера сертификатов. Если приложение будет внутренним, то проверка подлинности Windows будет работать и ОЧЕНЬ легко, но если вы думаете, что у вас будут клиенты, которые используют ваше приложение через границы брандмауэра, то вы могли бы также потратить время на использование сертификатов, поскольку сертификаты будут работать везде. Теперь существует нечто, называемое федеративной безопасностью, где вы делегируете разрешение аутентификации другому объекту.

1
ответ дан 16 December 2019 в 21:46
поделиться

У меня в разработке проект, похожий на ваш сценарий. У меня есть конечные точки для хостинга службы Windows через netTCPBinding, и я использовал сертификаты x509 ... хотя в моем случае намерение состояло в том, чтобы зашифровать как транспортный уровень, так и уровень сообщений, поскольку я пересекал ненадежные границы безопасности. Меня меньше беспокоило обеспечение аутентификации / авторизации, кроме требования наличия сертификата.

Как и в сценариях вашей интрасети (я предполагаю), я имел власть над сервером и клиентскими машинами во время установки ... или, по крайней мере, может диктовать некоторые из условий установки.

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

Сертификаты клиента и сервера были установлены как на клиентах, так и на сервере (при необходимости) в личном хранилище пользователей на уровне компьютера. Мы также установили наш сертификат CA непосредственно в раздел Trusted Root Certification Authorities, тем самым делая наши клиентские и серверные сертификаты надежными.

Поскольку меня меньше заботила аутентификация / авторизация, я не знаю, что рекомендовать как лучшую практику для работы с привязкой сертификатов к отдельным пользователям и более детальной, чем на уровне машины (моим решением была служба Windows для связи службы Windows - полностью без присмотра). Я бы подумал, что вам понадобится сертификат для каждого пользователя, установив его в свое личное хранилище пользователей в MMC сертификатов. Реализация среды выполнения будет определяться тем, как вы настраиваете WCF для поиска сертификатов, поэтому это должно быть довольно просто.

На протяжении всего процесса я в значительной степени полагался на то, что я узнал из этой замечательной статьи CodeProject: Обеспечение безопасности Службы WCF с сертификатами . Он проведет вас через создание / установку сертификатов. Образец приложения WCF размещен в IIS, но мне удалось довольно легко перевести разделы конфигурации из web.config в app.config.

В моем случае я открыл веб-интерфейс для запроса сертификатов в Win2003 непосредственно в Интернете , чтобы клиент мог запрашивать сертификаты напрямую в будущем. У нас есть контроль утверждения, поэтому он работает хорошо. У меня еще не было необходимости создавать новые сертификаты, поэтому я не могу сказать, сколько трений это повлечет за собой.

2
ответ дан 16 December 2019 в 21:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: