我已经实现了一个 STS,它允许客户端使用 X509 证书进行身份验证。WIF(现在内置在 .NET 4.5 中)有一个X509SecurityToken
类似乎非常适合这种情况。就我而言,我还想传递一个ActAs令牌,但在我看来,虽然 ActAs 令牌是经过验证的(通过不同的令牌处理程序集合),但对于X509SecurityToken
,此验证并不能证明调用者拥有私钥,就像将令牌用作消息凭据时一样。
有没有办法解决?我如何要求 ActAs 令牌证明它具有私钥?
我已经实现了一个 STS,它允许客户端使用 X509 证书进行身份验证。WIF(现在内置在 .NET 4.5 中)有一个X509SecurityToken
类似乎非常适合这种情况。就我而言,我还想传递一个ActAs令牌,但在我看来,虽然 ActAs 令牌是经过验证的(通过不同的令牌处理程序集合),但对于X509SecurityToken
,此验证并不能证明调用者拥有私钥,就像将令牌用作消息凭据时一样。
有没有办法解决?我如何要求 ActAs 令牌证明它具有私钥?
出示公钥或 X509 证书并不能证明我是私钥的持有者。
那不是目的。
但是签名证书也不能证明我是私钥的持有者。
如果我给你寄一张乔治 W 的亲笔签名照片,而你验证签名是真实的,而且照片是乔治 W,这是否证明我是乔治 W?
您验证我是乔治 W 的方式是您向我发送一个随机挑战(在过去它被称为通知),然后我用我的私钥对其进行签名。
然后,您使用公钥(通过 x509 证书)验证签名。
证书的目的是识别具有证书的实体而不是私钥的持有者。
而且它真的不能验证我是乔治 W。
它只是验证我在那个时间点拥有私钥。
确实,如果身份验证是基于签名证书的,那么您可以使用任何经过身份验证的服务器进行身份验证,这种错误假设是签名证书证明我是私钥的持有者。
您的困惑不仅限于 PKI,而是一般的安全性。
为了加密通道,加密密钥每 x 时间段更改一次。