身份验证:Kerberos还是SSL?

时间:2011-02-02 17:58:52

标签: java authentication ssl kerberos

我正处于Java EE应用程序的“预设计”阶段(如果有这样的事情!),它将在客户端使用Swing框并实现Web和服务器层的组件。

我立即获得了一些技术选择,并且已经了解了Kerberos和SSL的工作方式之间的差异。我无法找到任何答案的一个领域是如何在Kerberos或SSL之间选择的主题。换句话说,您如何判断何时使用任何一种协议?

假设Swing客户端不受特定传输(UDP,TCP或其他)的约束,并且可以使用/ any。如何选择这两者中的哪一个更适合其应用?

谢谢!

5 个答案:

答案 0 :(得分:5)

突然(几个月后)出现了疯狂的系统管理员......

我将不得不成为异议的代言人。你不会在没有 CA的情况下建立PKI 的想法是非常荒谬的。您必须通过简化创建过程来维护PKI的完整性和性能。你必须在某个地方创建和存储证书,那将是什么?热潮,你有一个CA.任何体面的PKI也需要维护CRL,管理员是否应该手动编写?您也可以忘记使用509的不同类型,因为手动维护它的开销会让您开始全心全意地打开并转变为灰色浆液。

我想您可以使用openssl的CLI手动创建票证,只需将它们ftp到远程客户端,但这对于可观大小的部署来说是一个巨大的麻烦。从本质上讲,如果您的部署太小而无法手动生成证书(重复输入信息和所有内容),然后只是不担心CRL是一个合理的计划,您根本不需要高级身份验证系统。 TLS + LDAP(一个服务器证书用于机密性而非身份验证)的更合适。

好的,现在我已经清除了一些误解,让我们实际回答你的问题:你想什么时候使用SSL而不是Kerberos进行身份验证?基于x509的身份验证是一个令人难以置信的模糊野兽,主要是因为大多数人(如上面的Michael-O)没有意识到SSL专门因为它正在验证用户。我知道有一些FTP程序以这种方式进行身份验证,中间件使用它......有时候(这听起来与java谈话中的用例很接近),而vpn客户端/网关通常使用SSL证书进行身份验证。

SSL的使用意味着我在那里谈到的PKI,如果您的用例涉及机密性,这将非常有用。 DoD是企业的一个很好的例子,它将PKI广泛用于身份验证之外的功能。在这种情况下,假设所有相关的客户端程序都支持x509身份验证,这很有意义。它仍然是一个奇特的设置,你仍然需要弄清楚最终用户将如何“呈现”他们的SSL凭据到系统(客户端配置,智能卡等),但它将很好地融合在一起。除了奇怪的适合,kerberos通过临时票证进行身份验证,而SSL证书通常持续很长时间(这就是为什么需要CRL),这意味着如果在一个证书上考虑到永不改变的密钥,则攻击者将有几个月的时间他们必须找到一个新的证书之前的免费乘车,而不是kerberos,他们只有一天,而且只有在机票没有被销毁的情况下。

所有其他情况应尽可能使用Kerberos身份验证。它提供了正确的安全层,实际上是作为一个大型网络身份验证系统设计的,这就是为什么你有很难用SSL复制的东西(比如作为服务而不是普通用户进行身份验证),而只是为了他们想要的工作目的。您的用例总是需要考虑现有的基础设施,这可能是面向kerberos的,有时是面向LDAPS的,但几乎从不以x509身份验证为导向。换句话说:无论你写的是什么,更有可能在kerberos基础设施中运行,所以你不妨以某种方式插入它。管理员熟悉Kerberos-as-authentication而不是509-as-authentication,您也将从中受益更多。对此的看法是,机票外的机密性是一种玩笑。 NFSv4有一些弱DES(而且我并不意味着3DES甚至)加密,它(以某种方式)与kerberos票证有关,但它进行了身份验证,而且基本上就是它所做的一切。

我希望看到x509的一些灵活性与kerberos风格的基础设施(服务的识别以及即将过期的票证的“一次性”方面)整合到更广泛实施的解决方案中现在比x509,但在这个阶段它主要是白日做梦。

要点:

如果基础设施要求不会出现问题,那么x509是好的,无论如何你都会将PKI用于其他东西,但是否则可能会不必要地重复工作,或者如果部署可能会有kerberos基础设施。

Kerberos是一种类似但更好的身份验证方案,可以更广泛地使用/理解,但根本不会帮助您使用PKI,您可以获得身份验证,就是这样。

答案 1 :(得分:4)

比较Kerberos和SSL / TLS没有意义。

  • Kerberos是一种身份验证协议。
  • TLS是一种用于保护双方之间通信的协议,它依赖于身份验证和加密机制。它们的工作方式取决于所选的密码套件。虽然TLS的大多数用法(例如HTTPS)都使用X.509证书,但在这种情况下,您可能会使用PKI来验证远程方,但也可以使用Kerberos cipher suites。据我所知,很少有TLS堆栈支持这些Kerberos密码套件(Java does)。

它不一定是一个或另一个。例如,即使您正在使用SPNEGO(Kerberos)HTTP身份验证,使用TLS保护传输通常也是有意义的(通常在服务器端使用X.509证书,通过PKI验证)。如果没有,则在HTTP头中交换的SPNEGO令牌可以保证身份验证,但其余的HTTP消息可能已被攻击者修改过。

答案 2 :(得分:2)

答案 3 :(得分:2)

考虑任何涉及Kerberos的解决方案都比SSL更复杂,因为它需要额外的第三个组件,即身份验证服务器,必须对其进行管理和管理(例如MS Active Directory),而SSL只是一个客户端/服务器协议。

答案 4 :(得分:1)

你正在混合东西。 Kerberos是一种身份验证协议,SSL ist加密。如果您在公司环境中,Kerberos就是您的选择。

编辑:Kerberos还可以透明地加密您的数据流量。无需SSL认证。