我们应该比较Mutual TLS中的指纹吗



使用实现双向TLS时https://learn.microsoft.com/en-us/aspnet/core/security/authentication/certauth?view=aspnetcore-5.0我看到他们正在将客户端证书的指纹与服务器证书的指纹进行比较。但是这些在生产中总是保证是一样的吗?一个不是只包含公钥,另一个不是同时包含私钥和公钥吗?如果是这样的话,他们不是有不同的指纹吗?

我在那里找到了你的观点,这是答案,在之前的一段

由于本例中使用了相同的自签名证书,请确保只能使用您的证书。

出于某种原因,他们选择为服务器和客户端使用相同的证书(也许是为了简单起见?(这在现实世界中确实是一种*BAD*的做法。在不同的实体之间共享相同的证书从来都不是一个好主意。客户端证书和服务器证书必须不同。

基于证书的客户端身份验证更加困难,因为您需要有一个帐户目录来验证客户端证书。例如,Active Directory。此目录应实现certificate <-> principal映射。当您收到证书时,您将在目录中搜索主体,如果找到,您可以唯一地区分客户端,验证其权限和权限并执行日志记录。

如果找不到映射,则拒绝身份验证,因为您不了解客户端。

如果你不在乎区分客户,那么你显然不需要相互身份验证。

永远不要在代码中使用核心客户端证书/指纹,因为它们会定期更改,因此外部帐户目录(使用带外进程更新(是必要的。

不过,当任意客户端只有在拥有由您的私人CA颁发的证书时才能连接到您的服务器时,您可以实现该逻辑。这是有效的场景。在这种情况下,您不需要外部帐户目录,并且您验证客户端证书是由确切的CA或列表中预定义的CA之一颁发的,然后您允许后续通信。但它们对您的系统仍然是匿名的。

根据添加内容进行编辑:

如果你的案例符合最后一段,那么:

  • 验证通用链(即时间有效性、扩展、吊销等(
  • 验证直接发行人是否在您批准的CA(私人(的明确列表中

最新更新