Требуется ли дополнительная настройка для вызова защищенных веб-служб (HTTPS)? - PullRequest
3 голосов
/ 29 октября 2010

Мне нужно позвонить в защищенный веб-сервис (https).используя Java (или даже любой другой прог-язык).

Нужно ли выполнять какие-либо дополнительные шаги, а не обычные шаги для создания клиента для веб-службы HTTP?

РЕДАКТИРОВАТЬ: пожалуйста, мне тоже нужен ответ на этот вопрос: Если нет, то как мой клиент расшифровывает зашифрованное сообщение, отправленное с веб-службы ??1009 *

Ответы [ 5 ]

4 голосов
/ 29 октября 2010

API URL Java должен обработать это для вас.Могут быть проблемы с сертификатами, если подписывающий сертификат сервера не является частью стандартного набора Java CA, но это маловероятно (и не слишком сложно исправить).

Другие языки почти наверняка будут иметь аналогичную поддержку.*

Уровень сокетов будет обрабатывать все шифрование и дешифрование для вас.

2 голосов
/ 29 октября 2010

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

Если вашей службе требуется аутентификация по сертификату клиента, вам понадобятся дополнительные шаги по настройке.Например, если вы используете Axis, вы можете попробовать этот подход: Выбор SSL-сертификата клиента в Java

(Способ выполнения зависит от языка и среды, в которой вы работаете.используя.)

РЕДАКТИРОВАТЬ: Относительно " Если нет, то как мой клиент расшифровывает зашифрованное сообщение, отправленное с веб-службы? ", это делаетсяСтек SSL / TLS.Большинство библиотек HTTP, поддерживающих HTTPS, будут использовать стек SSL / TLS платформы (JSSE в Java) более или менее прозрачно: именно здесь будет происходить шифрование / дешифрование.Если вы используете каркас веб-службы, он, вероятно, будет иметь API для настройки параметров доверия SSL / TLS (или того, какой клиент-сертификат использовать), хотя он также может использовать системное значение по умолчанию, если вы этого не сделаетечто угодно.

Обратите внимание, что ваш вопрос касается веб-сервисов, защищенных с помощью HTTPS, что подразумевает только безопасность на транспортном уровне (которая более или менее прозрачно обрабатывается стеком SSL / TLS платформы, которую вы будете использовать).Некоторые веб-службы также могут быть защищены с помощью защиты на уровне сообщений, и в этом случае инфраструктура на стороне клиента и сервера должна будет поддерживать это.Это, безусловно, потребует дополнительной настройки.(В некоторых случаях может оказаться, что защита на уровне сообщений реализована в сочетании с безопасностью на транспортном уровне, то есть обмен подписанной или зашифрованной полезной нагрузкой поверх HTTPS.)

1 голос
/ 29 октября 2010

Теоретически нет.Https в основном HTTP через SSL / TLS.Итак, поскольку оба SSL / TLS находятся на транспортном уровне, все должно работать точно так же, как HTTP.Теперь вам нужно получить сертификат для сервера.

С вашей стороны ничего не нужно делать.Транспортный уровень обрабатывает все это автоматически, без проблем для вашего прикладного уровня.Это означает, что ваша программа не различает обычный HTTP и HTTPS.

1 голос
/ 29 октября 2010

По большей части HTTP-клиенты будут «просто работать» с HTTPS.

Конечно, единственный способ узнать наверняка - попробовать это: возьмите свой любимый HTTP-клиент и измените URL с http:// на https://.

0 голосов
/ 29 октября 2010

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

https://services.adcom.uci.edu/wiki/display/public/How+To+-+Import+a+Certificate+into+a+Java+Keystore

Вы можете доверять любому сертификату в java с кодом отсюда: http://www.exampledepot.com/egs/javax.net.ssl/TrustAll.html, но это оставляет вас открытым для человека в середине атаки, так что это чисто для разработки.

Если клиент является приложением Windows .NET, вы можете доверять всем SSL-сертификатам с помощью этого кода:

// Trust all SSL certificates
System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();

Он будет жаловаться, что это устарело, и предложит альтернативу, но это работает.

...