Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

3 Страницы123>
Опции
К последнему сообщению К первому непрочитанному
Offline sadgb  
#1 Оставлено : 18 июня 2013 г. 16:27:21(UTC)
sadgb

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

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

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

У нас развернут ЦР крипто про по адресу https://RA-SA/RA/RA.asp ( адрес внутренний ).
Он принимает запросы, только если сертификат клиента принадлежит пользователю ЦР.
Я пытаюсь сделать запрос на новый сертификат к новому закрытому ключу ( при этом у меня есть старый сертификат к старому закрытому ключу), для этого я:

1. Добавил ссылку на сервис https://RA-SA/RA/RA.asp
2. В коде устанавливаю авторизацию по сертификату ( и выбираю нужный сертификат )
Код:

            var myBinding = new BasicHttpBinding();
            myBinding.Security.Mode = BasicHttpSecurityMode.Transport;
            myBinding.Security.Transport.ClientCredentialType =
               HttpClientCredentialType.Certificate;
            
            EndpointAddress ea = new EndpointAddress("https://RA-SA/RA/RA.asp");

            var client = new RaService.CertRequestSoapPortClient(myBinding, ea);
            client.ClientCredentials.ClientCertificate.Certificate = validCertificate;


3. Пытаюсь сделать запрос
var enrollmentString = enrollment.CreateRequest();
/* enrollmentString = "MIICOTCCAegCAQAwIjEgMB4GA1UEAwwXVXNlcl8xMzAxNjAzNTA5MDA0NjMxMTMw
YzAcBgYqhQMCAhMwEgYHKoUDAgIjAQYHKoUDAgIeAQNDAARASXtR+Ar8ZXvcg3AW
3bFk+i3hpZtZv1Tl12g13ti1PZ4bwyGnYF6H5aHaSCgEUo+Akn9+RZw4Yy2rUEzw
eeO1lqCCAVgwGgYKKwYBBAGCNw0CAzEMFgo2LjEuNzYwMS4yMEoGCSsGAQQBgjcV
FDE9MDsCAQUMC3NhZGdiLW1hY3BjDBFzYWRnYi1tYWNwY1xzYWRnYgwWV2ViRGV2
LldlYlNlcnZlcjQwLmV4ZTBcBgkqhkiG9w0BCQ4xTzBNMBwGA1UdJQQVMBMGCCsG
AQUFBwMCBgcqhQMCAiIGMA4GA1UdDwEB/wQEAwIE8DAdBgNVHQ4EFgQUq8MqSzMJ
Qwc/mFn0iD+W7edeEr4wgY8GCisGAQQBgjcNAgIxgYAwfgIBAh52AEMAcgB5AHAA
dABvAC0AUAByAG8AIABHAE8AUwBUACAAUgAgADMANAAuADEAMAAtADIAMAAwADEA
IABDAHIAeQBwAHQAbwBnAHIAYQBwAGgAaQBjACAAUwBlAHIAdgBpAGMAZQAgAFAA
cgBvAHYAaQBkAGUAcgMBADAIBgYqhQMCAgMDQQCxYu7yZbvSUVKEbioCLuUkN8DE
maAzcgF4ra8c+1CODpym4mF3bR1Ky3/z9OE6/KvSBoKCdSGi54B3v/pV9Qli" */

var x = client.SubmitRequest(enrollmentString , "");

4. Получаю FaultException: Встречено неверное значение тега ASN1.
Server StackTrace:

Server stack trace:
at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at CryptoLibrary.RaService.CertRequestSoapPort.SubmitRequest(SubmitRequestRequest1 request)
at CryptoLibrary.RaService.CertRequestSoapPortClient.CryptoLibrary.RaService.CertRequestSoapPort.SubmitRequest(SubmitRequestRequest1 request) in d:\work_projects\military_id\src\SA_Web_Server\CryptoLibrary\Service References\RaService\Reference.cs:line 2834
at CryptoLibrary.RaService.CertRequestSoapPortClient.SubmitRequest(String Request_p7, String UID) in d:\work_projects\military_id\src\SA_Web_Server\CryptoLibrary\Service References\RaService\Reference.cs:line 2841
at CryptoLibrary.CertificateEnrollment.CertificateEnroller.AutoEnrollCertificate(X509Certificate2 currentSaCertificate) in d:\work_projects\military_id\src\SA_Web_Server\CryptoLibrary\CertificateEnrollment\CertificateEnroller.cs:line 419


При этом строка запроса по идее правильная - я могу сохранить ее как файл .pb7 и на сервере ЦР в ручном режиме выдать сертификат по этому запросу.

Помогите пожалуйста понять в чем ошибка

