【问题标题】:Can using self-signed certificates with WCF be secure?将自签名证书与 WCF 一起使用是否安全?
【发布时间】:2010-12-01 17:46:50
【问题描述】:

想象一下,我们正在使用带有 WCF(私钥/公钥对)的经典非对称加密。显然,在私钥不被盗之前它是安全的。我们不需要密钥之间的任何信任链,对吧?客户端只需要知道其服务器的公钥,反之亦然。

只有当客户端事先不知道服务器的公钥并在第一次访问时获取它时才会出现问题。在这里,我们存在实际服务器是“中间人”而不是真实服务器的风险。这里我们需要证书。客户端访问服务器,获取其证书(包含公钥)并验证它。

对于验证,客户端需要确保为该特定服务器颁发了服务器证书。这里我们需要信任链。正确的?

如果客户端通过 WCF 使用 MessageSecurity.Mode=Certificate 访问服务器,则事先知道服务器的证书(其公钥),我们是否可以说即使证书是自签名的,通信也是安全的?

通常认为使用自签名证书不安全,在生产中应始终避免使用。
但为什么?如果客户端知道预期的公钥然后获得证书,将其视为受信任的(通过将其公钥与预期的匹配),那么它不会取消服务器必须使用其私钥加密有效负载的事实。当且仅当私钥和公钥一起创建时,密码才能使用公钥成功解密。

你能看出我的推理有什么缺陷吗?

如果正确,那么我可以确定使用自定义 X509CertifacateValidator 并将客户端代理的 ClientCredentials.ServiceCertificate.DefaultCertificate 设置为某个固定的(在客户端上)X509Certificate 安全吗?

自定义 X509CertifacateValidator 是这样的:

public class CustomCertificateValidator : X509CertificateValidator
{
    private readonly X509Certificate2 m_expectedCertificate;

    public CustomCertificateValidatorBase(X509Certificate2 expectedCertificate)
    {
        m_expectedCertificate = expectedCertificate;
    }

    public override void Validate(X509Certificate2 certificate)
    {
        ArgumentValidator.EnsureArgumentNotNull(certificate, "certificate");

        if (certificate.Thumbprint != m_expectedCertificate.Thumbprint)
            throw new SecurityTokenValidationException("Certificated was not issued by trusted issuer");
    }
}

【问题讨论】:

  • 我认为这更多地与信任有关,而不是安全。来自证书颁发机构 (CA) 的证书是受信任的,例如,如果 FF 或 IE 浏览器将显示一个绿色条,如果他们信任签署您的证书的 CA。 (Geotrust 或 Verisign)生成您自己的证书,并确保您的私钥安全,应该没问题,但是 256 位 VeriSign 证书可以比自己生成的 256 位证书更安全吗? CA 可以做的一件有用的事情是撤销证书。在这种情况下,客户端可以与 CA 核对,以确保证书仍然有效。

标签: wcf security certificate wcf-security x509certificate


【解决方案1】:

是的,您的理解是正确的,但是它遗漏了一件事 - 事情会随着时间而改变。如果服务器的私钥被泄露或服务器的证书以其他方式失效(无论如何),PKI 提供证书撤销和撤销检查的机制。而使用自签名证书是不可能的(至少在没有构建自定义 PKI 基础设施的情况下)。

解决此问题的一种方法是创建一个自定义的自签名证书,该证书将用作 CA 证书。使用此证书签署服务器证书并将吊销信息放入 CA 证书中。然后在客户端将 CA 证书添加为受信任,并针对该 CA 证书执行服务器证书的验证,并检查吊销。这意味着您必须在某些(可能是私有的)Web 服务器上发布 CRL,或者运行 OCSP 响应程序。

【讨论】:

  • +1 - 我也在想同样的事情,但不是 100% 确定。另外我认为一些生成证书的算法比其他算法更好?此外,增加密钥大小可能会使某些证书更安全。我的意思是,要花更长的时间来猜关键。
猜你喜欢
  • 2011-04-08
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 1970-01-01
  • 2011-12-23
相关资源
最近更新 更多