我在尝试用iText7实现数字签名时遇到了一个问题。根据iText的文档和几个我需要实现IExternalSignature (here)的示例,如下所示:IExternalSignature signature = new PrivateKeySignature(pk, digestAlgorithm);,但这是我遇到异常的地方:
var pk = Org.BouncyCastle.Security.DotNetUtilities.GetKeyPair(cert.PrivateKey).Private;

这基本上意味着“在当前状态下使用的密钥无效”(?)。
大多数示例来自旧版本的iText库和Java (我使用的是C#),我不太明白。
如果有任何建议,我将不胜感激。谢谢!
编辑:下面是一些复制异常的示例代码:
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();
}关于证书的更多信息(很遗憾,我不能向你展示任何细节)



发布于 2020-03-13 02:12:13
证书中有问题。它必须标记为“可导出”。我不知道如何解决这种情况,但在我的案例中,我使用了自己的证书:
var cert = new X509Certificate2();
cert.Import(File.ReadAllBytes(@"C:\temp\certificate.cer"), "password", X509KeyStorageFlags.Exportable);这是可行的。
您需要找到更改证书标志的方法。也许是store.Open(OpenFlags.MaxAllowed)的问题,但这不管用。
https://stackoverflow.com/questions/54198299
复制相似问题