使用fluent验证从字符串验证X509Certificate2

本文关键字:验证 X509Certificate2 字符串 使用 fluent | 更新日期: 2023-09-27 18:19:47

我有这个类

SAMLConfigurationValidator(): AbstractValidator<SAMLConfiguration>
{
  public SAMLConfigurationValidator()
  {
       //some rules....
      //My desired Code
      RuleFor(x => x.Certificate)
              .IsValid().WithMessage("Not a valid certificate");

  }
}

本质上,这需要使用一个字符串(x.Certificate),创建X509Certificate2的实例,然后使用.Verify()或.ChainPolicy方法来确保用户输入的字符串证书是有效的证书。

我对加密还很陌生,我搜索过的大多数案例或示例似乎都在做更多的用例验证。在这里,我只想检查"用户"输入的证书是否是有效的证书。

解决方案:

public class ValidateCertificate 
  {
    public ValidateCertificate() { }

    static X509Certificate2 GenerateCertificate(string cert)
    {
      try
      {
        byte[] rawData = Convert.FromBase64String(cert);
        return new X509Certificate2(rawData);
      }
      catch 
      {
        return null;
      }
    }
    public bool Validate(string certificate)
    {
      var cert = GenerateCertificate(certificate);
      if (cert != null)
        return cert.Verify();
      return false;
    }
  }

你可以打电话给

RuleFor(x => validateCertificate.Validate(x.Certificate))
        .Equal(true)
        .WithMessage("Not a valid Certificate.")
        .WithName("Certificate");

使用fluent验证从字符串验证X509Certificate2

我已经回答了这个解决方案,并在我最初的问题中标记了它。事实证明,X509Certificate2有一个内置的Verify,可以方便地进行验证。