【问题标题】:Validation of certificate for client为客户验证证书
【发布时间】:2014-02-14 12:07:01
【问题描述】:

我正在创建一个使用 EWS(Exchange Web 服务)来移动邮件的应用程序。我可以绕过证书验证来运行我的应用程序。我使用此代码绕过证书验证:

ServicePointManager.ServerCertificateValidationCallback =
    delegate(object s, X509Certificate certificate,
             X509Chain chain, SslPolicyErrors sslPolicyErrors)
   { 
        return true; 
   }; 

为了验证证书,我关注了this post,这对查找证书和检查证书非常有帮助。

使用该帖子时 ValidateCert 方法抛出异常

chain.ChainPolicy.RevocationMode = X509RevocationMode.Online | X509RevocationMode.Offline; 

例外是:

System.ArgumentException: Illegal enum value: value.
at
System.Security.Cryptography.X509Certificates.X509ChainPolicy.
             set_RevocationMode(X509RevocationMode value)

我正在使用 Visual Studio 2013。 我愿意接受任何其他方法来完成相同的任务。

【问题讨论】:

  • 看起来该示例错误或已过时。 X509RevocationMode 枚举不能用作 Flags ,只需选择三个值中的 1 个即可。
  • 你能不能请我做这件事。
  • X509RevocationMode.Online | X509RevocationMode.Offline - 选择其中一个。如果您选择X509RevocationMode.Online,那么您可能会在下载大型 CRL 时拒绝您的应用程序(或尝试下载丢失的 CRL)。
  • 另见Verify Remote Server X509Certificate using CA Certificate File。它有一个服务器验证的工作示例,包括从文件系统加载 CA。

标签: c# ssl certificate x509certificate x509


【解决方案1】:

您必须选择OnlineOffline

  • Online:总是尝试联系证书中指定的 CDP 或 OCSP url 以获取 CRL 列表以检查吊销
  • Offline: 尝试使用现有的 CRL 缓存副本

如果 CDP 或 OCSP 服务器没有响应、存在连接问题等等,第一个选项可能会很慢。如果这个问题是永久性的,它甚至会失败。

我建议在大多数情况下使用第二个选项。不使用 CRL 缓存副本的唯一原因是最近发生了证书吊销,并且它们刚刚发布到 CRL。此外,CRL 有过期日期,如果过期,将强制获取新副本。

您还可以在使用脱机选项启动进程之前清除 CRL 缓存。谷歌它:有不同的选择。您需要使用certutil.exe

【讨论】:

    猜你喜欢
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2018-02-12
    • 2011-04-09
    • 2013-10-07
    • 2012-02-23
    相关资源
    最近更新 更多