Ich Auswertung iText7 und verwalten keine pdf mit einem selbst signierten Zertifikat signieren, die keinen privaten Schlüssel hat.Anmeldung
Ich versuche, dies zu tun:
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);
}
verstehe ich, dass ich einen privaten Schlüssel sicher sein zu können, verwenden sollte, zu identifizieren, die das PDF unterzeichnet, aber unsere aktuelle PDF-Bibliothek, die eine ist Die COM-Komponente verwaltet die PDF-Datei ohne einen privaten Schlüssel.
Können Sie mir sagen, wie das gleiche zu tun?
Grüße
Es ist * immer * ein privater Schlüssel. Sie können keine digitale Signatur ohne einen privaten Schlüssel erstellen, daher ist Ihre Behauptung, dass Ihre aktuelle PDF-Bibliothek es schafft, die PDF-Datei ohne einen privaten Schlüssel zu signieren, falsch. Vielleicht sprechen Sie nicht von einer echten ** digitalen Signatur ** (was PKI impliziert). Vielleicht wissen Sie nicht, dass ein privater Schlüssel verwendet wird (z. B. Sie erwähnen PKCS # 12; aber vielleicht verwendet Ihre Bibliothek PKCS # 11). –
.Net-Sicherheitsbibliotheken verwenden manchmal Klassen- und Methodennamen, die darauf hindeuten, dass nur ein Zertifikat gemeint ist, während tatsächlich ein Zertifikat plus (optional) ein passender privater Schlüssel vorhanden ist. Z.B. das [X509Certificate2] (https://msdn.microsoft.com/en-us/library/windows/desktop/system.security.cryptography.x509certificates.x509certificate2 (v = vs.100) .aspx). – mkl
Die Bibliothek automatisch die PDF unterzeichnen, wenn ein PDFA Archiv tun, wenn die folgenden Eigenschaften festgelegt: _conversion.CertificateName = _signature.CertificatDelivreA; _conversion.Issuer = _signature.CertificatDelivrePar; Es verwendet das Zertifikat im Windows-Zertifikatsspeicher gespeichert und das Zertifikat hat keinen privaten Schlüssel eingebettet (in meinem Beispiel cert [0]. HasPrivateKey ist falsch). Ich weiß nicht, wie aber eine Unterschrift angewendet wird und Adobe Reader sagt eindeutig, dass die Unterschrift nicht verifiziert werden kann. – PatriceVB