Я столкнулся с проблемой при попытке реализовать цифровую подпись с помощью iText7. В соответствии с документацией iText и несколькими примерами, мне нужно реализовать IExternalSignature
(здесь) , вот так: IExternalSignature signature = new PrivateKeySignature(pk, digestAlgorithm);
, но здесь я получаю исключение:
var pk = Org.BouncyCastle.Security.DotNetUtilities.GetKeyPair(cert.PrivateKey).Private;
, что в основном означает «Неверный ключ для использования в текущем состоянии» (?).
Большинство примеров взяты из более старой версии библиотеки 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();
}
Пара дополнительных сведений о сертификате (к сожалению, я не могу показать вам какие-либо подробности)