Я оцениваю iText7 и не могу подписать PDF-код с самоподписанным сертификатом, который не имеет закрытого ключа.Подпишите PDF без закрытого ключа с iText7
Я пытаюсь сделать это:
X509Store store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var certs = store.Certificates.Find(X509FindType.FindBySubjectName, "MyName", false);
var refDate = DateTime.MinValue;
X509Certificate2 certificate = certs[0];
var pk = DotNetUtilities.GetKeyPair(certificate.PrivateKey).Private; //how to do without private key ????
IExternalSignature pks = new PrivateKeySignature(pk, "SHA-256");
var bCert = DotNetUtilities.FromX509Certificate(certificate);
var chain = new Org.BouncyCastle.X509.X509Certificate[] {bCert};
using (var reader = new PdfReader(@"D:\Test\ToSign.pdf"))
using (var stream = new FileStream(@"D:\Test\Signed.pdf", FileMode.OpenOrCreate)) {
PdfSigner signer = new PdfSigner(reader, stream, false);
signer.SignDetached(pks, chain, null, null, null, 0, PdfSigner.CryptoStandard.CMS);
}
Я понимаю, что я должен использовать секретный ключ, чтобы иметь возможность быть уверенным, чтобы определить, кто подписал PDF, но наша текущая библиотека PDF, которая является COM-компоненту удается подписать PDF-файл без какого-либо закрытого ключа.
Можете ли вы сказать мне, как сделать то же самое?
С уважением
Существует * всегда * закрытый ключ. Вы не можете создать цифровую подпись без закрытого ключа, поэтому ваше утверждение о том, что ваша текущая библиотека PDF может подписать PDF без какого-либо частного ключа, неверна. Возможно, вы не говорите о реальной ** цифровой подписи ** (что подразумевает PKI). Возможно, вы не знаете, что используется закрытый ключ (например, вы упоминаете PKCS # 12, но, возможно, ваша библиотека использует PKCS # 11). –
. Чистые библиотеки безопасности иногда используют имена классов и методов, которые, как представляется, указывают на то, что имеется только сертификат, а на самом деле имеется сертификат плюс (необязательно) соответствующий личный ключ. Например. [X509Certificate2] (https://msdn.microsoft.com/en-us/library/windows/desktop/system.security.cryptography.x509certificates.x509certificate2 (v = vs.100) .aspx). – mkl
Библиотека автоматически подписывает PDF-файл при создании PDFA-архива, если установлены следующие свойства: _conversion.CertificateName = _signature.CertificatDelivreA; _conversion.Issuer = _signature.CertificatDelivrePar; Он использует сертификат, хранящийся в хранилище сертификатов Windows, и сертификат не имеет встроенного ключа (в моем экземпляре cert [0] .HasPrivateKey является ложным). Я не знаю, как применяется подпись, и Adobe Reader четко говорит, что подпись не может быть проверена. – PatriceVB