Ответ 1
Слишком сложно сравнивать SSL/TLS и SASL, поскольку протокол SSL/TLS является протоколом связи, тогда как SASL - это инфраструктура, интегрированная с другими протоколами. (Фактически, вы можете использовать оба одновременно в некоторых случаях.)
Кроме того, вы упоминаете Kerberos, который действительно является протоколом аутентификации (который может использоваться с SSL/TLS или SASL или независимо обоим). Ваш вопрос, кажется, предполагает, следует ли использовать Kerberos одну из основных проблем, которые вы должны выбрать в первую очередь.
SASL - это, по сути, слой косвенности, позволяющий подключать системы аутентификации и защиту данных в существующих протоколах приложений (например, LDAP, SMTP, Subversion,...), хотя эти протоколы должны быть осведомлены об этом расширении (например, SMTP auth). Независимо от того, обеспечивает ли он безопасную аутентификацию и шифрование данных, в значительной степени зависит от того, какой базовый механизм используется в этой структуре. Ниже приведен пример из svnserve
документации: "Встроенный механизм CRAM-MD5 не поддерживает шифрование, но DIGEST-MD5 делает".
Если вы хотите использовать Kerberos с SASL, вам понадобится другой уровень косвенности: GSS-API (который чаще всего используется с Kerberos, но может также допускают другие механизмы). (Обратите внимание, что GSSAPI
в контексте SASL в любом случае подразумевает Kerberos, в отличие от своего GS2
преемника.)
Общая цель SSL/TLS - обеспечить связь (целостность и конфиденциальность) между клиентом и сервером. Клиент должен всегда проверять личность сервера SSL/TLS, а также предоставляет механизмы для проверки подлинности клиента. То, что он может сделать, также зависит от того, как он настроен. SSL/TLS чаще всего используется с сертификатами X.509: как браузер может проверять личность HTTPS-сервера. Серверы также могут быть настроены для запроса клиенту использовать сертификат для идентификации себя (аутентификация сертификата клиента). Однако, если вы хотите использовать Kerberos, вы можете использовать TLS набор шифров Kerberos. Это гораздо реже, но они реализованы в JSSE.
Его реализации обычно предоставляют API-интерфейсы, аналогичные тем, что вы получаете с простыми TCP-соединениями: в Java, после настройки, вы можете более или менее использовать SSLSocket
, поскольку вы использовали бы обычный Socket
. Это не требует особой осведомленности по протоколу поверх сокета, хотя некоторые протоколы имеют явные команды для переключения на SSL/TLS из простого соединения (Неявный vs Явный SSL/TLS). Он также может обеспечивать аутентификацию. В Java JSSE - это реализация по умолчанию SSL/TLS, которая дает вам доступ к SSLSocket
(или SSLEngine
достаточно храбрый).
Возможно, вы захотите прочитать "Когда использовать Java GSS-API против JSSE ", который похож на "SASL vs. SSL/TLS" (хотя, похоже, он некоторое время не обновлялся, поскольку JSSE теперь поддерживает комплекты шифрования Kerberos, по крайней мере, с Oracle Java 6).
Я признаю, что я меньше знаю о SASL, чем о SSL/TLS, но шифрование данных через SASL звучит так, как будто это будет больше работы. Кажется, у него нет определенных функций SSL/TLS, таких как Perfect Forward Secrecy, предлагаемые наборами шифрования EDH. Существует пример который использует SASL с GSSAPI (здесь Kerberos здесь) в учебнике JGSS: вам нужно обернуть/развернуть данные явно, что вы бы 't нужно делать при использовании SSLSocket
s.
Я думаю, что ваша главная задача должна состоять в том, чтобы решить, какой механизм аутентификации вы хотите использовать в первую очередь: сертификаты Kerberos, X.509 или что-то еще. Это будет иметь большее влияние на общую архитектуру, и оба могут использоваться с SASL и SSL/TLS (более того, если вы используете SASL с механизмом EXTERNAL
, когда поверх соединения SSL/TLS).
- Kerberos является очень централизованным. Клиент должен иметь возможность связаться с KDC для аутентификации, а также иметь возможность связаться с вашим сервером приложений. Клиенты также должны быть настроены для использования этого KDC. С точки зрения пользователя они могут использовать пароли.
- X.509 более децентрализован. Однако вам может потребоваться развернуть Центр сертификации (или использовать коммерческий) для ваших пользовательских сертификатов. Пользователям должны быть предоставлены сертификаты и закрытые ключи, которые некоторые могут найти слишком сложными.
JAAS входит в него, потому что это общая структура Java для работы с аутентификацией и авторизацией. Он очень тесно связан с понятием руководителей безопасности. Это дает вам понятие Subject
и Principal
. Это напрямую не связано с протоколами или сообщением, а скорее с тем, как вы моделируете аутентификацию и авторизацию в своем приложении. (Это дает вам стандартный набор классов для этого.)
(Я обычно предлагаю пройти через справочные документы Java, в которых упоминаются слова, которые вы после: JGSS, SASL,..., хотя их не всегда легко читать.)