logo
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline sadgb  
#1 Оставлено : 4 декабря 2014 г. 13:03:49(UTC)
sadgb

Статус: Активный участник

Группы: Участники
Зарегистрирован: 19.11.2010(UTC)
Сообщений: 52
Откуда: Спб

Сказал(а) «Спасибо»: 4 раз
Здраввствуйте. Столкнулся со следующими проблемами.

Развернут ЦР Криптопро, и сервер на IIS
Сервер на IIS обладает сертификатом подтверждающим его права на выпуск и регистрацию пользователей.

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

Цитата:
System.ServiceModel.Security.SecurityNegotiationException: Не удалось установить безопасный канал для SSL/TLS с полномочиями "cp-pek-cr".
---> System.Net.WebException: Запрос был прерван: Не удалось создать защищенный канал SSL/TLS. в System.Net.HttpWebRequest.GetResponse()
в System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)


Все запросы делаются в 1 поток, закрыты lock. Пробовал сделать синглтон SOAP клиента эффект тот же.

Пробовал сделать в Global.asax:

Код:
            //Trust all certificates
            ServicePointManager.ServerCertificateValidationCallback =
                ((sender, certificate, chain, sslPolicyErrors) => true);

            // trust sender
            ServicePointManager.ServerCertificateValidationCallback
                            = ((sender, cert, chain, errors) => true);

            // validate cert by calling a function
            ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => true;
            ServicePointManager.Expect100Continue = true;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

но не помогло.

Меня смущает больше всего тот факт, что он несколько ( минимум 1 ) раз работает, а потом сразу эта ошибка.

Привожу свой код:
Код:
 
 
            lock (RaWorkerLock)
            {
                using (var client = CreateCertRequestClient())
                {
                    try
                    {
                        var requestId = client.SubmitRequest(requestStr, "Автоматический запрос");
                        client.AcceptRequest(requestId, SignString(requestStr));

                        var certInfoXml = client.GetCertificateInfo(requestId);
                        var certificateUpdate = GetCertificateFromCertificateInfo(certInfoXml);

                        client.ConfirmRequest(requestId);
                        return certificateUpdate;
                    }
                    catch (Exception e)
                    {
                        throw new RaApiCallFailureException(e);
                    }
                }
            }
            
 
 public RaService.CertRequestSoapPortClient CreateCertRequestClient()
        {
            try
            {
                // Create the binding.
                var myBinding = new BasicHttpBinding
                {
                    Security =
                    {
                        Mode = BasicHttpSecurityMode.Transport,
                        Transport = { ClientCredentialType = HttpClientCredentialType.Certificate }
                    }
                };

                var ea = new
                   EndpointAddress(RaUrl);
                   
                var client = new RaService.CertRequestSoapPortClient(myBinding, ea);

                client.ClientCredentials.ClientCertificate.Certificate = ClientCertificate;

                return client;
            }
            catch (Exception e)
            {
                throw new RaApiCallFailureException(e);
            }
        }
Offline Максим Коллегин  
#2 Оставлено : 4 декабря 2014 г. 18:24:48(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 5,214
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 11 раз
Поблагодарили: 469 раз в 428 постах
Какие версии КриптоПро CSP и .NET?
Знания в базе знаний, поддержка в техподдержке
Offline sadgb  
#3 Оставлено : 5 декабря 2014 г. 9:25:48(UTC)
sadgb

Статус: Активный участник

Группы: Участники
Зарегистрирован: 19.11.2010(UTC)
Сообщений: 52
Откуда: Спб

Сказал(а) «Спасибо»: 4 раз
CSP 3.6.7491 KC2

.net 1.0.5210.0
Offline Максим Коллегин  
#4 Оставлено : 5 декабря 2014 г. 10:27:25(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 5,214
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 11 раз
Поблагодарили: 469 раз в 428 постах
Для начала, установите последние: 3.6.7777 и 1.0.5425.0
Знания в базе знаний, поддержка в техподдержке
Offline sadgb  
#5 Оставлено : 5 декабря 2014 г. 22:05:53(UTC)
sadgb

