Цифровая подпись с iText7 - PullRequest
       42

Цифровая подпись с iText7

0 голосов
/ 15 января 2019

Я столкнулся с проблемой при попытке реализовать цифровую подпись с помощью iText7. В соответствии с документацией iText и несколькими примерами, мне нужно реализовать IExternalSignature (здесь) , вот так: IExternalSignature signature = new PrivateKeySignature(pk, digestAlgorithm);, но здесь я получаю исключение:

var pk = Org.BouncyCastle.Security.DotNetUtilities.GetKeyPair(cert.PrivateKey).Private;

enter image description here

, что в основном означает «Неверный ключ для использования в текущем состоянии» (?).

Большинство примеров взяты из более старой версии библиотеки iText и Java (я использую C #), и я не могу понять это.

Я буду очень благодарен за любые советы. Спасибо!

EDIT: Вот несколько примеров кода, чтобы просто скопировать исключение:

static void Main(string[] args)
    {
        string output = "D:/Development/TestApp/testOutputMoje.pdf";
        string input = "D:/Development/TestApp/testInput.pdf";

        PdfReader reader = new PdfReader(input);
        string digestAlgorithm = DigestAlgorithms.SHA256;

        List<X509Certificate2> oCertChain = new List<X509Certificate2>();

        //getting certificates from store
        X509Store store = new X509Store(StoreName.My);
        store.Open(OpenFlags.ReadOnly);
        foreach (var oCert in store.Certificates)
        {
            oCertChain.Add(oCert);
        }
        store.Close();

        //siginig with first certificate - just example
        var cert = oCertChain[0];   

        //exception here:
        var pk = Org.BouncyCastle.Security.DotNetUtilities.GetKeyPair(cert.PrivateKey).Private; 

        X509Certificate[] bouncyCert = { Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(cert) };

        StampingProperties stampProp = new StampingProperties();
        stampProp.PreserveEncryption();

        IExternalSignature signature = new PrivateKeySignature(pk, digestAlgorithm);

        PdfSigner signer = new PdfSigner(reader, new FileStream(output, FileMode.Create), stampProp);
        signer.SignDetached(signature, bouncyCert, null, null, null, 0, CryptoStandard.CADES);

        reader.Close();
    }

Пара дополнительных сведений о сертификате (к сожалению, я не могу показать вам какие-либо подробности)

enter image description here enter image description here enter image description here

...