身份validation:Kerberos还是SSL?

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

我立即提出了一些技术选择,并一直在阅读Kerberos和SSL如何工作之间的差异。 我无法找到任何答案的一个领域是如何在Kerberos或SSL之间进行选择的主题。 换句话说,您如何判断何时使用任何一种协议?

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

谢谢!

然后突然(几个月后)出现了一个疯狂的Sys Admin ……

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

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

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

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

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

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

概要:

x509是好的,如果基础设施要求不会成为问题,并且你将使用PKI进行其他工作,但是否则可能会不必要地重复工作,或者如果部署可能会有一个kerberos基础设施。

Kerberos是一种类似但更好的身份validation方案,它被更广泛地使用/理解,但根本无法帮助您使用PKI,您获得身份validation,就是这样。

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

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

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

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

你在搅拌东西。 Kerberos是一种身份validation协议,SSL ist加密。 如果您在公司环境中,Kerberos是您的选择。

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