Статус: Активный участник

Группы: Участники
Зарегистрирован: 19.11.2010(UTC)
Сообщений: 52
Откуда: Спб

Сказал(а) «Спасибо»: 4 раз
Автор: maxdm Перейти к цитате
Для начала, установите последние: 3.6.7777 и 1.0.5425.0


не помогло. Что дальше ?
Offline sadgb  
#6 Оставлено : 10 декабря 2014 г. 8:12:55(UTC)
sadgb

Статус: Активный участник

Группы: Участники
Зарегистрирован: 19.11.2010(UTC)
Сообщений: 52
Откуда: Спб

Сказал(а) «Спасибо»: 4 раз
up
Offline Максим Коллегин  
#7 Оставлено : 10 декабря 2014 г. 9:20:30(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 5,214
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 11 раз
Поблагодарили: 469 раз в 428 постах
Нет идей. Сможете предоставить пример для воспроизведения?
Знания в базе знаний, поддержка в техподдержке
Offline sadgb  
#8 Оставлено : 11 декабря 2014 г. 5:18:08(UTC)
sadgb

Статус: Активный участник

Группы: Участники
Зарегистрирован: 19.11.2010(UTC)
Сообщений: 52
Откуда: Спб

Сказал(а) «Спасибо»: 4 раз
Автор: maxdm Перейти к цитате
Нет идей. Сможете предоставить пример для воспроизведения?


В целом суть такая - если мы создали CertRequestSoapPortClient однажды, то как бы мы не пытались его очистить, при создании и использовании следющих начинается эта ошибка.
Если не очищать или использовать using (var client = CreateCertRequestClient()) то падает на 2-3, если замутить очистку пожестче (см ниже ) то порой удается прожить 5-7 созданий закрытий, но все равно валится.

Код:
var clientProxy = CreateCertRequestClient();

try
{
   .. use your service
   clientProxy.Close();
}
catch(FaultException)
{
   clientProxy.Abort();
}
catch(CommunicationException)
{
   clientProxy.Abort();
}
catch (TimeoutException)
{ 
   clientProxy.Abort();
}



