Отправка сертификата клиента в HttpWebRequest

Я пытаюсь передать сертификат клиента на сервер, используя приведенный ниже код, однако я все еще возрождаю ошибку HTTP 403.7 - Запрещено: требуется сертификат клиента SSL. Каковы возможные причины, по которым HttpWebRequest не отправляет сертификат клиента?

var clientCertificate = new X509Certificate2( @"C:\Development\TestClient.pfx", "bob" );

                    HttpWebRequest tRequest = ( HttpWebRequest )WebRequest.Create( "https://ofxtest.com/ofxr.dll" );

                    tRequest.ClientCertificates.Add( clientCertificate );
                    tRequest.PreAuthenticate = true;
                    tRequest.KeepAlive = true;
                    tRequest.Credentials = CredentialCache.DefaultCredentials;
                    tRequest.Method = "POST";
                    var encoder = new ASCIIEncoding();
                    var requestData = encoder.GetBytes( "<OFX></OFX>" );

                    tRequest.GetRequestStream().Write( requestData, 0, requestData.Length );
                    tRequest.GetRequestStream().Close();

                    ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback( CertPolicy.ValidateServerCertificate );
                    WriteResponse( tRequest.GetResponse() );

person Aaron Fischer    schedule 20.03.2010    source источник


Ответы (3)


Проблема заключалась в том, что в некоторых системах не было промежуточного центра сертификации, от которого зависел этот сертификат. Это странно еще и потому, что файл pfx этого сертификата содержал оба сертификата.

person Aaron Fischer    schedule 01.07.2011
comment
В частности, я обнаружил, что если сертификат клиента не подписан уполномоченным органом, который находится в списке доверенных ЦС сервера, сервер действует так, как будто сертификат клиента не был отправлен. Предположительно, это связано с тем, что у него нет возможности узнать, обеспечивает ли сертификат какую-либо полезную аутентификацию. (Но это очень раздражает, если у вас есть логика приложения для проверки достоверности конкретных сертификатов.) - person Ian Griffiths; 14.02.2013

Это может быть неправильный сертификат, может отсутствовать сертификат и т. д. Используйте Fiddler (бесплатно) в качестве прокси-сервера для перехвата трафика, и вы увидите, прикреплен ли сертификат или нет.

person Chris Thornton    schedule 20.03.2010
comment
Я использовал fiddler и не вижу указаний на сертификат клиента в первоначальном запросе на подключение. У меня есть этот сертификат, работающий в тестовом приложении mfc, поэтому, похоже, что-то с .net что-то не нравится. - person Aaron Fischer; 20.03.2010
comment
Вы можете использовать SoapUI, чтобы сделать образец запроса и прикрепить к нему .pfx (см. Настройки | SSL, и вы можете прикрепить туда .pfx). Изучите этот запрос через Fiddler, и вы увидите, как должен выглядеть хороший запрос. - person Chris Thornton; 20.03.2010

Верен ли пароль? Я не знаком с тем, как это сделать в .net, но я предполагаю, что "bob" - это пароль. Измените на «rick» и посмотрите, не появится ли ошибка. Если это так, то вы, вероятно, делаете это правильно. Если все так же, как если бы вы использовали «боб», возможно, проблема с паролем.

person Chris Thornton    schedule 20.03.2010