Проверьте отсоединенную подпись PKSC # 7 в java (может быть от Bouncy Castle), сгенерированную CAPICOM - PullRequest
1 голос
/ 14 октября 2011

все!

Я решаю две проблемы:

  1. Прекратите использовать CAPICOM для подписи / проверки документов - потому что он больше не поддерживается Microsoft (см. Подробнее: Альтернативы использованию CAPICOM )
  2. Вначале мы хотим расширить список поддерживаемых браузеров нашей системой (настраиваемая версия 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

...