Назад | Перейти на главную страницу

Вызов веб-службы сертификата клиента

У меня есть требование вызвать веб-службу сервера с сертификатом клиента. Они предоставили мне один файл .crt. Я размещаю свой проект в WindowsServer2008 IIS7.

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

CertEnroll::CX509Enrollment::p_InstallResponse: ANSI bad tag value met.

Я googledd и ничего не нашел о том, как установить сертификат клиента .crt. Также попытался установить как объяснение Вот на step4

И когда я так позвонил

string certPath = Server.MapPath("../certificate/iot01.servername.crt");
X509Certificate2 cert = new X509Certificate2(certPath);
ws.ClientCertificates.Add(cert);
res = ws.methodName(params);

Я получил ошибку: System.IO.IOException: рукопожатие не удалось из-за непредвиденного формата пакета. в System.Net.Security.SslState.StartReadFrame (буфер Byte [], Int32 readBytes, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.StartReceiveBlob (буфер Byte [], AsyncProtocolRequest asyncRequestatecurity. CheckCompletionBeforeNextReceive (сообщение ProtocolToken, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.StartSendBlob (входящий байт [], счетчик Int32, AsyncProtocolRequest asyncRequest, буфер AsyncProtocolRequest, AsyncRequest (получение) в System.Net.SecForceAncurity, AsyncRequest (получение) в System.Net.SecForceAcuritySlState. asyncRequest) в System.Net.Security.SslState.ProcessAuthentication (LazyAsyncResult lazyResult) в System.Net.TlsStream.CallProcessAuthentication (состояние объекта) в System.Threading.ExecutionContext.RunInternal (ExecutionContext в состоянии callbackCallback, прецедент выполнения контекста выполнения), Контекст System.Threading.ExecutionContext.Run (ExecutionContext контекст выполнения, обратный вызов ContextCallback, состояние объекта, логическое значение preserveSy ncCtx) в System.Threading.ExecutionContext.Run (ExecutionContext executionContext, обратный вызов ContextCallback, состояние объекта) в System.Net.TlsStream.ProcessAuthentication (результат LazyAsyncResult) в System.Net.TlsStream.Write (буфер Byte [], смещение Int32, Int32 size) в System.Net.PooledStream.Write (буфер Byte [], смещение Int32, размер Int32) в System.Net.ConnectStream.WriteHeaders (Boolean async) в System.Web.Services.Protocols.WebClientProtocol.GetWebResponse (запрос WebRequest) в System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse (запрос WebRequest) в System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke (String methodName, Object [] parameters) в .....

Это связано с установкой и вызовом моего сертификата. Может ли кто-нибудь указать мне, где я ошибся.

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

В качестве метода грубой силы, чтобы добраться до сути вашей проблемы, сделайте следующее:

Используйте совершенно другой новый проект, чтобы создать код, просто чтобы протестировать часть об аутентификации сервера, используя шаги в вашей ссылке, которую вы называете «здесь». Это позволит вам не связываться с другими проблемами, которые могут помешать вашим возможностям отладки.

Однако в качестве быстрой проверки

Первая попытка Убедитесь, что вам не требуется TLS вместо SSL, используя вместо этого EXPLICIT TLS-соединение:

Проверьте любой метод в объекте подключения, который запускает TLS http://www.limilabs.com/blog/the-handshake-failed-due-to-an-unexpected-packet-format

client.Connect("mail.example.com"); 
client.StartTLS(); 

Или попробуйте это https://social.msdn.microsoft.com/Forums/en-US/e8807c4c-72b6-4254-ae64-45c2743b181e/ssltls-the-handshake-failed-due-to-an-unexpected-packet-format-mercury- для-win32-pop3? форум = ncl

Кажется, что в вашем журнале четыре запуска (процессы 5068, 3984, 1628 и 7124)? Последние три работают? Вы что-то изменили?

По крайней мере, для 5068 вы являются читаете ответ после отправки команды STLS, но вы не чтение начальной строки сервера "я жив". См. Например в википедии:

S: C: S: + OK Готовность сервера POP3 <1896.697170952@dbc.mtview.ca.us>

Итак, вам нужно прочитать эту строку, перед вы отправляете команду STLS. Вы можете видеть в 5068, что SslStream получает ответ + OK B [egin SSL ...] вместо ответа SSL.

Позже: теперь я вижу, что происходит. В остальных трех запускает stream.Read операция считывает обе строки ответа! Так что это просто удача, работает это или нет.

Например, в предыдущем примере я не печатал обе строки, а теперь распечатал обе:

D: \ Temp> SslStartTest.exe -client2 localhost 110 соответственно: + OK <67051906.3308@alanjmcf.example.com>, сервер POP3 готов. соответственно: + OK Начать согласование SSL / TLS ... HandleLocalCertificateSelectionCallback HandleRemoteCertificateValidationCallback SslPolicyErrors: RemoteCertificateNameMismatch, RemoteCertificateChainErrors Подключен сеанс TLS. :-) Шифр: Уровень TripleDes 168 Хэш: Уровень Sha1 160 Обмен ключами: Уровень RsaSign 1024 Протокол: Tls Аутентифицирован: True как сервер? False IsSigned: True Is Encrypted: True Список отозванных сертификатов проверен: False Локальный сертификат является нулевым. Удаленный сертификат был выдан на CN = alanjmcf.example.com и действителен с 03.04.2009 1 0:47:40 до 29.03.2029 10:47:40. Может читать: True, писать True Can timeout: True ^ C