АРХИВ ПО ЗАДАЧЕ:
Задача нужно сформировать подпись файла с данными <client_secret> по следующим требованиям:
<client_secret> подпись запроса в формате PKCS#7 detached signature в кодировке UTF-8 от значений четырех параметров HTTP-запроса: scope, timestamp, clientId, state (без разделителей). <client_secret> должен быть закодирован в формате base64 url safe. Используемый для проверки подписи сертификат должен быть предварительно зарегистрирован в ЕСИА и привязан к учетной записи системы-клиента в ЕСИА. ЕСИА поддерживает сертификаты в формате X.509. ЕСИА поддерживает алгоритмы формирования электронной подписи RSA с длиной ключа 2048 и алгоритмом криптографического хэширования SHA-256, а также алгоритм электронной подписи ГОСТ Р 34.10-2001 и алгоритм криптографического хэширования ГОСТ Р 34.11-94.
В чем суть задачи:
1) Есть файл msg.txt он содержит значение <client_secret>
2) Нужно получить подпись его содержимого по требованиям выше.
3) Для подписи есть 2 сертификата:
cert.key открытый ключ
cert.crt закрытый ключ
4)С помощью этих ключей мы должны сформировать подпись файла по требованиям выше.
5)В архиве есть пример правильно сформированных подписей,которые принимает система.
Пробовал на PHP таким скриптом:
<?
$flag=openssl_pkcs7_sign("msg.txt", "enc.txt", "file:///home/virtwww/w_education-goldgfs_bbd816c0/http/cert.crt", array("file:///home/virtwww/w_education-goldgfs_bbd816c0/http/cert.key",""), array());
if($flag){
$client_secret=file_get_contents("enc.txt");
$client_secret=base64_encode($client_secret);
}
$client_secret=file_get_contents("enc.txt");
$client_secret=base64_encode($client_secret);
?>
В итоге система, куда передается сформированная подпись ругается. что подпись инвалидная.
В целом нужна быстрая консультация как еще наформировать подписей по требованиям выше.
Данная задача является подзадачей вот этого проекта: