2013-06-24 51 views
0

我有这个类验证使用流利的验证

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"); 

回答

0

我已经回答了这个解决方案,并在我原来的问题标记它。结果证明X509Certificate2在验证中有一个构建,可以方便地进行验证。