С# Visual Studio 2015: проверка сертификата IWebProxy
Я пытаюсь создать прокси-сервер С#, который позволяет сообществу VS2015 на моей автономной рабочей станции доступ к Интернету через корпоративный HTTP-прокси с аутентификацией.
Следуя инструкциям это сообщение в блоге MSDN, я могу подключить 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.
Итак, я пытаюсь проверить сертификат Microsoft с помощью DLL.
Есть ли способ решить проблему с HTTPS и сертификатом?
Как проверить сертификат в библиотеке webProxy?
Ответы
Ответ 1
Возможно, у вас есть сертификат 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 config
В случае Visual Studio 2015 файл конфигурации .Net находится в папке "% PROGRAMFILES (x86)%\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe.config".
Я надеюсь, что это будет полезно.
Ответ 2
ServicePointManager.ServerCertificateValidationCallback
Является основным доступом для проверки сертификата сети на .Net, если вы хотите проверить сертификат, вы должны сделать это здесь. Я предлагаю вам связать обратный вызов где-то в другом месте, чем внутри метода GetProxy
. Поместите его там, где вы инициализируете прокси-сервер и выполняете проверку сертификата там.
Ответ 3
Если вы хотите обойти проверку сертификата вообще, вы можете установить ServicePointManager.ServerCertificateValidationCallback
всегда для использования делегата, который возвращает true:
var validationCallback = new RemoteCertificateValidationCallback(delegate { return true; });
....
ServicePointManager.ServerCertificateValidationCallback += validationCallback;
Я бы обернул это в try/catch/finally и, наконец, удалил делегат (поскольку он в ином случае применяет iirc):
finally
{
ServicePointManager.ServerCertificateValidationCallback -= validationCallback;
}