首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安全和身份验证: SSL与SASL

安全和身份验证: SSL与SASL
EN

Stack Overflow用户
提问于 2012-07-05 23:13:25
回答 3查看 54.5K关注 0票数 67

我的理解是SSL结合了一种加密算法(如AES、DES等)。使用密钥交换方法(如Diffie-Hellman)在不安全网络(如Internet)上的两个端点之间提供安全加密和识别服务。

我的理解是,SASL是一个MD5/Kerberos协议,它几乎做同样的事情。

所以我的问题是:两者都选择的利弊是什么?什么情况会让两者中的任何一个更可取?基本上,我正在寻找一些在选择SSL或使用SASL时可以遵循的指导原则。提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-09 02:41:13

很难比较SSL/TLS和SASL,因为SSL/TLS是一个通信协议,而SASL是一个框架,与其他协议集成在一起。(实际上,在某些情况下,您可以同时使用这两种方法。)

此外,您还提到了Kerberos,它实际上是一种身份验证协议(可以与SSL/TLS或SASL一起使用,也可以同时与两者一起使用)。您的问题似乎表明,是否使用Kerberos是您应该首先选择的主要子问题之一。

SASL本质上是一个间接层,允许在现有的应用程序协议(例如LDAP、SMTP、Subversion等)中使用可插拔的身份验证系统和数据安全性,尽管这些协议需要了解此扩展(例如SMTP auth)。它是否以及如何提供安全的身份验证和数据加密在很大程度上取决于此框架中使用的underlying mechanism。这里有一个来自svnserve documentation的例子:“内置的CRAM-MD5机制不支持加密,但DIGEST-MD5支持”。如果您希望将Kerberos与SASL一起使用,则需要另一个级别的间接寻址:GSS-API (它最常用于Kerberos,但也可以支持其他机制)。(请注意,与其GS2 successor不同,在SASL上下文中的GSSAPI似乎暗示了Kerberos。)

SSL/TLS的一般目标是保护客户端和服务器之间的通信(完整性和机密性)。客户端应该始终检查SSL/TLS服务器的身份,它还为服务器提供了检查客户端身份的机制。它能做什么还取决于它是如何配置的。SSL/TLS最常与X.509证书一起使用:这是浏览器检查HTTPS服务器身份的方式。还可以将服务器配置为请求客户端使用证书来标识自己(客户端-证书身份验证)。但是,如果你想使用Kerberos,你可以使用TLS。这种情况很少见,但它们是implemented in the JSSE

它的实现通常提供与普通TCP连接类似的API:在Java语言中,一旦进行了配置,就可以像使用普通Socket一样使用SSLSocket。这不要求套接字顶部的协议具有特定的感知能力,尽管有些协议具有从普通连接(Implicit v.s. Explicit SSL/TLS)切换到SSL/TLS的显式命令。它还可以提供身份验证。在Java语言中,JSSE是默认的SSL/TLS实现,它允许您访问SSLSocket (如果您足够勇敢,也可以访问SSLEngine )。

您可能希望阅读"",它类似于"SASL is /TLS“(尽管它似乎已经有一段时间没有更新了,因为JSSE现在确实支持Kerberos密码套件,至少从OracleJava6开始是这样)。

我承认我对SASL的了解少于对SSL/TLS的了解,但通过SASL进行数据加密听起来会有更多的工作要做。它似乎没有特定的SSL/TLS功能,比如Perfect Forward Secrecy offered by EDH cipher suites。有一个example that uses SASL with GSSAPI (Kerberos here) in the JGSS tutorial:您需要显式地包装/解包数据,这在使用SSLSocket时是不需要做的。

我认为您的主要关注点应该是首先决定要使用哪种身份验证机制: Kerberos、X.509证书或其他什么。这将对您的整体架构产生更大的影响,并且两者都可以与SSL和SSL/TLS一起使用(如果您在SSL/TLS连接之上使用带有EXTERNAL机制的SASL,情况会更糟)。

  • Kerberos是非常集中的。除了能够联系您的应用服务器之外,客户端还需要能够联系KDC进行身份验证。客户端还需要配置为使用该KDC。从用户的角度来看,他们可以使用更分散的passwords.
  • X.509。但是,您可能需要为您的用户证书部署证书颁发机构(或使用商业证书颁发机构)。用户需要获得证书和私钥,有些人可能会觉得太复杂了。

