Статус: Участник
Группы: Участники
Зарегистрирован: 05.03.2020(UTC) Сообщений: 29
|
Перепробовали множество примеров из samples-source.jar/cades, однако так и не заработало. Задача проверки подписи оказалась не так проста, как казалось. Файл p7s получен после применения команды: Цитата: csptest.exe -sfsign -sign -detached -my Отин -in test.txt -out test.txt.p7s Ниже приведен MWE, где по итогу возникает следующее исключение: Цитата:message-digest attribute value does not match calculated value; error codes: [8] 'Signature is invalid' Код:package cryptopro.jcp.example;
import ru.CryptoPro.CAdES.CAdESSignature;
import ru.CryptoPro.CAdES.exception.CAdESException;
import ru.CryptoPro.JCP.tools.Array;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
/**
* Пример проверки подписи CAdES.
*/
public class VerifyExample {
private static final char[] STORE_PASS = new char[]{'p', 'a', 's', 's', 'w', 'o', 'r', 'd'};
private static final String ALIAS = "tp-7f214c34-9bb4-42f1-3h5a-dsbh76e64h5u";
public static void loadConfiguration(Collection<X509Certificate> chain)
throws KeyStoreException, NoSuchAlgorithmException, CertificateException,
IOException {
KeyStore keyStore = KeyStore.getInstance("JKS");
final File file = new File("D:/cert/test.jks");
keyStore.load(new FileInputStream(file), STORE_PASS);
// Получаем цепочку сертификатов.
List<Certificate> lChain = Arrays.asList(keyStore.getCertificate(ALIAS));
// Конвертируем цепочку в X509Certificate.
Collection<X509Certificate> xChain =
Arrays.asList((lChain).toArray(new X509Certificate[lChain.size()]));
chain.addAll(xChain);
// сохранение содержимого хранилища в файл с тем же паролем
keyStore.store(new FileOutputStream(file), STORE_PASS);
}
/**
* @param args
*/
public static void main(String[] args) {
try {
Collection<X509Certificate> chain = new ArrayList<X509Certificate>();
loadConfiguration(chain);
// Читаем подпись из файла.
byte[] cadesCms = Array.readFile("C:\\signed\\test.txt.p7s");
CAdESSignature cadesSignature = new CAdESSignature(cadesCms, null, null);
cadesSignature.verify(chain);
Configuration.printSignatureInfo(cadesSignature);
} catch (IOException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
e.printStackTrace();
} catch (CAdESException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
}
Если в дебаггере просматривать внутренности подписи и цепочки сертификатов, то У подписи наблюдается значение digest = 1.2.643.7.1.1.2.2, в то же время у сертификата algId = 1.2.643.7.1.1.3.2 Возможно в этом дело? Отредактировано пользователем 5 марта 2020 г. 13:58:58(UTC)
| Причина: Не указана
|