Статус: Участник
Группы: Участники
Зарегистрирован: 23.01.2013(UTC) Сообщений: 11  Откуда: Владимир Сказал(а) «Спасибо»: 1 раз
|
Добрый день. В текущий момент есть следующая задача. Гостовые токены, которые функционируют в системе интернет банка, необходимо проверить подпись, сертификат УЦ сохранен в базе данных интернет банка. Далее мы получаем от клиента PKCS#7, и требование банка, чтобы мы его проверяли с помощью Крипто Про CSP. Я не силен в майкрософтовских технологиях, поэтому нужен совет. В документации по крипто про я вижу , что для проверки подписи надо обязательно импортировать открытые ключи. Есть ли возможность проверять, не импортируя ключи? Или таким образом проверяется цепочка сертификатов? При импорте сертификата обязательно присутствие CA сертификата в хранилище? Или цепочку сертификатов есть способ проверять отдельно? Как это например реализовано в java, например с помощью того же bouncyCastle, это сделать можно.
Спасибо за ответы.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,399  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 719 раз в 623 постах
|
Не понял про импорт ключей, но чтобы функция построения цепочки сертификатов работала - корневой должен быть в хранилище ROOT. Или интеллектуально обрабатывать ошибки. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 23.01.2013(UTC) Сообщений: 11  Откуда: Владимир Сказал(а) «Спасибо»: 1 раз
|
Судя по документации перед использованием Код:
if(CryptVerifySignature(
hHash,
pbSignature,
dwSigLen,
hPubKey,
NULL,
0))
мы должны иметь hPubKey который получается при импорте Код:
if(CryptImportKey(
hProv,
pbKeyBlob,
dwBlobLen,
0,
0,
&hPubKey))
Как минимум мне кажется импорт это дорогостоящая операция. Представьте, что в интернет банке на каждую платежку нам надо сделать импорт сертификата. А если уже он там есть, то читать его или искать по каким то условиям, хотя мы его имеем в PKCS#7. Вот пример из bouncycastle Код:
/**
* Take a CMS Signed-Data message and a trust anchor and determine if
* the message is signed with a valid signature from a end entity
* entity certificate recognized by the trust anchor rootCert.
*/
public static boolean isValid(
CMSSignedData signedData, X509Certificate rootCert) throws Exception
{
CertStore certsAndCRLs = signedData.getCertificatesAndCRLs(
"Collection", "BC");
SignerInformationStore signers = signedData.getSignerInfos();
Iterator it = signers.getSigners().iterator();
if (it.hasNext())
{
SignerInformation signer = (SignerInformation)it.next();
X509CertSelector signerConstraints = signer.getSID();
signerConstraints.setKeyUsage(getKeyUsageForSignature());
PKIXCertPathBuilderResult result = Utils.buildPath(
rootCert, signer.getSID(), certsAndCRLs);
return signer.verify(result.getPublicKey(), "BC");
}
return false;
}
}
Не надо никаких импортов ни в какие хранилища, на вход pkcs#7 и сертификат CA. Идеальный вариант. Но заказчик сказал только Крипто Про CSP. Собственно, есть ли аналог в Крипто Про CSP. Насколько я вижу для всех функций проверки нужен дескриптор открытого ключа, а его можно получить только если сертификат проимпортирован.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 671   Откуда: Йошкар-Ола Сказал «Спасибо»: 3 раз Поблагодарили: 93 раз в 67 постах
|
Без понятия насчет bouncycastle и Java, но судя по приведенному коду и импорт публичного ключа и поиск сертификата в локальном хранилище в этом коде присутствуют: 1) CertStore certsAndCRLs = signedData.getCertificatesAndCRLs("Collection", "BC"); - Это получение всех сертификатов из локального хранилища; 2) return signer.verify(result.getPublicKey(), "BC"); - Это импорт публичного ключа;
Если сертификат подписанта уже содержится в сообщении, то импортировать публичный ключ можно и прямо из первичного сообщения. Вообщем пока я (как и многие другие, наверное, на этом форуме) слабо представляю что вы хотите.
Попробуйте ещё раз переформулировать свои вопросы или/и почитать про PKCS#7 (а лучше про CMS - RFC5652). |
С уважением, Юрий Строжевский |
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,399  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 719 раз в 623 постах
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close