【问题标题】:How to process custom certificates in HTTPS?如何在 HTTPS 中处理自定义证书?
【发布时间】:2011-03-26 09:03:50
【问题描述】:

我正在尝试使用 HttpWebRequest 获取页面,但出现此异常:

Could not establish trust relationship for the SSL/TLS secure channel.

是否可以为HttpWebRequest 的特定实例指定自定义RemoteCertificateValidationCallback

(我不能使用ServicePointManager.ServerCertificateValidationCallback,因为我的代码是库的一部分。)

【问题讨论】:

  • 您使用的是什么类型的证书 - 您使用的是自签名证书还是 Verisign(或类似)签名证书?
  • 各种:自签名、使用不受信任的 CA 签名...

标签: c# .net https httpwebrequest certificate


【解决方案1】:

我无法使用 ServicePointManager.ServerCertificateValidationCallback,因为我的代码是库的一部分

这样做,但根据发件人过滤对代理的调用?

更新:根据反馈:可能需要启动 AppDomain 来执行此操作(这将避免干扰同一进程中发生的其他事情)。

【讨论】:

  • 我知道发件人包含HttpWebRequest的实例。但是该库无法更改这一点,因为将使用该库的应用程序可能会更改 ServerCertificateValidationCallback 而不会注意到该库已对其进行了修改。
  • 如果你使用 HttpWebRequest 来实现你的库的功能,看起来实现细节 (HttpWebRequest) 正在从你的 API 中泄露出来。为什么您图书馆的消费者需要访问该类?即,为什么没有将这些功能封装在您的库中?
  • @TN 是应用程序(或其他库)正在进行这样的全局更改,无论如何你都搞砸了。您可以添加/删除您的委托,而不会干扰附加的其他处理程序(这是正常行为 - 事件没有删除所有附加委托的机制)。
  • @Kirk 消费者不需要访问该类。它被封装在库中。问题是在库中更改全局静态属性 ServicePointManager.ServerCertificateValidationCallback 不是一个好主意,因为某些应用程序可能会出于他们的目的使用它。
  • @Richard ServicePointManager.ServerCertificateValidationCallback 不是事件而是属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
  • 2016-11-14
  • 2011-03-10
相关资源
最近更新 更多