相互 SSL - 多少身份验证就足够了?

Posted

技术标签:

【中文标题】相互 SSL - 多少身份验证就足够了?【英文标题】:Mutual SSL - how much authentication is sufficient? 【发布时间】:2010-12-15 07:59:28 【问题描述】:

假设您有一个相互 SSL 服务,除了 SSL,它还具有应用程序身份验证。因此,客户端提供证书(以及服务器),但客户端请求(例如,REST 请求)还包含后端应用程序服务器进行身份验证的用户名/密码。

就客户端认证的“度”而言,似乎有多个级别。一个级别 (a) 只是让客户端提供由服务器 CA 存储中的 CA 签名的证书。另一个明显的级别 (b) 是让服务器执行 (a) 并确保应用程序凭据正确。第三级 (c) 是执行 (a) 和 (b) 并确保客户端证书与帐户唯一关联。

(c) 的好处是它可以防止“受信任的 CA”信任的人滥用非法获得的应用程序密码。

我意识到这不太可能,但我想知道 (c) 在多大程度上被假定为相互 SSL 的一部分,而不是简单的 (a) 或 (b)?

【问题讨论】:

这三个都需要,还需要第四个完整步骤:授权,,即该用户是否有权访问应用程序的这一部分? 【参考方案1】:

是的,我在想something similar。

您可以做的一件事是为您的应用程序提供一个不包含任何 CA 的单独信任库。这样,您就可以使用您已授权的自签名证书授予客户端访问权限。

【讨论】:

没有。这将身份验证与授权混为一谈。它们本质上是不同的东西。 SSL 可以很好地为您进行身份验证,但它根本无法进行授权:只有应用程序可以这样做。【参考方案2】:

我假设“相互 SSL”是指 TLS v1.0、1.1 或 1.2,同时具有基于服务器和客户端证书的身份验证,而“相互 SSL 的一部分”是指 TLS 规范的一部分。

使用这种解释,只有 (a) 是相互 SSL 的一部分。 TLS 规范包括与 SSL 握手消息共享证书。它不包括用户名/密码检查或针对帐户检查 SSL 证书。

【讨论】:

以上是关于相互 SSL - 多少身份验证就足够了?的主要内容,如果未能解决你的问题,请参考以下文章

基于相互证书的身份验证能否与基于 SSL 的基本身份验证共存,用于同一应用程序中的不同路径?

OpenSSL 的相互身份验证始终成功

使用 WCF 进行相互 SSL 身份验证:握手阶段没有 CertificateRequest 和 CertificateVerify

相互证书身份验证失败并出现错误 403.16

相互SSL身份验证 - 客户端和服务器端。 Python - > Django / Twisted / Tornado

与 Web 服务的相互身份验证