2016-03-07 4 views
0

Я не могу понять, что здесь происходит. Мое приложение вызывает несколько разных apis, используя SSL. Исключение не говорит мне о том, где он застревает, и приложение отлично работает на нескольких компьютерах с Windows 10 и одной машиной Windows 7. Приложение было встроено в .Net 4, который установлен на сервере.Windows Server 2003 неправильно обрабатывает SSL в моем приложении «Не удалось установить доверительные отношения для безопасного канала SSL/TLS».

************** Exception Text ************** 
System.Net.WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure. 
    at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception) 
    at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult) 
    at System.Net.TlsStream.CallProcessAuthentication(Object state) 
    at System.Threading.ExecutionContext.runTryCode(Object userData) 
    at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData) 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result) 
    at System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size) 
    at System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size) 
    at System.Net.ConnectStream.WriteHeaders(Boolean async) 
    --- End of inner exception stack trace --- 
    at System.Net.HttpWebRequest.GetResponse() 
    at Werkbon_naar_Appeee.Task.Get() 
    at Werkbon_naar_Appeee.Main.Form2_Load(Object sender, EventArgs e) 
    at System.Windows.Forms.Form.OnLoad(EventArgs e) 
    at System.Windows.Forms.Form.OnCreateControl() 
    at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 
    at System.Windows.Forms.Control.CreateControl() 
    at System.Windows.Forms.Control.WmShowWindow(Message& m) 
    at System.Windows.Forms.Control.WndProc(Message& m) 
    at System.Windows.Forms.ScrollableControl.WndProc(Message& m) 
    at System.Windows.Forms.Form.WmShowWindow(Message& m) 
    at System.Windows.Forms.Form.WndProc(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 

Я мало знаю о том, как работает SSL и что здесь может быть неправильным. Поиск решения не очень помог мне.

Любая помощь очень ценится.

Edit:

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

+0

«Удаленный сертификат недействителен в соответствии с процедурой проверки» – i486

+0

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

+0

Вам нужно «RemoteCertificateValidationCallback», не проверяя действительность удаленного сертификата. Выберите соответствующий конструктор 'SslStream' с пользовательской проверкой сертификата. – i486

ответ

0

Являются ли эти самоподписанные сертификаты? Ошибка The remote certificate is invalid according to the validation procedure подразумевает, что что-то не так, сертификат, как будто это не из доверенного органа или истек.

Возможно, вам потребуется добавить сертификат вручную на компьютер, вызывающий API.

https://blogs.msdn.microsoft.com/jpsanders/2009/09/16/troubleshooting-asp-net-the-remote-certificate-is-invalid-according-to-the-validation-procedure/

Update

Заканчивать ответ на странице ниже, чтобы загрузить сертификат с помощью Firefox

https://superuser.com/questions/97201/how-to-save-a-remote-server-ssl-certificate-locally-as-a-file

Нажмите на иконку сертификата SSL на верхней/Навесной замок внизу.

Нажмите Просмотр сертификата

Нажмите на Подробности Tab

Выберите, какой сертификат вы хотите от иерархии

Нажмите Экспорт

Чтобы добавить сертификат в магазин использовать инструкцию приведенный в предыдущей ссылке.

+0

Это не касается самоподписанного сертификата. Я открыл api, который вызывается в браузере, и он говорит: «Существует проблема с сертификатом безопасности этого веб-сайта».Таким образом, я смог изолировать api, вызвав проблему, но я не могу понять, как я могу добавить этот сайт в список доверенных сертификатов, даже со ссылкой, которую вы предоставили. Мне нужно получить файл сертификата для экспорта, где я могу найти этот файл? –

+0

Для получения инструкций по экспорту сертификата с помощью firefox см. Мой обновленный ответ. – GJKH

+0

Да, это действительно помогает, спасибо. Однако он все еще не работает. Я установил сертификат как для текущего пользователя, так и для локального компьютера, и он отображается в списке, как обычно, но ошибка не изменилась вообще. Я не могу сказать, где я здесь ошибся. –

 Смежные вопросы

  • Нет связанных вопросов^_^