2013-06-24 49 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在驗證中有一個構建,可以方便地進行驗證。