Signieren Sie PDF mit iTextSharp 5.3.3 und USB-token
Ich bin neu in iTextSharp (und StackOverFlow). Ich bin versucht zu signieren eines PDF-Dokuments in C# unter Verwendung von externen USB-token. Ich versuche, mit den Folgen code habe ich gegraben aus dem internet.
Org.BouncyCastle.X509.X509CertificateParser cp = new Org.BouncyCastle.X509.X509CertificateParser();
//Get Sertifiacte
X509Certificate2 certClient = null;
X509Store st = new X509Store(StoreName.My, StoreLocation.CurrentUser);
st.Open(OpenFlags.MaxAllowed);
X509Certificate2Collection collection = X509Certificate2UI.SelectFromCollection(st.Certificates, "Please choose certificate:", "", X509SelectionFlag.SingleSelection);
if (collection.Count > 0){
certClient = collection[0];
}
st.Close();
//Get Cert Chain
IList<Org.BouncyCastle.X509.X509Certificate> chain = new List<Org.BouncyCastle.X509.X509Certificate>();
X509Chain x509chain = new X509Chain();
x509chain.Build(certClient );
foreach (X509ChainElement x509ChainElement in x509chain.ChainElements){
chain.Add(DotNetUtilities.FromX509Certificate(x509ChainElement.Certificate));
}
PdfReader reader = new PdfReader(sourceDocument);
FileStream resStream = new FileStream(resultDocument, FileMode.Create, FileAccess.ReadWrite);
PdfStamper stamper = PdfStamper.CreateSignature(reader, resStream , '\0', null, true);
PdfSignatureAppearance appearance = stamper.SignatureAppearance;
appearance.Reason = reason;
appearance.Location = location;
appearance.SetVisibleSignature(new iTextSharp.text.Rectangle(20, 10, 170, 60), 1, "Signed");
X509Certificate2Signature es = new X509Certificate2Signature(certClient, "SHA-1");
MakeSignature.SignDetached(appearance, es, chain, null, null, null, 0, CryptoStandard.CMS);
Das problem ist, dass ich eine Ausnahme:
System.Security.Cryptography.CryptographicException was unhandled
Message=Invalid type specified.
Source=mscorlib
StackTrace:
at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
at System.Security.Cryptography.Utils._GetKeyParameter(SafeKeyHandle hKey, UInt32 paramID)
at System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)
at System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair()
at System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize)
at System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey()
at iTextSharp.text.pdf.security.X509Certificate2Signature..ctor(X509Certificate2 certificate, String hashAlgorithm)
at WindowsFormsApplication1.PDFSignerHelper.signPdfFile(String sourceDocument, String resultDocument, X509Certificate2 certClient, String reason, String location)
InnerException:
So, jetzt werde ich wieder zu iTextSharp 5.2.1 und verwenden Sie die Beispiele aus der itextpdf.sourceforge.net/howtosign.html#signextdic. Sie machen den job für mich. Wenn sich jemand finden Lösung für iTextSHarp 5.3.3 werde ich froh sein, es zu sehen.
InformationsquelleAutor Kaloyan Iliev | 2012-11-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Ansatz funktioniert gut für uns (iTextSharp 5.3.3). Wir verwenden smart-card und USB-token (Hersteller - http://www.author.kiev.ua):
Nie Verstand. Es scheint, Acrobat hatte importiert die Zertifikate auf meinem lokalen Speicher irgendwann und es war betrachten Sie Sie von dort. Der USB-token kann nicht zugegriffen werden, nun ja.. Sth falsch mit meinem middleware/Treiber... Wie diese Unternehmen verkaufen, die diese Dinge? Ich habe die Tage der Suche nach der richtigen Treiber-Versionen... 🙁
in unserem Fall hatten wir auch keine problem ) - Beispiele, Treiber, support ) Dank der Herstellung
InformationsquelleAutor Sasha
Ich habe ein c# - Projekt, das unterzeichnen einer PDF-Datei über den windows-store, SmartCard oder eine Pfx - /P12-Datei
Möglicherweise kann es sinnvoll sein vier
Sehr gut geschrieben, Methoden und Antwort.
Sehr gut ... danke
Dies scheint zu funktionieren, aber als Ergebnis ist die Signatur nicht gültig ist. Ich bin mit einer PIN geschützten smartcard mit nicht exportierbaren privaten Schlüssel PKCS#12. Danke
InformationsquelleAutor jean-luc
Den gleichen code wie oben, verwendet jedoch eine Zertifikat-Datei anstelle von speichern, signieren Sie ein PDF-Dokument auf der letzten Seite.
Kopieren, einfügen, import benötigte Bibliotheken und gehen Sie die Arbeit an etwas anderes.
InformationsquelleAutor RokX