Статус: Участник
Группы: Участники
Зарегистрирован: 31.07.2012(UTC) Сообщений: 15
Сказал(а) «Спасибо»: 2 раз
|
Здравствуйте! Есть клиент, который генерит подписанные запросы на своем сертификате, есть серверная часть, которая поднимает tls-соединение с сервером УЦ и используя методы веб-сервиса УЦ шлет ему запросы, сгенеренные клиентом. Подписанный запрос на обновление сертификата (метод SubmitRequest веб-сервиса) УЦ корректно обрабатывает, но не пускает запрос на подтверждение обновления (метод AcceptRequest) с ошибкой "Некорректная подпись запроса. Доступ запрещен." Если использовать одинаковые сертификаты для поднятия соединения и запросов, все работает. Посоветуйте пожалуйста, как можно решить эту проблему? Код подключения на java: Код:System.setProperty("javax.net.ssl.trustStore", trustStorePath);
System.setProperty("javax.net.ssl.trustStoreType", trustStoreType);
System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword);
System.setProperty("javax.net.ssl.keyStoreType", keyStoreType);
System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword);
CertRequestSoapPortProxy crspp = new CertRequestSoapPortProxy(wsEndpoint);
crspp.submitRequest(submitRequest, UID);
...
crspp.acceptRequest(reqId, acceptRequest);
Если все так, как я полагаю, можно для каждого клиента программно импортировать его сертификат и ключ в trustStore и keyStore соответственно, но есть ли способ проще?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 31.07.2012(UTC) Сообщений: 15
Сказал(а) «Спасибо»: 2 раз
|
Может можно как-нибудь отключить проверку сертификата, с которым поднимается соединение?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,030  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 727 раз в 685 постах
|
Здравствуйте. Некий клиент формирует запрос (как подписывается запрос?) и передает его на ваш сервер, где создается tls-соединение с сервером УЦ. Непонятна фраза "одинаковые сертификаты для соединения и запросов" - нужно использовать разные? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 31.07.2012(UTC) Сообщений: 15
Сказал(а) «Спасибо»: 2 раз
|
Да, клиент формирует запрос на основе своего сертификата, подписывает запрос им же и отправляет запрос на сервер. Затем сервер со своим сертификатом создает соединение на своем сертификате и производит запрос. Клиентский и серверный сертификаты имеют одинаковые разрешения, кстати. Одинаковые сертификаты для соединения и запросов - имел ввиду, что если я использую для генерации запросов и для поднятия соединения один и тот же сертификат, то AcceptRequest проходит без ошибок. Если я правильно понимаю, проблема и состоит в том, что используются разные сертификаты для подписывания запроса и для соединения. Передавать сертификаты с закрытыми ключами с клиентов и импортировать их в TrustStore и KeyStore на сервере проблематично. Есть ли варианты проще?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,030  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 727 раз в 685 постах
|
Клиент формирует некий запрос определенного формата и подписывает его своим ключом (допустим, XML-документ) или это запрос на выпуск сертификата? Один и тот же сертификат для соединения и запроса - это клиентский сертификат, не серверный, с клиентским работает? В таком случае, если клиент использует сертификат без расширения client authentication и т.д., то получается, что AcceptRequest никак не выполнится. Передавать клиентские закрытые ключи куда-либо, по идее, запрещено. Надо разбираться, почему AcceptRequest работает, только когда используются клиентский (а не серверный) закрытый ключ и сертификат. Отредактировано пользователем 9 августа 2012 г. 14:22:18(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 31.07.2012(UTC) Сообщений: 15
Сказал(а) «Спасибо»: 2 раз
|
Клиент формирует запрос на обновление сертификата, подписывает запрос и отправляет его на сервер строкой в формате pkcs#7. Клиентский и серверный сертификаты по сути одинаковы, просто выпущены на разных субъектов. Разрешения у них одинаковы - 1.3.6.1.5.5.7.3.2, 1.3.6.1.4.1.16745.4.3.1. На стороне УЦ доступ с сертификатами с такими разрешениями открыт для выполнения всех нужных мне запросов (SubmitRequest, AcceptRequest, GetCertificateInfo, ConfirmRequest), в т.ч. право delegate. Попробую сейчас подписывать запросы на серверным сертификатом, может поможет...
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 31.07.2012(UTC) Сообщений: 15
Сказал(а) «Спасибо»: 2 раз
|
Подскажите пожалуйста, какими средствами для java пользоваться, чтобы переподписать подписанный запрос формата pkcs#7 другим сертификатом? Пытался брать клиентский запрос SubmitRequest и на нем формировать AcceptRequest, используя библиотеку capicom с помощью bridge2java, но появились проблемы с преобразованием типов (ICertificate2 в ICertificate, например). Пытался подписывать AcceptRequest, сформированный клиентом, с помощью класса Signature по мануалу по jcp, но УЦ выдает ошибку: Цитата:Ошибка модуля удаленного доступа к ЦР КриптоПро УЦ: Метод: CertRequest.AcceptRequest Источник: CertRequest.AcceptRequest Номер: 0x80040202 (-2147220990) Описание: Запросы не совпадают. Код простейший, беру подписанный клиентом запрос AcceptRequest, декодирую, подписываю закрытым ключом сервера, затем снова в base64 и отправляю в УЦ: Код:...
Signature sig = Signature.getInstance("CryptoProSignature");
sig.initSign(privKey);
sig.update(decodedBytes);
sig.sign();
return Base64.encode(decodedBytes);
Возможно, нужно как-то удалять подпись клиента? Отредактировано пользователем 14 августа 2012 г. 13:39:01(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,030  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 727 раз в 685 постах
|
В samples_src.jar есть несколько примеров по работе с CMS сообщениями, посмотрите их. Там происходит декодирование, подпись и проверка подписи. Если возможно проверить 2 подписи, то подпись клиента можно не удалять. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close