Отредактировано пользователем 18 июня 2013 г. 16:48:33(UTC)  | Причина: Не указана

Offline sadgb  
#2 Оставлено : 18 июня 2013 г. 16:47:47(UTC)
sadgb

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

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

Сказал(а) «Спасибо»: 4 раз
C другой стороны меня смущает, что я нигде в запросе не указываю свой старый сертификат
Вот код генерации запроса

Код:
        
    private static CX509Enrollment CreateEnrollment(CX509PrivateKey privateKey, X509Certificate2 currentSaCertificate = null)
        {
            var request = CreateEnrollmentRequest(privateKey);

            // Объект, реализующий IX509Enrollment
            var enrollment = new CX509Enrollment();

            // Строка с запросом:
            enrollment.InitializeFromRequest(request);
            return enrollment;
        }

private static IX509CertificateRequestPkcs10 CreateEnrollmentRequest(CX509PrivateKey privateKey)
        {

            IX509CertificateRequestPkcs10 request = new CX509CertificateRequestPkcs10();
            // Инициализируем запрос по заданному закрытому ключу:

            request.InitializeFromPrivateKey(X509CertificateEnrollmentContext.ContextUser, privateKey, null);

            // Задаем DN.
            var distinguishedName = new CX500DistinguishedNameClass();

            var distinguishedNameString = "CN=User_" + DateTime.Now.ToFileTimeUtc(); // TODO

            distinguishedName.Encode(distinguishedNameString);
            request.Subject = distinguishedName;

            // Добавляем Extended Key Usage: Проверка подлинности клиента (1.3.6.1.5.5.7.3.2)
            var clientAuth = new CObjectId();
            clientAuth.InitializeFromName(CERTENROLL_OBJECTID.XCN_OID_PKIX_KP_CLIENT_AUTH);

            //  Пользователь Центра Регистрации, HTTP, TLS клиент (1.2.643.2.2.34.6)
            var tlsClient = new CObjectId();
            tlsClient.InitializeFromValue("1.2.643.2.2.34.6");

            var ekuIds = new CObjectIds { clientAuth, tlsClient };

            var ekuExtension = new CX509ExtensionEnhancedKeyUsage();
            ekuExtension.InitializeEncode(ekuIds);

            request.X509Extensions.Add((CX509Extension) ekuExtension);

            // Добавляем Key Usage: Digital Signature, Non-Repudiation, 
            // Key Encipherment, Data Encipherment (f0)
            var keyUsage = new CX509ExtensionKeyUsage();

            // ReSharper disable BitwiseOperatorOnEnumWithoutFlags
            keyUsage.InitializeEncode(
                CERTENROLLLib.X509KeyUsageFlags.XCN_CERT_DIGITAL_SIGNATURE_KEY_USAGE
                | CERTENROLLLib.X509KeyUsageFlags.XCN_CERT_NON_REPUDIATION_KEY_USAGE
                | CERTENROLLLib.X509KeyUsageFlags.XCN_CERT_KEY_ENCIPHERMENT_KEY_USAGE
                | CERTENROLLLib.X509KeyUsageFlags.XCN_CERT_DATA_ENCIPHERMENT_KEY_USAGE);
            request.X509Extensions.Add((CX509Extension) keyUsage);
            // ReSharper restore BitwiseOperatorOnEnumWithoutFlags

            // Кодируем запрос.
            request.Encode();

            return request;
        }
Offline Kirill Sobolev  
#3 Оставлено : 19 июня 2013 г. 9:50:23(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
Цитата:
Помогите пожалуйста понять в чем ошибка

Вы читали описание метода SubmitRequest в руководстве программиста?
Техническую поддержку оказываем тут
Наша база знаний
Offline sadgb  
#4 Оставлено : 19 июня 2013 г. 11:28:06(UTC)
sadgb

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

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

Сказал(а) «Спасибо»: 4 раз
Автор: Kirill Sobolev Перейти к цитате
Цитата:
Помогите пожалуйста понять в чем ошибка

Вы читали описание метода SubmitRequest в руководстве программиста?


Видимо я что-то упускаю, но даже перечитав не понял в чем ошибка

Метод SubmitRequest
Помещает подписанный запрос на обновление сертификата в очередь запросов на сертификат.
Offline Kirill Sobolev  
#5 Оставлено : 19 июня 2013 г. 11:42:32(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
А у Вас в том enrollmentString, что Вы выложили - самоподписанный запрос.
Типы запросов описаны в разделе 3.1.3.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Кирилл Соболев за этот пост.
sadgb оставлено 21.06.2013(UTC)
Offline sadgb  
#6 Оставлено : 19 июня 2013 г. 11:55:30(UTC)
sadgb

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

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

