Encryption 保安及;身份验证:SSL与SASL

Encryption 保安及;身份验证:SSL与SASL,encryption,ssl,md5,kerberos,sasl,Encryption,Ssl,Md5,Kerberos,Sasl,我的理解是,SSL将加密算法(如AES、DES等)与密钥交换方法(如Diffie-Hellman)相结合,在不安全的网络(如Internet)上的两个端点之间提供安全的加密和标识服务 我的理解是,SASL是一个MD5/Kerberos协议,它的功能基本相同 那么我的问题是:选择两者的利弊是什么?什么样的情况使两者都更可取?基本上,我希望在选择SSL或使用SASL时遵循一些准则。提前谢谢 SASL不是协议,而是某种身份验证机制的抽象层。如果使用Digest-MD5或GSS-API作为SASL机制,

我的理解是,SSL将加密算法(如AES、DES等)与密钥交换方法(如Diffie-Hellman)相结合,在不安全的网络(如Internet)上的两个端点之间提供安全的加密和标识服务

我的理解是,SASL是一个MD5/Kerberos协议,它的功能基本相同


那么我的问题是:选择两者的利弊是什么?什么样的情况使两者都更可取?基本上,我希望在选择SSL或使用SASL时遵循一些准则。提前谢谢

SASL不是协议,而是某种身份验证机制的抽象层。如果使用Digest-MD5或GSS-API作为SASL机制,则可以请求SASL对数据通信进行完全加密。例如,这就是我与您的Active Directory服务器交谈时所做的。您不需要SSL。您的用例是什么?请详细说明

SSL与SASL的比较

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

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

另一方面,许多协议也被扩展以提供SASL功能。是协议列表。同样,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和SASL的关系如何

因此,GSSAPI和Kerberos在SASL中都受支持。GSSAPI是一种通用编程接口。其思想是让应用程序编写器使用一个通用API来进行身份验证、加密等,而不管下面使用的是什么协议。GSSAPI实现Kerberos。因此,您可以使用GSSAPI进行Kerberos身份验证

JAAS与SASL的关系如何


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

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

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

SASL本质上是一个间接层,允许现有应用程序协议(例如LDAP、SMTP、Subversion等)中的可插拔身份验证系统和数据安全,尽管这些协议需要知道此扩展(例如)。它是否以及如何提供安全身份验证和数据加密在很大程度上取决于此框架中使用的内容。下面是一个来自的示例:“内置的CRAM-MD5机制不支持加密,但DIGEST-MD5支持加密”。 如果您想将Kerberos与SASL一起使用,则需要另一个间接级别:(这是Kerbe最常用的)