| ||||
| ||||
При использовании VB-клиента Set Calc = CreateObject("MSSOAP.SoapClient") Calc.mssoapinit "https://pas/MSSoapSamples/Calc/Service/Rpc/AspVbsVb/Calc.wsdl" Calc.ConnectorProperty("SSLClientCertificateName") = "LOCAL_MACHINE\My\vb" Answer = Calc.Add(10, 11) MsgBox "10+11=" & Answer , для осуществления защищенного доступа к WEB-службе, расположенной на IIS-сервере, с использованием аутентификации клиентов по сертификатам возникает ошибка: A security problem occurred – при первой попытке и The download of the specified resource has failed – при следующих. На клиентской машине установлен сертификат vb в Сертификаты (локальный компьютер)->Личные. Так же установлен сертификат probecrt в Сертификаты(текущий пользователь)-Личные, используя который можно подключится к WEB-серверу, без всяких проблем, но при использовании в VB-клиенте: Calc.ConnectorProperty("SSLClientCertificateName") = "probecrt" Возникают те же ошибки! Сертификаты сервера и клиента выданы verisign. В чем может быть проблема? Спасибо. | ||||
Ответы: | ||||
| ||||
1. Из броузера ресурс https://pas/MSSoapSamples/Calc/Service/Rpc/AspVbsVb/Calc.wsd доступен или нет (отображается?)/ 2. Из брузера https://pas/MSSoapSamples/Calc/Service/Rpc/AspVbsVb/Calc.asp доступен и требует сертификат? | ||||
| ||||
Да из браузера я соединяюсь легко как по https://pas/MSSoapSamples/Calc/Service/Rpc/AspVbsVb/calc.asp так и по https://pas/MSSoapSamples/Calc/Service/Rpc/AspVbsVb/Calc.wsdl | ||||
| ||||
И что отображает IE, когда открываете CALC.ASP Это? <?xml version="1.0" encoding="UTF-8" standalone="no" ?> - <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> - <SOAP-ENV:Body> - <SOAP-ENV:Fault> <faultcode>SOAP-ENV:Server</faultcode> <faultstring>Connector - Bad request to the server.</faultstring> - <detail> - <mserror:errorInfo xmlns:mserror="http://schemas.microsoft.com/soap-toolkit/faultdetail/error/"> <mserror:returnCode>-2146823238</mserror:returnCode> - <mserror:callStack> - <mserror:callElement> <mserror:description><HRESULT>800a13ba</HRESULT></mserror:description> </mserror:callElement> </mserror:callStack> </mserror:errorInfo> </detail> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope> | ||||
| ||||
IE выводит: <?xml version="1.0" encoding="UTF-8" standalone="no" ?> - <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> - <SOAP-ENV:Body> - <SOAP-ENV:Fault> <faultcode>SOAP-ENV:Server</faultcode> <faultstring>Connector - Bad request to the server.</faultstring> - <detail> - <mserror:errorInfo xmlns:mserror="http://schemas.microsoft.com/soap-toolkit/faultdetail/error/"> <mserror:returnCode>-2146823238</mserror:returnCode> - <mserror:callStack> - <mserror:callElement> <mserror:description><HRESULT>800a13ba</HRESULT></mserror:description> </mserror:callElement> </mserror:callStack> </mserror:errorInfo> </detail> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope> | ||||
| ||||
Тогда обратите внимание. 1. Если вы на сервере на CALC.ASP поставили "require client certificate" не забудьтьте в calc.wsdl исправить вызов на https <soap:address location=’https:// Клиентский скрипт: Option Explicit Const WSDL_URL = "https://kure/mssoapsampleserver/Samples/Calc/Service/Rpc/AspVbsVb/Calc.wsdl" Const My_Cert = "SSL" WScript.echo "Connecting: " & WSDL_URL Dim Calc Set Calc = CreateObject("MSSOAP.SoapClient") Calc.mssoapinit WSDL_URL Calc.ConnectorProperty("SSLClientCertificateName") = My_Cert Dim Answer Answer = Calc.add(14,28) WScript.Echo "14+28=" & Answer Answer = Calc.subtract(73,31) WScript.Echo "73-31=" & Answer Answer = Calc.multiply(14,3) WScript.Echo "14* 3=" & Answer Answer = Calc.divide(126,3) WScript.Echo "126/3=" & Answer | ||||
| ||||
В wsdl-файле исправленно значение http: <service name=’Calc’ > <port name=’CalcSoapPort’ binding=’wsdlns:CalcSoapBinding’ > <soap:address location=’https://pas/MSSoapSamples/Calc/Service/Rpc/AspVbsVb/Calc.asp’ /> </port> </service> Но все равно не работает! p.s. Даже с Вашем клиентом | ||||
| ||||
Значит что то совсем простое. Какие настройки SSL стоят на calc.asp (или на всю директорию?) | ||||
| ||||
В наcтройках безопасности у IIS сервера стоит только: 1. Анонимный доступ 2. Требование безопасного канала 3. Требование сертификатов клиентов Если что-то было не так с правами доступа, то и не работало бы и в случае с установкой IIS-опции Игнорирование (или принятие) сертификатов клиентов, а у меня с этими опциями все работает из моего VB-клиента. Скорее проблема с сертификатами, может не так установлены? По рекомендации Microsoft, корневой сертификат CA установлен в Доверенный корневые центры->Локальный компьютер, а пользовательские: первый установлен в хранилище по умолчанию (который можно использовать в IE), а второй VB-программой ту да же где находится сертификат IIS-сервера, но ни тот (Calc.ConnectorProperty("SSLClientCertificateName") = "my_cert") ни другой (Calc.ConnectorProperty("SSLClientCertificateName") = "LOCAL_MACHINE\My\vb") ни дают доступа! | ||||
| ||||
У вас стоит "требовать клиентский сертификат". Вы сказали, что через IE с CALC.ASP доступен. Если он доступен, то IE просит выбрать сертификат для аутентификации (при условии, что их больше одного). Этот сертификат должнен иметь дополнение "аутентификация на сервере". Если его нет, у вас двусторонней аутентификации не будет. Уберите "требовать клиентский сертификат" и попробуйте с односторонней аутентификацией. | ||||
| ||||
У меня 2 клиентских сертификата один в персональном хранилище, которое видит IE и берет из него сертификат web_form, другой (vb) в том же хранилище, что и сертификат IIS, соответственно IE его не видит. При установлении IIS опции - запрос сертификата, в IE все нормально работает (IE не запрашивает выбрать сертификат, т.к. второго он не видит), но VB-клиент выдает ошибку, при использовании любого из сертификатов и при Calc.ConnectorProperty("SSLClientCertificateName") = "LOCAL_MACHINE\My\vb" и при Calc.ConnectorProperty("SSLClientCertificateName") = “web_form” При установлении опции принимать или игнорировать сертификат, VB-клиент так же начинает работать! | ||||
| ||||
Тогда не знаю. Это нужно видеть живьем. | ||||
| ||||
А почему в разделе реестра нет ключей серификата, который использует IE, нде он хранится? | ||||
| ||||
А почему в разделе реестра нет ключей и серификата, который использует IE, где он хранится? | ||||
| ||||
Можно ди связаться с Вами по телефону? | ||||
| ||||
Можно. Лучше в понедельник | ||||
| ||||
Давайте вернемся к проблеме с клиентскими сертификатами | ||||
| ||||
В одном из высказываний: ’Этот сертификат должнен иметь дополнение "аутентификация на сервере" ’ - что это означает и как этого добиться (т.е. внести в сертификат указанное дополнение или назначить его при запросе на сертификат)? | ||||
| ||||
Если пользуетесь стандартным центром микрософт, то при формировании запроса выбререте "сертификат проверки подлинности клиента". 1.3.6.1.5.5.7.3.2 id-pkix OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) } | ||||