JAAS加入其中是因为它是处理身份验证和授权的通用Java框架。它与安全管理器的概念密切相关。它为您提供了Subject and Principal的概念。这并不直接与协议或通信相关联,而是与您在应用程序中建模身份验证和授权的方式有关。(它为您提供了一组标准的类来执行此操作。)

(我通常会建议阅读提到你想要的单词的Java reference documents:JGSS,SASL,...,尽管它们不一定容易阅读。)

票数 116
EN

Stack Overflow用户

发布于 2012-07-08 07:44:45

SASL SSL vs

诚然,SASL不是一个协议,而是一个抽象层。SSL和SASL提供了类似的功能,这也是事实。它们都提供身份验证、数据签名和加密。

SSL是在传输层完成的,通常对底层协议是透明的。例如,您可以在LDAP或HTTP上使用SSL。然而,在某些情况下,为了切换到安全模式,必须修改现有协议。例如,对POP3和IMAP进行了扩展,使其具有一个命令STARTTLS来启动对SSL的使用。从这个角度来看,这有点类似于SASL所做的事情。

另一方面,许多协议也被扩展以提供SASL功能。Here是协议列表。同样,POP3和IMAP是其中的两个,它们使用不同的命令来启动身份验证。

那么,什么时候应该使用SSL,什么时候应该使用SASL呢?

SSL和SASL之间的一个明显区别是,SASL允许您选择不同的机制来对客户端进行身份验证,而SSL在某种程度上绑定了基于证书的身份验证。在SASL中,您可以选择使用GSSAPI、Kerberos、NTLM等。

由于这种差异,在某些情况下,使用SASL而不使用SSL更直观。例如,您的客户端应用程序使用Kerberos对最终用户进行身份验证。服务器需要对客户端进行身份验证。由于您的客户机应用程序已经拥有Kerberos凭证(在Kerberos术语中是票证),因此使用Kerberos凭证向服务器进行身份验证是有意义的。当然,您始终可以将SSL设置为执行相同的操作。但是,这意味着在现有的Kerberos基础设施之上,您需要设置证书颁发机构基础设施,并以某种方式将客户端证书与Kerberos凭证相关联。这是可行的,但有很多工作要做。

此外,有时还需要使用一些仅在SASL机制中可用而不能在SSL中使用的功能。例如,Kerberos允许您将票证从客户端转发到服务器,以便服务器可以代表客户端使用票证查询某些资源。一个常见的例子是您有一个应用程序服务器和一个数据库。客户端应用程序向应用程序服务器进行身份验证,并且应用程序服务器需要使用客户端的凭据代表客户端查询数据库。SSL无法为您提供此功能,但Kerberos支持此功能。因此,在这种情况下,您必须选择使用SASL。

在某些情况下,您确实希望使用SSL而不是SASL。例如,扩展协议不是一个选项,或者您想要加密使用底层协议交换的每个单独的数据包。

GSSAPI与Kerberos和的关系

根据这个wiki page,GSSAPI和Kerberos在SASL中都是受机制支持的。GSSAPI是一种通用编程接口。其思想是让应用程序编写器使用单个公共API来进行身份验证、加密等,而不管底层使用的是什么协议。GSSAPI实现了Kerberos。因此,您可以使用GSSAPI进行Kerberos身份验证。

与JAAS有何关系

老实说,我不是Java专家。据我所知,JAAS听起来只是一个可插拔的身份验证框架。我相信这个想法类似于GSSAPI。它的目的是提供单一的编程接口,而不管使用的是什么身份验证方法。GSSAPI专注于身份验证和安全消息交换,而JAAS专注于身份验证和授权。我没有发现任何证据表明JAAS也是SASL机制之一。我相信Java库中应该有一些帮助类来帮助您实现自定义的SASL机制。在实现自定义SASL机制时,只使用JAAS可能是有意义的。

票数 33
EN

Stack Overflow用户

发布于 2012-07-08 05:20:12

SASL不是一个协议,而是某种身份验证机制的抽象层。如果您使用Digest-MD5或GSS-API作为您的SASL机制,您可以请求SASL完全加密您的数据流量。例如,这就是我用来与您的Active Directory服务器通信的方法。您将不需要SSL。你的用例是什么?请详细说明!

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11347304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档