客户端证书 - 我应该使用自签名还是 CA 颁发的证书?

时间:2021-05-24 06:48:59

标签: c# client-certificates

我们有服务器到服务器的通信,我们打算使用客户端证书。我们应该使用自签名证书还是CA颁发的证书?为什么?

在这两种情况下 - 使用自签名和 CA 颁发,我们如何在以下服务器代码中验证客户端证书是否有效?

public class CheckClientCertAttribute : AuthorizationFilterAttribute
{
    public override void OnAuthorization(HttpActionContext actionContext)
    {
        var cert = actionContext.Request.GetClientCertificate();

        if (cert == null)
        {
            actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden)
            {
                ReasonPhrase = "Client Certificate not present in the HTTP request."
            };

            return;
        }

        // How do I make sure the client certificate is valid here?

        base.OnAuthorization(actionContext);
    }
}

1 个答案:

答案 0 :(得分:1)

如果您有能力购买它,您应该使用“真实”证书,最好是由您公司自己的中间证书颁发机构颁发的公司证书,而该证书又由受信任的根颁发机构签名。

您要这样做的原因是部署。如果您使用通用的、受信任的根权限,则不必在所有服务器上安装您自己的根权限。这不仅会给后面带来麻烦,还会为黑客创建一个很好的攻击途径,因为在该机器上运行的所有其他软件也会信任该 root 权限。

至于验证,由于您是在代码中进行的,因此您可以验证任何您想要的内容。如果您想非常严格,您可以验证序列号(尽管这在您必须更新证书时会造成一些维护麻烦)。另一种验证它的常用方法是检查主题或通用名称字段。如果操作正确,您可以续订证书而无需重新配置您的应用程序,因为您正在检查的字段保持不变。