все!
Я решаю две проблемы:
- Прекратите использовать CAPICOM для подписи / проверки документов - потому что он больше не поддерживается Microsoft (см. Подробнее: Альтернативы использованию CAPICOM )
- Вначале мы хотим расширить список поддерживаемых браузеров нашей системой (настраиваемая версия Documentum webtop).Теперь он полностью поддерживается только IE 6+, поскольку в качестве ActiveX используется CAPICOM.
Для подписи мы используем модуль windows CryptoPro , поскольку только он официально имеет юридическую силу в России.Наша система развернута в правительстве одного российского региона.
Наша система работает уже 5 лет, и есть много сгенерированных признаков (все от CAPICOM).Знаки отсоединены и сохраняются в базе данных.
Мы хотим найти решение для проверки этих знаков в коде Java (в апплете).
Я пробовал код ниже, но не могу найтилюбой подходящий метод для проверки любой подписи.Этот метод всегда возвращает false.
public boolean verifyFile(String fileInput, String metadata, String base64Signature) throws Exception {
Security.addProvider(new BouncyCastleProvider());
byte[] signedContent = Base64.decode(base64Signature.getBytes("UTF-8"));
CMSSignedData cms7 = new CMSSignedData(signedContent);
CertStore certs = cms7.getCertificatesAndCRLs("Collection", "BC");
SignerInformationStore signers = cms7.getSignerInfos();
Collection c = signers.getSigners();
SignerInformation signer = (SignerInformation)c.iterator().next();
Collection certCollection = certs.getCertificates(signer.getSID());
Iterator certIt = certCollection.iterator();
X509Certificate cert = (X509Certificate)certIt.next();
Signature signature = Signature.getInstance("SHA1withRSA", "BC");
signature.initVerify(cert.getPublicKey());
String signedContentString = getSignedDataString(fileInput, metadata);
signature.update(signedContentString.getBytes("UTF-8"));
return signature.verify(signer.getSignature());
}
У кого-нибудь есть решение или он уже сталкивался с этим pr