Сказал(а) «Спасибо»: 4 раз
Тогда, если я правильно понял, верно делать вот так после создания Enrollment ( определенные трудности вызывает то, что там все примеры на VB и с использованием CAPICOM )

ContentInfo contentInfo = new ContentInfo(Encoding.UTF8.GetBytes(enrollment.CreateRequest()));
SignedCms signedCms = new SignedCms(contentInfo, false);
CmsSigner cmsSigner = new CmsSigner(currentSaCertificate);
signedCms.ComputeSignature(cmsSigner, false);
var encode = signedCms.Encode();


var x = client.SubmitRequest(Encoding.UTF8.GetString(encode), "");

Но так я получаю ошибку Could not establish secure channel for SSL/TLS with authority 'ra-sa'.
Хотя ЦС, который выпустил сертификат сервера ( ra-sa ) находится в хранилище доверенные корневые центры сертификации
Вложение(я):
System.Net.trace.log (28kb) загружен 3 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline Kirill Sobolev  
#7 Оставлено : 19 июня 2013 г. 13:24:41(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
Цитата:
var x = client.SubmitRequest(Encoding.UTF8.GetString(encode), "");

В качестве параметра надо base64, т.е. System.ConvertToBase64String(encode).
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Кирилл Соболев за этот пост.
sadgb оставлено 21.06.2013(UTC)
Offline sadgb  
#8 Оставлено : 19 июня 2013 г. 13:39:13(UTC)
sadgb

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

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

Сказал(а) «Спасибо»: 4 раз
Спасибо, поменял, но к ЦР все равно не подключиться

Could not establish secure channel for SSL/TLS with authority 'ra-sa'.
В логе клиента есть строчки ( лог прикреплен к прошлому моему сообщению )
System.Net Error: 0 : [5020] Decrypt returned SEC_I_RENEGOTIATE.
System.Net Information: 0 : [5896] SecureChannel#53378030 - Certificate is of type X509Certificate2 and contains the private key.
System.Net Information: 0 : [5896] AcquireCredentialsHandle(package = Microsoft Unified Security Protocol Provider, intent = Outbound, scc = System.Net.SecureCredential)
System.Net Information: 0 : [5896] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = 5ba090:114f00b8, targetName = ra-sa, inFlags = ReplayDetect, SequenceDetect, Confidentiality, AllocateMemory, InitManualCredValidation)
System.Net Information: 0 : [5896] InitializeSecurityContext(In-Buffers count=2, Out-Buffer length=0, returned code=InternalError).
System.Net Error: 0 : [5020] Exception in HttpWebRequest#57748501:: - The request was aborted: Could not create SSL/TLS secure channel..
System.Net Error: 0 : [5020] Exception in HttpWebRequest#57748501::GetResponse - The request was aborted: Could not create SSL/TLS secure channel..




вообще https://ra-sa/ra/ra.wsdl открывает только в InternetExplorer, а в других браузерах нет ( просто выдают ошибку Ошибка 2 (net::ERR_FAILED): Неизвестная ошибка. )
Wfetch кидает ошибку
0x80090322 (Главное конечное имя неверно.): [slib]: InitializeSecurityContext

curl кидает ошибку
curl: (35) error:0609E09C:digital envelope routines:PKEY_SET_TYPE:unsupported algorithm


Пробовал в коде добавить

ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

ServicePointManager.ServerCertificateValidationCallback = (se, cert, chain, sslerror) => true;

Не помогло. Не знаю что делать

Offline Kirill Sobolev  
#9 Оставлено : 19 июня 2013 г. 14:25:40(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
Цитата:
вообще https://ra-sa/ra/ra.wsdl открывает только в InternetExplorer

а https://ra-sa/ra/ra.asp? есть ли какие-то предупреждения?
Цитата:
Не помогло. Не знаю что делать

Это все на одной машине происходит? На сертификат вебсервера ЦР можно взглянуть?
Техническую поддержку оказываем тут
Наша база знаний
Offline sadgb  
#10 Оставлено : 19 июня 2013 г. 14:59:55(UTC)
sadgb

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

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

Сказал(а) «Спасибо»: 4 раз
Да, https://ra-sa/ra/ra.asp ведет себя так же, как и https://ra-sa/ra/ra.wsdl ( открывается только в InternetExplorer, никакими другими способами не обратиться )
ra-sa это отдельный сервер, все остальные действия я выполняю на своей машине

Прикладываю сертификат сервера со всей цепочкой ( напомню, что элементы цепочки находятся на моей машине в доверенных корневых ЦС и в доверенных промежуточных ЦС )
Вложение(я):
1.zip (2kb) загружен 5 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
3 Страницы123>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.