Подтвердить что ты не робот

С# 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?

4b9b3361

Ответ 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;
}