powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Could not establish secure channel for SSL/TLS with authority
4 сообщений из 4, страница 1 из 1
Could not establish secure channel for SSL/TLS with authority
    #37387279
MIKakaHunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется проблема - Could not establish secure channel for SSL/TLS with authority
Что есть:
C – клиентская программа, C#, WindowsForms
WS1 – вебсервис1 на сервере1(IIS 6.0, Server 2003) C#,WCF
WS2 – вебсервис2 на сервере2(IIS 6.0, Server 2003) C#,WCF
S1 – сертификат1
S2 – сертификат2
Оба сертификата выданы одним сертификационным центром.


Конфигурация №1
Клиентская программа C обращается к вебсервису WS1 с помощью сертификата S1. Все замечательно работает. Запросы проходят, ответы получаются, ошибок нет.

Конфигурация№2
Клиентская программа C обращается к вебсервису WS2 с помощью сертификата S2. Все замечательно работает. Запросы проходят, ответы получаются, ошибок нет.

Конфигурация№3
Вебсервис WS1 обращается к вебсервису WS2 с помощью сертификата S2. Получаю ошибку «Could not establish secure channel for SSL/TLS with authority…»
...
Рейтинг: 0 / 0
Could not establish secure channel for SSL/TLS with authority
    #37391961
MIKakaHunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неужели нельзя из одного веб-сервиса к другому подключаться с аутентификацией по сертификату?
...
Рейтинг: 0 / 0
Could not establish secure channel for SSL/TLS with authority
    #37447371
MIKakaHunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Проблема все еще не решена.
Выкладываю Web.config-и веб-сервисов, может быть это поможет решить проблему.
Конфиги на сервисах идентичные, может быть в этом и проблема?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
<?xml version="1.0"?>
<configuration>
	<connectionStrings>
		<add name="SqlServerName_impersonate" connectionString="data source=TestServer;Integrated Security=false;Database=base1;User ID=id1;password=password1" providerName="System.Data.SqlClient"/>		
	</connectionStrings>
	<system.web>
		<compilation debug="true" targetFramework="4.0" />
		<customErrors mode="Off" />
	</system.web>
	<system.serviceModel>
		<protocolMapping>
			<add scheme="https" binding="wsHttpBinding" />
		</protocolMapping>
		<bindings>
			<wsHttpBinding>
				<!-- configure wsHttp binding with Transport security mode and clientCredentialType as Certificate -->
				<binding>
					<security mode="Transport">
						<transport clientCredentialType="Certificate" />						
					</security>
				</binding>
			</wsHttpBinding>
		</bindings>
		<behaviors>
			<serviceBehaviors>
				<behavior>
					<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->					
					<!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
					<serviceMetadata httpsGetEnabled="true" httpGetEnabled="false"/>
					<serviceDebug includeExceptionDetailInFaults="true"/>
				</behavior>
			</serviceBehaviors>
		</behaviors>
		<!-- включена совместимость aspNetCompatibilityEnabled для asp.net, возможности сессий кэша и.т.д.   -->
		<serviceHostingEnvironment multipleSiteBindingsEnabled="false" aspNetCompatibilityEnabled="true"/>
	</system.serviceModel>
	<system.webServer>
		<modules runAllManagedModulesForAllRequests="true"/>
	</system.webServer>
</configuration>

код вызова метода веб-сервиса:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                // экземпляр службы
                ServiceReference1.PayServiceClient WS = new ServiceReference1.PayServiceClient();
                string urlWebService = "https://wwwserver:555/service.svc";
                WS.Endpoint.Address = new System.ServiceModel.EndpointAddress(urlWebService);
                X509Certificate2 cert = GetClientCertificate();
                WS.ClientCredentials.ClientCertificate.Certificate = cert;
                string req = "строка запроса";
                string str = WS.CheckAccount(req); // здесь получаю исключение.
                MessageBox.Show(str);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }

 
        /*
         *  Получение сертификата для доступа к веб-сервису. 
         *  Возвращает сертификат либо null
         *  В случае ошибки генерирется исключение и передается выше
        */
        private X509Certificate2 GetClientCertificate()
        {
            X509Certificate2 cert = null;
            try
            {
                string certName = "Certificate1"; // указано имя сертификата;
                X509Store store = new X509Store(StoreLocation.CurrentUser);
                store.Open(OpenFlags.ReadOnly);
                X509Certificate2Collection certCollection = store.Certificates.Find(X509FindType.FindBySubjectName, certName, true);
                if (certCollection.Count > 0)
                {
                    cert = certCollection[0];
                    string serialN = cert.GetSerialNumberString();
                    store.Close();
                }
            }
            catch (Exception ex)
            {
                throw new Exception("GetClientCertificate: " + ex.Message);
            }
            return cert;
        }
Код метода в веб-сервисе не привожу, т.к. считаю, что в нем ошибки нет, т.к. он отрабатывает на простом (не веб-сервисе) клиентском приложении.
Пишу, в надежде, что кто-нибудь направит на путь истинный.
...
Рейтинг: 0 / 0
Could not establish secure channel for SSL/TLS with authority
    #37662293
MIKakaHunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, всем!
Проблема решена.
Дело было в правах доступа к закрытому ключу клиентского сертификата на первом веб-сервисе (WS1).
Выдали права на чтение ключа по этому пути:
C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys
для пользователя NetworkService.
Надеюсь информация будет полезна тем у кого возникают подобные проблемы.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Could not establish secure channel for SSL/TLS with authority
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]