2017-02-10 36 views
19

我正在尝试创建一个C#代理DLL,允许我的离线工作站上的VS2015社区通过具有身份验证的公司HTTP代理访问Internet。C#Visual Studio 2015:IWebProxy证书验证

this MSDN blog post指示我能够VisualStudio的连接到HTTP页面以这样的方式

namespace VSProxy 
{ 
    public class AuthProxyModule : IWebProxy 
    { 
     ICredentials crendential = new NetworkCredential("user", "password"); 

     public ICredentials Credentials 
     { 
      get 
      { 
       return crendential; 
      } 
      set 
      { 
       crendential = value; 
      } 
     } 

     public Uri GetProxy(Uri destination) 
     { 
      ServicePointManager.ServerCertificateValidationCallback = (Header, Cer, Claim, SslPolicyErrors) => true; 
      return new Uri("http://128.16.0.123:1234", UriKind.Absolute); 
     } 

     public bool IsBypassed(Uri host) 
     { 
      return host.IsLoopback; 
     } 
    } 
} 

但我无法连接到该帐户认证页面的Visual Studio社区的访问。

所以,我试图验证使用DLL的Microsoft证书。

有什么办法可以完成HTTPS和证书问题?

如何验证webProxy DLL中的证书?

回答

0

您可能拥有SSL代理证书公司给的。你刚才导入一个进入IE的根证书(即http://www.instructables.com/id/Installing-an-SSL-Certificate-in-Windows-7/https://bto.bluecoat.com/webguides/sslv/sslva_first_steps/Content/Topics/Configure/ssl_ie_cert.htm

或者只是忽略了通过.NET配置证书验证

  1. how to set ServicePointManager.ServerCertificateValidationCallback in web.config

  2. How to stop certificate errors temporarily with WCF services(OzrenTkalcecKrznaric的答案)

对于Visual Studio 2015,.Net配置文件i s位于“%PROGRAMFILES(x86)%\ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ devenv.exe.config”。

我希望它有帮助。

0

ServicePointManager.ServerCertificateValidationCallback如果您希望验证证书,则必须在此处执行此操作,它是.Net网络证书验证的主要访问方式。我建议你将回调绑定在其他地方,而不是在GetProxy方法中。把它放在初始化代理的地方,并在那里执行你的证书验证。

0

如果你想完全绕过证书检查,你可以设置你的ServicePointManager.ServerCertificateValidationCallback始终使用委托返回true:

var validationCallback = new RemoteCertificateValidationCallback(delegate { return true; }); 

....

ServicePointManager.ServerCertificateValidationCallback += validationCallback; 

我包在try/catch/finally和finally中,删除代理(因为它适用于进程范围的iirc):

finally 
{ 
    ServicePointManager.ServerCertificateValidationCallback -= validationCallback; 
} 
+0

** warnung:++因为该设置是全局的,所以即使您关闭验证,它也会应用于多线程调用。最好实施特定的主机检查或接受特定的证书指纹。更好的是,将证书安装到Windows证书存储中,以便自动提取证书。 – jessehouwing