我的理解是SSL将加密算法(如AES,DES等)和密钥交换方法(如Diffie-Hellman)结合起来,在不安全的网络(如互联网)上提供安全的加密和身份验证服务。
我的理解是SASL是一个MD5 / Kerberos协议,基本上也是做同样的事情。
那么我的问题是:选择两者之间的利弊是什么,哪些情况下更适合选择SSL或选择SASL?基本上,我正在寻找在选择SSL或选择SASL时遵循的一些指南。
我的理解是SSL将加密算法(如AES,DES等)和密钥交换方法(如Diffie-Hellman)结合起来,在不安全的网络(如互联网)上提供安全的加密和身份验证服务。
我的理解是SASL是一个MD5 / Kerberos协议,基本上也是做同样的事情。
那么我的问题是:选择两者之间的利弊是什么,哪些情况下更适合选择SSL或选择SASL?基本上,我正在寻找在选择SSL或选择SASL时遵循的一些指南。
svnserve
文档中的一个示例:“内置的CRAM-MD5机制不支持加密,但DIGEST-MD5支持加密。”
如果您想在SASL中使用Kerberos,则需要另一层间接层:GSS-API(通常与Kerberos一起使用,但也可以允许其他机制)。请注意,在SASL上下文中,GSSAPI
似乎已经隐含了Kerberos,不像其GS2
后继者。SSL/TLS的实现通常提供类似于普通TCP连接的API:在Java中,一旦配置完成,你可以像使用普通Socket一样使用SSLSocket
。这不需要协议在套接字之上具有特定的意识,尽管有些协议有明确的命令从普通连接切换到SSL/TLS(隐式SSL/TLS vs 显式SSL/TLS)。它还可以提供身份验证。在Java中,JSSE是默认的SSL/TLS实现,它让你访问SSLSocket
(或者如果你足够勇敢,则是SSLEngine
)。
SSLSocket
时则不需要这样做。EXTERNAL
机制,则更加如此)。
JAAS是处理身份验证和授权的通用Java框架,与安全管理器的概念密切相关。它提供了Subject
和Principal
的概念。这与协议或通信没有直接关联,而是与您在应用程序中建模身份验证和授权的方式有关。(它为您提供一组标准类来完成此操作。)
(我通常建议阅读涉及您需要的单词的Java参考文档,例如JGSS、SASL等,尽管它们可能不容易阅读。)
SSL vs SASL
虽然SASL不是一个协议而是一个抽象层,但它和SSL提供了类似的功能。两者都提供身份验证、数据签名和加密。
SSL在传输层完成,通常对底层协议透明。例如,您可以在LDAP或HTTP上使用SSL。但是,在某些情况下,需要修改现有协议以切换到安全模式。例如,POP3和IMAP被扩展为具有命令STARTTLS以启动SSL的使用。从这个角度来看,这与SASL所做的有点相似。
另一方面,许多协议也被扩展以提供SASL功能。 这里 是协议列表。同样,POP3和IMAP是其中的两个,并且它们使用不同的命令来启动身份验证。
那么,何时应该使用SSL,何时应该使用SASL呢?
SSL和SASL之间一个明显的区别是,SASL允许您选择不同的机制来验证客户端,而SSL则基于证书进行身份验证。在SASL中,您可以选择使用GSSAPI、Kerberos、NTLM等。SASL不是一个协议,而是一种对某些认证机制的抽象层。如果您使用Digest-MD5或GSS-API作为您的SASL机制,您可以请求SASL完全加密数据流量。例如,这就是我与您的Active Directory服务器通信时所做的。您不需要SSL。请问您的用例是什么?请详细说明!