C#Visual Studio 2015:IWebProxy证书验证
我正在尝试创建一个C#代理DLL,允许VS2015社区在我的脱机工作站上通过一个具有身份验证的公司HTTP代理访问internet 按照的说明,我可以通过以下方式将VisualStudio连接到HTTP页面:C#Visual Studio 2015:IWebProxy证书验证,c#,visual-studio,http,ssl,proxy,C#,Visual Studio,Http,Ssl,Proxy,我正在尝试创建一个C#代理DLL,允许VS2015社区在我的脱机工作站上通过一个具有身份验证的公司HTTP代理访问internet 按照的说明,我可以通过以下方式将VisualStudio连接到HTTP页面: namespace VSProxy { public class AuthProxyModule : IWebProxy { ICredentials crendential = new NetworkCredential("user", "passw
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中的证书?您可能拥有公司提供的SSL代理证书。您只需将一个导入IE中的根证书(即) 或者只是通过.Net配置忽略证书验证
我希望这会有所帮助。ServicePointManager.ServerCertificateValidationCallback是.Net上网络证书验证的主要访问权限。如果要验证证书,必须在此处执行。我建议您将回调绑定到
GetProxy
方法之外的其他地方。将其放在初始化代理并在那里执行证书验证的位置。如果要完全绕过证书检查,可以将ServicePointManager.ServerCertificateValidationCallback设置为始终使用返回true的委托:
var validationCallback = new RemoteCertificateValidationCallback(delegate { return true; });
我会将其包装在try/catch/finally中,并在finally中删除委托(因为它会应用流程范围的iirc):
更新日期:2018年3月26日:
如果您可以控制HttpClient
的创建,则可以在构建时传递HttpClientHandler
,并将其ServerCertificateCustomValidationCallback
委托设置为返回true。您有效地限制了在整个过程范围内禁用SSL检查并将其限制为使用此HttpClient的危险影响。更安全。代码:
var handler = new HttpClientHandler();
// Optional check to enable / disable based on config setting.
if (ConfigurationManager.AppSettings["EnableSslCertificateCheck"] == null ||
Convert.ToBoolean(ConfigurationManager.AppSettings["EnableSslCertificateCheck"]) == false)
{
handler = new HttpClientHandler
{
ClientCertificateOptions = ClientCertificateOption.Manual,
ServerCertificateCustomValidationCallback =
(httpRequestMessage, cert, cetChain, policyErrors) => true
};
}
return new HttpClient(handler);
**warnung:++由于该设置是全局设置,因此即使关闭验证,它也将应用于多线程调用。最好实现特定的主机检查或接受特定的证书指纹。更好的是,将证书安装到windows证书存储中,以便自动获取证书。
finally
{
ServicePointManager.ServerCertificateValidationCallback -= validationCallback;
}
var handler = new HttpClientHandler();
// Optional check to enable / disable based on config setting.
if (ConfigurationManager.AppSettings["EnableSslCertificateCheck"] == null ||
Convert.ToBoolean(ConfigurationManager.AppSettings["EnableSslCertificateCheck"]) == false)
{
handler = new HttpClientHandler
{
ClientCertificateOptions = ClientCertificateOption.Manual,
ServerCertificateCustomValidationCallback =
(httpRequestMessage, cert, cetChain, policyErrors) => true
};
}
return new HttpClient(handler);