Для воссоздания ситуации понадобятся следующие условия.
Развернутый УЦ / ЦР
Вторая машина с CS{ 3.6.7777 и .net 1.0.5425.0 с установленным сертификатом и закрытым ключом пользователя ЦР.

Прикладываю свой референс на сервис ( RaService ) и класс, работающий с референсом ( RaWorker )

После чего в коде

Код:
var requests = new List<String> { /* сюда вставить 10 самоподписанных запросов на сертификат */ };
foreach ( var request in requests )
{
   var clientCertificate = /* получить клиентский сертификат. У меня он получается каждый раз заново, вам тоже рекомендую, ибо http://www.cryptopro.ru/forum2/default.aspx?g=posts&t=6337 */
   
   var raWorker = new RaWorker( "https://ra-sa/ra/ra.asp", clientCertificate);
   return raWorker.CreateUserAndGetCertificate(request);
}


Для чистоты эксперимента у меня Windows Server 2008 все крутится на .net 4 в рамках Asp.Net MVc в IIS


Код:
using System;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Security.Cryptography.Pkcs;
using System.Security.Cryptography.X509Certificates;
using System.ServiceModel;
using System.Xml.Linq;
using ExceptionsLibrary;

namespace CryptoLibrary.CertificateEnrollment
{
    class RaWorker
    {
        public string RaUrl { get; set; }
        public X509Certificate2 ClientCertificate { get; set; }

        public RaWorker( String raUrl, X509Certificate2 clientCertificate )
        {
            RaUrl = raUrl;
            ClientCertificate = clientCertificate;
        }

        // подписывает содержимое base64 строки и возвращает base64 строку
        public String SignString(String str)
        {
            var encode = SignHelper.SignMsg(Convert.FromBase64String(str), ClientCertificate, detached:false);
            return Convert.ToBase64String(encode);
        }

        public String ResignString(String str)
        {
            var buf = SignHelper.VerifyBuffer(Convert.FromBase64String(str)).Content.Content;
            return SignString(Convert.ToBase64String(buf));
        }

        public X509Certificate2 GetCertificateFromCertificateInfo(String certInfoXml)
        {
            var doc = XDocument.Parse(certInfoXml);
            XNamespace rs = "urn:schemas-microsoft-com:rowset";
            XNamespace z = "#RowsetSchema";
            var certBodyBase64 = doc.Descendants(rs + "data").Elements(z + "row").First().Attribute("PKCS").Value;
            return new X509Certificate2(Convert.FromBase64String(certBodyBase64));
        }


        public X509Certificate2 SubmitAcceptConfirmCertRequest(String requestStr)
        {
            var client = CreateCertRequestClient();

            try
            {
                var requestId = client.SubmitRequest(requestStr, "Автоматический запрос");
                client.AcceptRequest(requestId, SignString(requestStr));

                var certInfoXml = client.GetCertificateInfo(requestId);
                var certificateUpdate = GetCertificateFromCertificateInfo(certInfoXml);
              
                client.ConfirmRequest(requestId);
                return certificateUpdate;
            }
            catch (Exception e)
            {
                throw new RaApiCallFailureException(e);
            }

        }

        public X509Certificate2 SubmitAcceptConfirmFirstCertRequest(String regRequestId, String requestStr)
        {
            var client = CreateCertRequestClient();

            try
            {
                bool unused = true;
                string additionalInfo = null;
                var requestId = client.SubmitFirstCertRequest(regRequestId, requestStr, ref unused, ref additionalInfo);
                client.AcceptFirstRequest(requestId, SignString(requestStr));

                var certInfoXml = client.GetCertificateInfo(requestId);
                var certificateUpdate = GetCertificateFromCertificateInfo(certInfoXml);

                client.ConfirmRequest(requestId);
                return certificateUpdate;
            }
            catch (Exception e)
            {
                throw new RaApiCallFailureException(e);
            }

        }

        public RaService.CertRequestSoapPortClient CreateCertRequestClient()
        {
            try
            {
                // Create the binding.
                var myBinding = new BasicHttpBinding
                {
                    Security =
                    {
                        Mode = BasicHttpSecurityMode.Transport,
                        Transport = { ClientCredentialType = HttpClientCredentialType.Certificate }
                    }
                };


                // Create the endpoint address. Note that the machine name 
                // must match the subject or DNS field of the X.509 certificate
                // used to authenticate the service. 
                var ea = new
                   EndpointAddress(RaUrl);


                var client = new RaService.CertRequestSoapPortClient(myBinding, ea);

                Debug.Assert(client.ClientCredentials != null, "client.ClientCredentials != null");

                client.ClientCredentials.ClientCertificate.Certificate = ClientCertificate;

                return client;
            }
            catch (Exception e)
            {
                throw new RaApiCallFailureException(e);
            }
        }

        public X509Certificate2 CreateUserAndGetCertificate(string selfSignedCertRequestBase64)
        {
            using (var registrationClient = CreateRegistrationClient())
            {
                try
                {
                    var requestId = registrationClient.CreateRequestByAdmin(selfSignedCertRequestBase64, "1", "2",
                        "Автоматическая регистрация");
                    try
                    {
                        registrationClient.AcceptRequest(requestId);
                    }
                    catch (Exception)
                    {
                    }

                    return SubmitAcceptConfirmFirstCertRequest(requestId, selfSignedCertRequestBase64);

                }
                catch (Exception e)
                {
                    throw new RaApiCallFailureException(e);
                }
            }
        }


        public RaService.RegistrationSoapPortClient CreateRegistrationClient()
        {
            try
            {
                // Create the binding.
                var myBinding = new BasicHttpBinding
                {
                    Security =
                    {
                        Mode = BasicHttpSecurityMode.Transport,
                        Transport = { ClientCredentialType = HttpClientCredentialType.Certificate }
                    }
                };


                // Create the endpoint address. Note that the machine name 
                // must match the subject or DNS field of the X.509 certificate
                // used to authenticate the service. 
                var ea = new
                   EndpointAddress(RaUrl);


                var client = new RaService.RegistrationSoapPortClient(myBinding, ea);

                Debug.Assert(client.ClientCredentials != null, "client.ClientCredentials != null");

                client.ClientCredentials.ClientCertificate.Certificate = ClientCertificate;

                return client;
            }
            catch (Exception e)
            {
                throw new RaApiCallFailureException(e);
            }
        }

    }
}

Отредактировано пользователем 11 декабря 2014 г. 5:19:58(UTC)  | Причина: Не указана

Вложение(я):
Service References.zip (21kb) загружен 2 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline sadgb  
#9 Оставлено : 11 декабря 2014 г. 7:32:09(UTC)
sadgb

Статус: Активный участник

Группы: Участники
Зарегистрирован: 19.11.2010(UTC)
Сообщений: 52
Откуда: Спб

Сказал(а) «Спасибо»: 4 раз
Еще в журнале windows заметил следующую ошибку КриптоПРО TLS ошибка 0x57 параметр задан неверно. Источник cpsspap
Появляется 2 ошибки при каждом воспроизведении ошибки описанной в данном треде
Offline sadgb  
#10 Оставлено : 11 декабря 2014 г. 8:18:58(UTC)
sadgb

Статус: Активный участник

Группы: Участники
Зарегистрирован: 19.11.2010(UTC)
Сообщений: 52
Откуда: Спб

Сказал(а) «Спасибо»: 4 раз
Причем в системном журнале пишет подтверждение
Подтверждение SSL успешно выполнено
Далее приведены согласованные параметры шифрование

ПРотокол TLS 1.0
Набор шифров 0х2f
Стойкость обмена 1024
Offline Максим Коллегин  
#11 Оставлено : 11 декабря 2014 г. 10:34:46(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 5,214
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 11 раз
Поблагодарили: 469 раз в 428 постах
Ошибки в логе на клиенте или сервере? Контекст сертификат, используемый для установления ssl-соединения не стоит использовать в других сценариях - MS любит неожиданно закрывать открытый криптопровайдер.
Знания в базе знаний, поддержка в техподдержке
Offline sadgb  
#12 Оставлено : 11 декабря 2014 г. 12:11:46(UTC)
sadgb

Статус: Активный участник

Группы: Участники
Зарегистрирован: 19.11.2010(UTC)
Сообщений: 52
Откуда: Спб

Сказал(а) «Спасибо»: 4 раз
Ошибки на клиенте, на сервере везде тишина.

Вот наиболее стабильная на данный момент версия, но спустя 12 часов тоже выкинула такую ошибку и заглохла.
Тут клиент живет только пока мы его используем. Плюс обратите внимание на IgnoreAllErrors метод в котором ставятся параметры ServicePointManager

Код:
using System;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Net.Security;
using System.Runtime.InteropServices;
using System.Security.Cryptography.Pkcs;
using System.Security.Cryptography.X509Certificates;
using System.ServiceModel;
using System.Xml.Linq;
using ExceptionsLibrary;
using Log;

namespace CryptoLibrary.CertificateEnrollment
{
    class RaWorker
    {

        // only one service Soap client may exist at a time
        private static readonly object RaWorkerLock = new object();
        public string RaUrl { get; set; }
        public X509Certificate2 ClientCertificate { get; set; }

        public RaWorker(String raUrl, X509Certificate2 clientCertificate)
        {
            RaUrl = raUrl;
            ClientCertificate = clientCertificate;
        }

        // подписывает содержимое base64 строки и возвращает base64 строку
        public String SignString(String str)
        {
            var encode = SignHelper.SignMsg(Convert.FromBase64String(str), ClientCertificate, detached: false);
            return Convert.ToBase64String(encode);
        }

        public String ResignString(String str)
        {
            var buf = SignHelper.VerifyBuffer(Convert.FromBase64String(str)).Content.Content;
            return SignString(Convert.ToBase64String(buf));
        }

        public X509Certificate2 GetCertificateFromCertificateInfo(String certInfoXml)
        {
            var doc = XDocument.Parse(certInfoXml);
            XNamespace rs = "urn:schemas-microsoft-com:rowset";
            XNamespace z = "#RowsetSchema";
            var certBodyBase64 = doc.Descendants(rs + "data").Elements(z + "row").First().Attribute("PKCS").Value;
            return new X509Certificate2(Convert.FromBase64String(certBodyBase64));
        }


        public X509Certificate2 SubmitAcceptConfirmCertRequest(String requestStr)
        {
            lock (RaWorkerLock)
            {
                using (var client = CreateCertRequestClient())
                {
                    try
                    {
                        var requestId = client.SubmitRequest(requestStr,
                            "Автоматический запрос от сервера Аутентификации");
                        client.AcceptRequest(requestId, SignString(requestStr));

                        var certInfoXml = client.GetCertificateInfo(requestId);
                        var certificateUpdate = GetCertificateFromCertificateInfo(certInfoXml);

                        client.ConfirmRequest(requestId);
                        return certificateUpdate;
                    }
                    catch (Exception e)
                    {
                        throw new RaApiCallFailureException(e);
                    }
                }
            }
        }

        public X509Certificate2 SubmitAcceptConfirmFirstCertRequest(String regRequestId, String requestStr)
        {
            lock (RaWorkerLock)
            {
                using (var client = CreateCertRequestClient())
                {

                    try
                    {
                        bool unused = true;
                        string additionalInfo = null;
                        var requestId = client.SubmitFirstCertRequest(regRequestId, requestStr, ref unused,
                            ref additionalInfo);
                        client.AcceptFirstRequest(requestId, SignString(requestStr));

                        var certInfoXml = client.GetCertificateInfo(requestId);
                        var certificateUpdate = GetCertificateFromCertificateInfo(certInfoXml);

                        client.ConfirmRequest(requestId);
                        return certificateUpdate;
                    }
                    catch (Exception e)
                    {
                        throw new RaApiCallFailureException(e);
                    }
                }
            }
        }

        public RaService.CertRequestSoapPortClient CreateCertRequestClient()
        {
            IgnoreAllCertificateErrors();
            try
            {
                // Create the binding.
                var myBinding = new BasicHttpBinding
                {
                    Security =
                    {
                        Mode = BasicHttpSecurityMode.Transport,
                        Transport = { ClientCredentialType = HttpClientCredentialType.Certificate }
                    }
                };


                // Create the endpoint address. Note that the machine name 
                // must match the subject or DNS field of the X.509 certificate
                // used to authenticate the service. 
                var ea = new
                   EndpointAddress(RaUrl);


                var client = new RaService.CertRequestSoapPortClient(myBinding, ea);

                Debug.Assert(client.ClientCredentials != null, "client.ClientCredentials != null");

                client.ClientCredentials.ClientCertificate.Certificate = ClientCertificate;

                return client;
            }
            catch (Exception e)
            {
                throw new RaApiCallFailureException(e);
            }
        }
        private static bool _first = true;
        private static void IgnoreAllCertificateErrors()
        {
            try
            {
                if (!_first)
                    return;
                _first = false;

                LogHelper.Log("Ignore certificate errors");

                //Trust all certificates
                ServicePointManager.ServerCertificateValidationCallback =
                    ((sender, certificate, chain, sslPolicyErrors) => true);

                // trust sender
                ServicePointManager.ServerCertificateValidationCallback
                                = ((sender, cert, chain, errors) => true);

                // validate cert by calling a function
                ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => true;
                ServicePointManager.Expect100Continue = true;
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
                ServicePointManager.CheckCertificateRevocationList = false;
                ServicePointManager.DefaultConnectionLimit = 1000;
                ServicePointManager.MaxServicePointIdleTime = Int32.MaxValue;
                    

            }
            catch (Exception e)
            {
                LogHelper.Log("error ignoring " + e.Message);
            }
        }


        public X509Certificate2 CreateUserAndGetCertificate(string selfSignedCertRequestBase64)
        {
            lock (RaWorkerLock)
            {
                using (var registrationClient = CreateRegistrationClient())
                {
                    try
                    {
                        var requestId = registrationClient.CreateRequestByAdmin(selfSignedCertRequestBase64, "1", "2",
                            "Автоматическая регистрация пользователя ПЭК");
                        try
                        {
                            registrationClient.AcceptRequest(requestId);
                        }
                        catch (Exception)
                        {
                        }

                        return SubmitAcceptConfirmFirstCertRequest(requestId, selfSignedCertRequestBase64);

                    }
                    catch (Exception e)
                    {
                        throw new RaApiCallFailureException(e);
                    }
                }
            }
        }


        public RaService.RegistrationSoapPortClient CreateRegistrationClient()
        {
            IgnoreAllCertificateErrors();
            try
            {
                // Create the binding.
                var myBinding = new BasicHttpBinding
                {
                    Security =
                    {
                        Mode = BasicHttpSecurityMode.Transport,
                        Transport = { ClientCredentialType = HttpClientCredentialType.Certificate }
                    }
                };


                // Create the endpoint address. Note that the machine name 
                // must match the subject or DNS field of the X.509 certificate
                // used to authenticate the service. 
                var ea = new
                   EndpointAddress(RaUrl);


                var client = new RaService.RegistrationSoapPortClient(myBinding, ea);

                Debug.Assert(client.ClientCredentials != null, "client.ClientCredentials != null");

                client.ClientCredentials.ClientCertificate.Certificate = ClientCertificate;

                return client;
            }
            catch (Exception e)
            {
                throw new RaApiCallFailureException(e);
            }
        }

    }
}

Отредактировано пользователем 11 декабря 2014 г. 12:12:51(UTC)  | Причина: Не указана

Offline sadgb  
#13 Оставлено : 11 декабря 2014 г. 12:13:27(UTC)
sadgb

Статус: Активный участник

Группы: Участники
Зарегистрирован: 19.11.2010(UTC)
Сообщений: 52
Откуда: Спб

Сказал(а) «Спасибо»: 4 раз
Автор: maxdm Перейти к цитате
Ошибки в логе на клиенте или сервере? Контекст сертификат, используемый для установления ssl-соединения не стоит использовать в других сценариях - MS любит неожиданно закрывать открытый криптопровайдер.


поясните про контекст чуть более подробно, мне кажется я не до конца понимаю
Offline Максим Коллегин  
#14 Оставлено : 11 декабря 2014 г. 12:20:38(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 5,214
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 11 раз
Поблагодарили: 469 раз в 428 постах
PCERT_CONTEXT - структура Windows для хранения сертификата и связанных объектов.
Потому и спрашиваю, используется ли конекст из свойства ssl-соеднинения, потому что код опущен:
Код:
 public RaWorker(String raUrl, X509Certificate2 clientCertificate)
        {
            RaUrl = raUrl;
            ClientCertificate = clientCertificate;
        }
 
        // подписывает содержимое base64 строки и возвращает base64 строку
        public String SignString(String str)
        {
            var encode = SignHelper.SignMsg(Convert.FromBase64String(str), ClientCertificate, detached: false);
            return Convert.ToBase64String(encode);
        }

И что в SignHelper?
Знания в базе знаний, поддержка в техподдержке
thanks 1 пользователь поблагодарил Максим Коллегин за этот пост.
sadgb оставлено 11.12.2014(UTC)
Offline sadgb  
#15 Оставлено : 11 декабря 2014 г. 13:12:25(UTC)
sadgb

Статус: Активный участник

Группы: Участники
Зарегистрирован: 19.11.2010(UTC)
Сообщений: 52
Откуда: Спб

Сказал(а) «Спасибо»: 4 раз
Автор: maxdm Перейти к цитате
PCERT_CONTEXT - структура Windows для хранения сертификата и связанных объектов.
Потому и спрашиваю, используется ли конекст из свойства ssl-соеднинения, потому что код опущен:
Код:
 public RaWorker(String raUrl, X509Certificate2 clientCertificate)
        {
            RaUrl = raUrl;
            ClientCertificate = clientCertificate;
        }
 
        // подписывает содержимое base64 строки и возвращает base64 строку
        public String SignString(String str)
        {
            var encode = SignHelper.SignMsg(Convert.FromBase64String(str), ClientCertificate, detached: false);
            return Convert.ToBase64String(encode);
        }

И что в SignHelper?


Понял куда вы клоните там действительно сертификат повторно используется еще и для подписи.
Код:
// Определяем подписывающего, объектом CmsSigner.
var cmsSigner = new CmsSigner(signerCert);


А есть идеи почему так печально становится с сервером что его аж перезапускать приходится ?

Потому что хочется быть максимально уверенным в том что именно это причина так как каждый деплой на счету

Отредактировано пользователем 11 декабря 2014 г. 13:13:26(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#16 Оставлено : 11 декабря 2014 г. 14:17:44(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 5,214
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 11 раз
Поблагодарили: 469 раз в 428 постах
Это точно странно. Т.е после первой ошибки даже нельзя соединиться с другого клиента (другой машины)?
Знания в базе знаний, поддержка в техподдержке
Offline sadgb  
#17 Оставлено : 11 декабря 2014 г. 15:50:09(UTC)
sadgb

Статус: Активный участник

Группы: Участники
Зарегистрирован: 19.11.2010(UTC)
Сообщений: 52
Откуда: Спб

Сказал(а) «Спасибо»: 4 раз
Автор: maxdm Перейти к цитате
Это точно странно. Т.е после первой ошибки даже нельзя соединиться с другого клиента (другой машины)?


я сервером называю свой сервер Asp.net mvc из которого идут запросы, а не УЦ/ЦР.
С других клиентов к УЦ отправлять можно. С этого нельзя.
Offline Максим Коллегин  
#18 Оставлено : 11 декабря 2014 г. 17:20:11(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 5,214
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 11 раз
Поблагодарили: 469 раз в 428 постах
Идеи есть. подпись другим контекстом помогла?
Знания в базе знаний, поддержка в техподдержке
Offline sadgb  
#19 Оставлено : 12 декабря 2014 г. 7:59:35(UTC)
sadgb

Статус: Активный участник

Группы: Участники
Зарегистрирован: 19.11.2010(UTC)
Сообщений: 52
Откуда: Спб

Сказал(а) «Спасибо»: 4 раз
Это к сожалению так сразу не узнать, время между деплоем и результатом от 1 до 10 суток. Будем ждать. А можно все же идеи озвучить ? Ошибка плавающая, вдруг снова столкнемся, хоть будет понятно куда копать. Интересуют любые потенциальные догадки
Offline Максим Коллегин  
#20 Оставлено : 12 декабря 2014 г. 10:03:52(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 5,214
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 11 раз
Поблагодарили: 469 раз в 428 постах
Идея - криптопровайдер контекста сертификата schannel закрывается одной из функций подписи из Framework. Для того, чтобы поймать, мне нужен простой воспроизводимый пример или хороший удаленный доступ на проблемную машину (предпочтительнее).
Знания в базе знаний, поддержка в техподдержке
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.