Comentarios en: Cómo firmar un documento PDF desde C# con iTextSharp https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/ El blog de Scientia® Soluciones Informáticas Wed, 08 Nov 2023 16:10:48 +0000 hourly 1 Por: Pablo Gatica Stillman https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-16211 Wed, 08 Nov 2023 16:10:48 +0000 http://www.programandoamedianoche.com/?p=1063#comment-16211 Estimados comento que probé este código con los driver de safenet authentication client 10.8 R8 (drivers e-token safenet 2.0) y no funciona. Solo solicita la contraseña y cuando valida el certificado se cae.

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-16068 Sat, 06 Feb 2021 00:03:58 +0000 http://www.programandoamedianoche.com/?p=1063#comment-16068 En respuesta a mdecima.

Me alegra que te haya sido útil.
¡Saludos!

]]>
Por: mdecima https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-16067 Sat, 06 Feb 2021 00:02:16 +0000 http://www.programandoamedianoche.com/?p=1063#comment-16067 Genial tu codigo, no encontraba forma de firmar pdf desde el cert store.

]]>
Por: Roberto https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-15958 Mon, 14 Oct 2019 15:55:35 +0000 http://www.programandoamedianoche.com/?p=1063#comment-15958 En respuesta a willi.

Yo tengo este código, que ni se como lo hice o de donde salió:

     int intCSize = 4000;
            //Hashtable objTable = new Hashtable();

            //Dim objTable As New Dictionary(Of PdfName, Integer)
            //Dictionary[PdfName, int] objTable = new Dictionary[PdfName, int]();
            
    Dictionary objTable = new Dictionary() ;


            objTable[PdfName.CONTENTS] = intCSize * 2 + 2;
            objSA.PreClose(objTable);
            
            
            HashAlgorithm objSHA1 = new SHA1CryptoServiceProvider();


            Stream objStream = objSA.RangeStream;
            int intRead = 0;
            byte[] bytBuffer = new byte[8192];
            while ((intRead = objStream.Read(bytBuffer, 0, 8192)) > 0)
                objSHA1.TransformBlock(bytBuffer, 0, intRead, bytBuffer, 0);
            objSHA1.TransformFinalBlock(bytBuffer, 0, 0);

            byte[] bytPK = SignMsg(objSHA1.Hash, Certificate, false);
            byte[] bytOut = new byte[intCSize];

            PdfDictionary objDict = new PdfDictionary();

            Array.Copy(bytPK, 0, bytOut, 0, bytPK.Length);

            objDict.Put(PdfName.CONTENTS  , new PdfString(bytOut).SetHexWriting(true));
            objSA.Close(objDict);
]]>
Por: Roberto https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-15957 Mon, 14 Oct 2019 15:53:19 +0000 http://www.programandoamedianoche.com/?p=1063#comment-15957 En respuesta a Alberto Pérez.

Tiene toda su lógica. Fíjate como lo hace la hacienda tributaria y otras WEB, al final te obligan a instalar un plugin o algo para la firma.

]]>
Por: Linda https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-15771 Tue, 12 Jun 2018 16:34:45 +0000 http://www.programandoamedianoche.com/?p=1063#comment-15771 En respuesta a Roberto.

no funciona

]]>
Por: Linda https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-15770 Tue, 12 Jun 2018 15:22:51 +0000 http://www.programandoamedianoche.com/?p=1063#comment-15770 En respuesta a Alberto Pérez.

Lo resolviste??

]]>
Por: morgan https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-15748 Fri, 20 Apr 2018 17:08:02 +0000 http://www.programandoamedianoche.com/?p=1063#comment-15748 En respuesta a morgan.

Hola de nuevo.. Ya solucione el problema, haciendo lo siguiente:

PdfReader objReader = new PdfReader(Source);
int numberOfPages = objReader.NumberOfPages;

PdfStamper objStamper = PdfStamper.CreateSignature(objReader, new FileStream(Target, FileMode.Create), '\0');
objStamper.InsertPage(numberOfPages + 1, objReader.GetPageSizeWithRotation(1)); // inserta una hoja nueva para agregar la firma.
 PdfSignatureAppearance objSA = objStamper.SignatureAppearance;

if (AddVisibleSign) objSA.SetVisibleSignature(new Rectangle(200, 200, 500, 300), numberOfPages + 1, null);
]]>
Por: morgan https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-15747 Thu, 19 Apr 2018 20:38:10 +0000 http://www.programandoamedianoche.com/?p=1063#comment-15747 Estimado alguna forma de crear una hoja nueva al pdf y que en esta nueva hoja valla la firma?.

Saludos y gracias.

]]>
Por: Mayara https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-15708 Mon, 06 Nov 2017 18:15:50 +0000 http://www.programandoamedianoche.com/?p=1063#comment-15708 como puedo agregar un timestamping valido?

]]>
Por: sebastian https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-15665 Tue, 02 May 2017 22:33:55 +0000 http://www.programandoamedianoche.com/?p=1063#comment-15665 Hola, copie tu ejemplo de la firma, selecciono el informe que quiero firmar, después selecciono el destino, pero me tira error en la siguiente linea:
PdfReader objReader = new PdfReader(Source);

y me tira este error, la verdad es que no lo he podido solucionar, favor me podrías ayudar?
PDF header signature not found.

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-15653 Wed, 22 Mar 2017 15:04:29 +0000 http://www.programandoamedianoche.com/?p=1063#comment-15653 En respuesta a Jonny1588.

Hola Jonny.
Para utilizar un certificado PKCS12 (archivo .p12) deberías crear la clase X509Certificate2 pasándole como primer parámetro el path al archivo y como segundo parámetro la contraseña. O sea, tomando el ejemplo que puse en la página, deberías eliminar las lineas 29 a 38 de «Form1.cs» y poner algo así:

X509Certificate2 objCert = new X509Certificate2("c:\\miCertificado.p12", "miContraseña");

Por otro lado, para abrir un PDF con contraseña deberías modificar la linea 32 del archivo «PDF.cs» para que quede así:

PdfReader objReader = new PdfReader(Source, new System.Text.ASCIIEncoding().GetBytes("miContraseñaDelPdf"));

Espero te sirva.
¡Suerte!

]]>
Por: Jonny1588 https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-15652 Thu, 16 Mar 2017 22:59:48 +0000 http://www.programandoamedianoche.com/?p=1063#comment-15652 Excelente!!!…

He descargado tu proyecto y funciona bien pero tengo una duda…. necesito firmar un PDF con un certificado .p12 que tiene una contraseña… adicional necesito quitar los permisos del PDF a solo de lectura para que no se pueda manipular una vez firmado… soy nuevo en firma digital y te agradeceria tu valiosas ayuda…

Saludos amigo

]]>
Por: Leo https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-15609 Thu, 03 Nov 2016 19:14:11 +0000 http://www.programandoamedianoche.com/?p=1063#comment-15609 Tengo un problema, me lee el token de firma digital bien, pero me toma los certificados de esta y no la imagen que debería, ya que se trata de firma electrónica avanzada, alguien tiene algún problema como este, Saludos. atte.

]]>
Por: JaK threepixels https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-15590 Mon, 12 Sep 2016 10:28:35 +0000 http://www.programandoamedianoche.com/?p=1063#comment-15590 Gràcias, se trata de uno de los ejemplos más potentes i breves que se pueden encontrar.
Me gustaria plantear una reflexión: objSHA1.Hash aunque pongas los mismos datos en el Stamper (incluso el mismo DateTime): el HASH __SIEMPRE__ sale distinto, dado el mismo PDF de origen.
¿ Cómo és esto ? ¿Se puede evitar de alguna manera? Lo pregunto por que seria interesante para hacer el SignMsg(objSHA1.Hash, Certificate, false); en diferido, en otro momento: cuando se pueda disponer del certificado en targeta.

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-15538 Thu, 02 Jun 2016 17:15:45 +0000 http://www.programandoamedianoche.com/?p=1063#comment-15538 En respuesta a David.

Hola David.
En esta página tenés un ejemplo de cómo firmar con PDF con SHA256: iTextSharp – Frequently asked questions – Part 2.
Suerte!

]]>
Por: David https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-15536 Wed, 01 Jun 2016 21:07:19 +0000 http://www.programandoamedianoche.com/?p=1063#comment-15536 Saludos Gustavo, con esta libreria se puede firmar utilizando sha256? saludos

]]>
Por: FRANCO CASTILLO https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-15408 Mon, 29 Jun 2015 23:10:09 +0000 http://www.programandoamedianoche.com/?p=1063#comment-15408 Estimado Gustavo Cantero (The Wolf), en el ejemplo de firma de documentos PDF, utilizas la versión ItextSharp 4.1, algunos métodos de allí, ya no están presentes en la versión 5.5, tendrás alguna actualización de tu ejemplo con la versión ItextSharp 5.5???

]]>
Por: Jesus Ascama https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-15403 Mon, 22 Jun 2015 17:22:08 +0000 http://www.programandoamedianoche.com/?p=1063#comment-15403 Como hago para cambiar el user? donde puedo modificarlo

]]>
Por: Jesus Ascama https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-15402 Mon, 22 Jun 2015 16:02:13 +0000 http://www.programandoamedianoche.com/?p=1063#comment-15402 Como puedo cambiar en la firma que aparezca una imagen y los datos que salen en ingles cambiarlos a español …

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-15201 Wed, 28 May 2014 16:25:31 +0000 http://www.programandoamedianoche.com/?p=1063#comment-15201 En respuesta a paulmago.

Gracias a vos por compartir tu código.
Saludos!

]]>
Por: paulmago https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-15200 Wed, 28 May 2014 16:22:37 +0000 http://www.programandoamedianoche.com/?p=1063#comment-15200 En respuesta a Gustavo Cantero (The Wolf).

Muchas Gracias Gustavo, justamente ayer buscando un poco mas encontre en los libros que pusiste en alguna respuesta el como hacerlo, asi como lo mencionas, cambie el layer2text por el texto que deseaba, mi detalle era que el certificado tenia dos valores en el campo CN, por lo tanto agarraba el ultimo, el cual no pertenecia al nombre del que certificaba, si no a un grupo o una descripcion, modifique el codigo y lo comparto por si alguien mas tiene este pequeño detalle:

objSA.Render = PdfSignatureAppearance.SignatureRender.Description;
ArrayList subjectsName = PdfPKCS7.GetSubjectFields(objChain[0]).GetFieldArray("CN");
objSA.Layer2Text  = "Firmado Digitalmente por: " + subjectsName[1].ToString()+"\n\r"+ DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

Muchas Gracias por tu ayuda Gustavo, Saludos!

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-15199 Wed, 28 May 2014 13:09:04 +0000 http://www.programandoamedianoche.com/?p=1063#comment-15199 En respuesta a paulmago.

Para cambiar el texto “Digitally Signed by” por uno personalizado necesitás establecer un valor en la propiedad Layer2Text de la clase PdfSignatureAppearance. Esta clase es la encargada de definir el formato de cómo se verá la firma en el PDF.
Por ejemplo, si quiero que no aparezca el nombre del certificado a la izquierda de la firma, ni el detalle del certicado, pero quiero que diga «Firmado digitalmente por Gustavo Cantero» y que de fondo tenga el logo de Scientia, debería reemplazar la linea 42 por estas:

objSA.Layer2Text = "Firmado digitalmente por Gustavo Cantero";
objSA.SignatureGraphic = Image.GetInstance("logo.jpg");
objSA.Render = PdfSignatureAppearance.SignatureRender.Description;

Suerte!

]]>
Por: paulmago https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-15198 Tue, 27 May 2014 23:12:40 +0000 http://www.programandoamedianoche.com/?p=1063#comment-15198 Hola Gustavo, excelente codigo que pusiste en tu blog, me ayudo bastante, solo me queda una duda, en la firma digital que se estampa en el PDF, viene la leyenda, «Digitally Signed by» y el nombre del certificado, como es que puedo cambiar esta linea, ya que he estado intentando cambiarla en la siguiente linea:

//objSignature.Name = PdfPKCS7.GetSubjectFields(objChain[0]).GetField("CN");   -----esta es la linea original y las de abajo es la linea que quiero que cambie
ArrayList subjectsName = PdfPKCS7.GetSubjectFields(objChain[0]).GetFieldArray("CN");
objSignature.Name = subjectsName[1].ToString();

obteniendo asi, el segundo nombre de mi certificado, y de paso querer cambiar la leyenda a español, espero puedas ayudarme, de antemano muchas muchas gracias

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14880 Thu, 13 Mar 2014 14:39:32 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14880 En respuesta a Eduardo.

Hola, Eduardo.
¿Puede ser que al crear el PFX le hayas puesto una contraseña? Si es así deberías agregarla en el constructor de la clase «X509Certificate2», algo así:

X509Certificate2 objCert = new X509Certificate2(@"C:\certificado\Eduardo.pfx", "miContraseña");

Suerte!

]]>
Por: Eduardo https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14879 Thu, 13 Mar 2014 08:17:12 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14879 Hola Gustavo:
De nuevo yo por acá, trabaje según uno de los comentarios una parte del código donde sustituyes el certificado que agrega por default la aplicación, por uno creado por mí mismo en la aplicación nativa de Windows 8, logre crear un archivo PFX he hice referencia a este certificado…el error que me manda es que la contraseña no corresponde, me gustaría saber si me puedes ayudar con este detalle, sustituí

X509Store objStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
objStore.Open(OpenFlags.ReadOnly);
X509Certificate2 objCert = null;
if (objStore.Certificates != null)
    foreach (X509Certificate2 objCertTemp in objStore.Certificates)
        if (objCertTemp.HasPrivateKey)
        {
            objCert = objCertTemp;
            break;
        }

Por

X509Certificate2 objCert = new X509Certificate2(@"C:\certificado\Eduardo.pfx");

Algún detalle se me esta escapando si me puedes ayudar te lo agradecería mucho
…gracias de antemano

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14874 Tue, 11 Mar 2014 13:22:09 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14874 En respuesta a Eduardo.

Hola, Eduardo.
El ejemplo que dejé funciona. Lamentablemente no tengo otro ejemplo en VB, pero leyendo este de C# lo podés reescribir, es muy parecido, sólo tenés que cambiar algunos detalles propios de la sintaxis.
Saludos.

]]>
Por: Eduardo https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14872 Tue, 11 Mar 2014 09:38:20 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14872 Hola gustavo:
deseo ver si quedo concretado sin detalles tu proyecto de firmar un documento…veo que el ejemplo esta hecho en C#, cabra la posibilidad de que lo tengas en VB deseo estudiarlo a fondo para poder aplicar la firma a los documentos pdf…de antemano muchas gracias

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14833 Fri, 28 Feb 2014 20:42:29 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14833 En respuesta a Leonardo.

Hola, Leonardo, gracias por los elogios.
Te comento que en este libro en línea «Digital Signatures for PDF documents«, desde la página 124, se explica cómo hacer lo que necesitás.
Suerte!

]]>
Por: Leonardo https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14831 Fri, 28 Feb 2014 19:51:47 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14831 perdón, no aclaré… tengo que desarrollar un método en c# que recibe un pdf (path), abre el archivo y extrae los datos del certificado con que fue firmado para realizar algunas verificaciones… Gracias!!!

]]>
Por: Leonardo https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14830 Fri, 28 Feb 2014 19:47:40 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14830 Gustavo, excelente blog, necesito saber como extraer los datos del certificado de un pdf firmado (nombre, vencimiento, nro de serie, etc) sabés de algún ejemplo o tutorial sobre esto? desde ya gracias!

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14775 Fri, 07 Feb 2014 14:00:25 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14775 En respuesta a sanventru.

Muchas gracias!

]]>
Por: sanventru https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14772 Thu, 06 Feb 2014 18:34:48 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14772 Para los que necesiten utilizar un versión de itextsharp superior ejemplo 5.3 a continuación les dejo el código:

X509Store store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(store.Certificates, null, null, X509SelectionFlag.SingleSelection);

X509Certificate2 cert = sel[0];

Org.BouncyCastle.X509.X509CertificateParser cp = new Org.BouncyCastle.X509.X509CertificateParser();
Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[] {
cp.ReadCertificate(cert.RawData)};

IExternalSignature externalSignature = new X509Certificate2Signature(cert, "SHA-1");

PdfReader pdfReader = new PdfReader(pathToBasePdf);

signedPdf = new FileStream(pathToBasePdf, FileMode.Create);

pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '');
PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;

signatureAppearance.SignatureGraphic = Image.GetInstance(pathToSignatureImage);
signatureAppearance.SetVisibleSignature(new Rectangle(100, 100, 250, 150), pdfReader.NumberOfPages, "Signature");
signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION;

MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS);
]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14708 Wed, 08 Jan 2014 12:59:23 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14708 En respuesta a Yeison.

Si no tienes conocimientos de certificados ni firmas antes deberías leer estos artículos:

Ahí se explican los conceptos básicos, cómo crear los certificados de prueba (con clave privada), etc.
Suerte!

]]>
Por: Yeison https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14705 Tue, 07 Jan 2014 22:10:10 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14705 Hola Gustavo, necesito firmar un pdf con una firma digital pero no poseo ningún conocimiento sobre este tema, descargue la aplicación con el código de ejemplo que ud subio pero siempre me sales el siguiente error «No posee certificados personal con clave privada», por favor me puede decir como genero un certificado con clave privada o algún enlace donde pueda encontrar información al respecto. Muchas gracias.

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14578 Tue, 12 Nov 2013 19:52:58 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14578 En respuesta a tom.

Es raro el error. ¿Probaste bajando los fuentes o escribiste el código?
Si hiciste lo primero no debería darte error (lo probé antes de subirlo), si hiciste lo segundo te pido que nos pases el código para poder verlo.
Saludos.

]]>
Por: tom https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14553 Sun, 03 Nov 2013 03:13:37 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14553 En respuesta a Gustavo Cantero (The Wolf).

tengo un problema con la parte:

 while ((intRead = objStream.Read(bytBuffer, 0, 8192)) > 0)

me dice q el 8192 esta fuera de la instancia

podrian ayudarme

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14543 Fri, 11 Oct 2013 14:54:31 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14543 En respuesta a Juan Pablo.

Hola, Juan Pablo.
La verdad es que «creo» (puede ser que me equivoque) que no se puede.
Me parece que para esto lo mejor sería que configures la aplicación web para que se ejecute como un usuario de Window (Suplantación de ASP.NET) y que instales el certificado en el repositorio personal de ese usuario.
Suerte!

]]>
Por: Juan Pablo https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14542 Fri, 11 Oct 2013 13:57:57 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14542 En respuesta a Gustavo Cantero (The Wolf).

Muchas Gracias por las respuestas Gustavo, te hago una pregunta mas por un tema que no estoy encontrando como resolver. Es factible instalar un certificado en el repositorio de Windows con seguridad alta y luego, desde el código, obtenerlo y utilizarlo para firmar un PDF pasándole el PIN de seguridad por código. Actualmente cuando instalo un certificado de esta manera me abre una ventana de Windows para que ingrese el PIN de seguridad pero mi aplicación es web con lo cual tengo que evitar esta ventana.
Muchas Gracias!

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14523 Mon, 16 Sep 2013 13:25:02 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14523 En respuesta a Juan Pablo.

Hola, Juan Pablo.
En el ejemplo que subimos no te pide la contraseña del certificado porque buscamos el primer certificado que tenga clave privada y que esté en el repositorio del usuario, por lo cual, el sistema operativo me lo da sin necesidad de claves.
Distinto sería el caso si utilizas, en lugar de un certificado «instalado», un archivo que contenga el certificado con su clave privada.
Para probar esto deberías reemplazar las siguientes lineas del archivo «Form1.cs»:

X509Store objStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
objStore.Open(OpenFlags.ReadOnly);
X509Certificate2 objCert = null;
if (objStore.Certificates != null)
    foreach (X509Certificate2 objCertTemp in objStore.Certificates)
        if (objCertTemp.HasPrivateKey)
        {
            objCert = objCertTemp;
            break;
        }

por esta linea

X509Certificate2 objCert = new X509Certificate2(@"C:\Path\archivo.pfx");

Suerte!

]]>
Por: Juan Pablo https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14520 Sun, 15 Sep 2013 15:05:50 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14520 Gustavo,
Antes que nada quería agradecerte por este post y los relacionados porque la verdad es un tema bastante complicado y cuesta encontrar información clara y concreta en Internet. Ejecute el código y anduvo perfectamente, pero me surgió una duda debido a mi falta de experiencia, al firmar el PDF en ningún momento hubo que ingresar la clave privada del certificado, ¿Esto es precisamente porque estamos levantando el primer certificado que contiene clave privada para firmar? ¿Hay alguna de evitar esta situación y obligar al usuario que ingrese la clave privada o contraseña al momento de utilizar el certificado para firmar?
Espero haber sido claro y muchas gracias!
Juan Pablo

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14512 Wed, 11 Sep 2013 12:48:49 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14512 En respuesta a Martin Patricio.

Muchas gracias por tus palabras, Martín, y disculpas por la demora en responder.
Te comento que para que una firma sea válida necesitás instalar el certificado de la entidad emisora dentro del repositorio «Trusted Root Certification Authorities». O sea, tu certificado debe estar firmado por otro certificado autofirmado de una entidad emisora. Los certificados de estas entidades, las más conocidas, ya vienen instaladas en tu Windows, por ejemplo, GoDaddy, SecureTrust, Microsoft, VeriSign, etc., pero si estás creando uno para probar deberías instalarlo en tu sistema operativo.
En el artículo Crear certificados de prueba para servidor y cliente explico cómo crear tu certificado paso por paso, incluyendo el de la entidad emisora.
También puede servirte el artículo
Conceptos de Certificado Digital y Firma Digital donde explico los conceptos básicos de los certificados y la firma digital.
Espero te sirva.
Suerte!

]]>
Por: dgomez https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14510 Wed, 11 Sep 2013 08:42:32 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14510 En respuesta a santiago.

Muchas gracias.
Santiago, me gustaría que me pasaras ese ejemplo.

Saludos.

]]>
Por: Martin Patricio https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14370 Tue, 13 Aug 2013 22:34:42 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14370 Excelente pagina, ya tiene mas de 3 años y veo que aun siguen retroalimentandose muchas personas Gustavo, y te lo digo asi como va TE LA FUMASTE CON ESTE ARTICULO (por no decir una groseria). Bueno ya utilice muchas cosas que comentas, pero tengo una duda grandisima ahora cuando abro el PDF firmado me manda este mensaje «HAY AL MENOS UNA FIRMA PRESENTA PROBLEMAS» y es por que la firma es desconocida de que forma podria validarla para que por lo menos en los equipos donde tengo instalado el certificado digital se valide correctamente, comentan de instalar algo como «Certificado Raiz» pero solo vi un ejemplo en la web de la casa de moneda de ESPAÑA!!! y yo soy de mexico.

Saludos!

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14339 Thu, 01 Aug 2013 19:09:46 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14339 En respuesta a santiago.

Me alegro que te sirviera, y muchas gracias por compartir lo que encontraste.
Suerte!

]]>
Por: santiago https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14338 Thu, 01 Aug 2013 16:23:12 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14338 En respuesta a santiago.

Me respondó, hay que poner en LA DEFINICIÓN DEL STAMPER línea esto: Dim objStamper As PdfStamper = PdfStamper.CreateSignature(objReader, New FileStream(Target, FileMode.Create), «», vbNull, True)

Adicional si quieren el código completo con elección del certificado desde el almacen de certificados o desde un archivo en disco en vb solo envíen un correo para responderles con el ejemplo.
Y nuevamente gracias por esta página es de muchisima utilidad.

]]>
Por: santiago https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14337 Thu, 01 Aug 2013 14:42:38 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14337 Muchas gracias por la publicación realmente me sirvió muchísimo, ya puedo firmar el pdf y funciona casi perfecto, el único problema que tengo y aún no puedo resolverlo es que al aplicarle una segunda firma, la primera se corrompe, a que se puede deber esto?

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14279 Wed, 26 Jun 2013 16:17:33 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14279 En respuesta a Luis.

Como primer paso podrías investigar la librería iText (http://itextpdf.com/itext.php) que es la original en Java desde la cual se portó a .NET para crear iTextSharp.
Por otro lado podrías ver esta página que explica cómo «consultar» los repositorios de certificados de Windows usando Java: Accessing MS Certificate Stores in Java.
Seguramente con la información de esas dos páginas podrás resolverlo.
Suerte!

]]>
Por: Juan Antonio Garcia Navalon https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14265 Thu, 20 Jun 2013 12:45:46 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14265 En respuesta a Juan Antonio Garcia Navalon.

Pues tampoco se ha quitado el error 2

Sigue teniendo los 2 errores

]]>
Por: Juan Antonio Garcia Navalon https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14264 Thu, 20 Jun 2013 12:21:37 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14264 En respuesta a Juan Antonio García Navalón.

objSA.CertificationLevel = PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED;

Con esa línea he quitado el error nº2
Sólo me queda lo del marcador EOL

A ver si alguien puede ayudarme

]]>
Por: Juan Antonio García Navalón https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14259 Wed, 19 Jun 2013 14:58:18 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14259 Bueno pues usando las librerias que tú usas me funciona CASI correctamente.
Incluso he puesto la línea siguiente para pasarle la ruta de un certificado y su password:

SysX509.X509Certificate2 Certificate = new SysX509.X509Certificate2(rutaCertificado, pass);

El problema que tengo es que si el original cumple el standard pdf/a-1b, al firmarlo pierde el standard dando los siguientes errores:

1-Problema de sintaxis: el objeto indirecto de palabra clave «obj» no va seguido de un marcador EOL

2-Fuente no incrustada

Y no sé como solucionar esto. Y es importante no romper el standar

Un saludo

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14257 Tue, 18 Jun 2013 17:11:16 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14257 En respuesta a Juan Antonio García.

Muchas gracias por tu aclaración, Juan.
Seguramente esto se deba a un tema por la versión de las librerías, ya que este artículo lo escribí hace 3 años y los fuentes que se pueden descargar de acá funcionan bien.
Suerte!

]]>
Por: Juan Antonio García https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14255 Tue, 18 Jun 2013 13:22:25 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14255 Con la nueva versión 5.4.2

Las siguientes líneas me dan error, que creo haber solucionado:

objSA.Render = PdfSignatureAppearance.SignatureRender.NameAndDescription;

Solucion:

objSA.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.NAME_AND_DESCRIPTION;
Stream objStream = objSA.RangeStream;

Solucion:

Stream objStream = objSA.GetRangeStream();

Pero estas otras no puedo arreglarlas:

objSA.SetCrypto(null, objChain, null, null);
objSignature.Name = PdfPKCS7.GetSubjectFields(objChain[0]).GetField("CN");
objSA.PreClose(objTable);

Quizás deberías crear una nueva entrada actualizada.
Gracias.

Saludos

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14231 Thu, 30 May 2013 18:29:21 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14231 En respuesta a Juan camilo cordoba.

En el código del formulario del ejemplo que podés descargar está este código:

X509Store objStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
objStore.Open(OpenFlags.ReadOnly);
X509Certificate2 objCert = null;
if (objStore.Certificates != null)
    foreach (X509Certificate2 objCertTemp in objStore.Certificates)
        if (objCertTemp.HasPrivateKey)
        {
            objCert = objCertTemp;
            break;
        }

Lo que esto hace es buscar el primer certificado instalado que posea clave privada, y ese certificado lo envía como parámetro al método que firma el PDF (PDF.SignHashed).
Para que el usuario pueda elegir el certificado a utilizar deberías reemplazar este código por otro que le muestre un diálogo para seleccionar el deseado. En esta página tenés un ejemplo de cómo hacer esta selección: Compatibilidad con certificados en las aplicaciones con .NET Framework 2.0.
Espero te sirva.
Suerte!

]]>
Por: juan camilo cordoba https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14230 Thu, 30 May 2013 14:33:44 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14230 Como hago para que me de la opcion de elegir el certificado a usar y que no lo tome automatico
gracias!!!!!

]]>
Por: Juan camilo cordoba https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-14229 Wed, 29 May 2013 21:42:36 +0000 http://www.programandoamedianoche.com/?p=1063#comment-14229 Hola quisiera saber que linea cambiar si quiero elegir el certificado y que no lo tome automaticamente

]]>
Por: Leonardo https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-13985 Fri, 01 Mar 2013 17:11:40 +0000 http://www.programandoamedianoche.com/?p=1063#comment-13985 En respuesta a Jorge.

Jorge, perdón por la molestia pero soy nuevo con el tema de firma digital… me podras pasar el codigo que implementas en tu interfaz web?
Necesito que los usuarios ingresen en la web y firmen un pdf que esta alojado en el servidor, luego se guarda el nuevo pdf firmado (uno por cada usuario por supuesto) tambien en el servidor.
Desde ya muchas gracias. leonardo_cwierz@yahoo.com.ar

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-13823 Thu, 13 Dec 2012 13:22:08 +0000 http://www.programandoamedianoche.com/?p=1063#comment-13823 En respuesta a Jorge.

La verdad es muy raro lo que te pasa. ¿Puede ser por la versión de PDF que usás que, tal vez, el iTextSharp no la soporte? ¿Estás usando la última versión de las librerías?
Saludos.

]]>
Por: Jorge https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-13810 Mon, 10 Dec 2012 23:15:09 +0000 http://www.programandoamedianoche.com/?p=1063#comment-13810 hola gustavo tengo una duda con respecto al codigo lo he agregado en una interfaz web y me va bien puedo firma documentos en la web y todo no hay problema, lo q si no entiendo es q cuando descargo el pdf de un reportview de c# al momento de firma el pdf se me borrar los datos del pdf, me firma el pdf pero me borra los datos, en primer instancia pense q no le estaba mandado el pdf que era, pero ya lo he probado enviardole el pdf directamente pero de igual forma me borra los datos. de antemano gracias por leer y espero q me puedas ayudar, agrego q los pdf q he firmado antes no me borra los datos.

]]>
Por: Jorge https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-13809 Mon, 10 Dec 2012 23:12:59 +0000 http://www.programandoamedianoche.com/?p=1063#comment-13809 hola gustavao tengo una duda con respecto al codigo lo he agregado en una interfaz web y me va bien puedo firma documentos en la web y todo no hay problema, lo q si no entiendo es q cuando descargo el pdf de un reportview de c# al momento de firma el pdf se me borrar los datos del pdf, me firma el pdf pero me borra los datos, en primer instancia pense q lo le estaba mandado el pdf q era pero ya lo he probado enviardole el pdf directamente pero de igual forma me borra los datos. de antemano gracias por leer y espero q me puedas ayudar

]]>
Por: Luis https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-11189 Fri, 19 Oct 2012 01:37:46 +0000 http://www.programandoamedianoche.com/?p=1063#comment-11189 Hola Gustavo, ante que nada bajé tu código lo probé y anda barbaro. Tengo que desarrollar lo mismo en Java pero después de buscar y leer hace rato ya no consigo hacer lo mismo que en el ejemplo de C#.
Necesito firmar con un certificado que está en el repositorio de windows, en donde al igual que tu ejemplo, me pida la password del mismo para firmar.
Sabes de algún lugar como para investigar? busque en google pero no consigo dar con lo que necesito.
Mil gracias!!
Luis

]]>
Por: giancarlo https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-9796 Tue, 21 Aug 2012 00:57:53 +0000 http://www.programandoamedianoche.com/?p=1063#comment-9796 Conoces alguna libreria que firme y verifique con el Formato CAdES, XAdES y PAdES?? o como se haria con las librerias del .Net Framework, tienes ejemplo, informacion de los estandares?

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-8578 Thu, 28 Jun 2012 16:14:15 +0000 http://www.programandoamedianoche.com/?p=1063#comment-8578 En respuesta a Genaro Rico.

En esta página te explica cómo hacerlo: Cómo: Firmar documentos XML con firmas digitales.
Suerte!

]]>
Por: Genaro Rico https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-8571 Thu, 28 Jun 2012 12:36:24 +0000 http://www.programandoamedianoche.com/?p=1063#comment-8571 Hola su código esta muy bueno sale un error en certificado pero es de trabajarlo para ver como lo soluciono, pregunto como se aplicaría este código a firmar un XML, si es posible, saludos gracias

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-6002 Tue, 28 Feb 2012 12:17:27 +0000 http://www.programandoamedianoche.com/?p=1063#comment-6002 En respuesta a danilo.

Danilo, el problema es que los archivos .cer no poseen la clave privada del certificado.
Saludos.

]]>
Por: danilo https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-5995 Tue, 28 Feb 2012 03:11:41 +0000 http://www.programandoamedianoche.com/?p=1063#comment-5995 Hola, Tengo problemas al firmar un PDF echo con ItextSharp y VB.
me entregaron un certificado Digital y lo instalaron en el servidor.
primero no se si con el .cer puedo firmar. segundo me dicen que no le colocaron clave para que pueda firmar cualquier documento. pero
en el codigo arriba expuesto por uno de ustedes, al probarlo me sale error «la clave no exite»
Basicamente lo que estoy haciendo es mandando el archivo origen que cree con ItextSharp y lo paso por el codigo asi:

Public Shared Sub SignHashed(ByVal Source As String, ByVal Target As String, ByVal Certificate As SysX509.X509Certificate2, ByVal Reason As String, ByVal Location As String, ByVal AddVisibleSign As Boolean)
        Dim objCP As New X509CertificateParser()
        'NOTA PRUEBAS de X509Certificate (ambiguo “Org.BouncyCastle.X509.X509Certificate()= X509Certificate()”)
        Dim objChain As Org.BouncyCastle.X509.X509Certificate() = New Org.BouncyCastle.X509.X509Certificate() {objCP.ReadCertificate(Certificate.RawData)}

        Dim objReader As New PdfReader(Source)
        Dim objStamper As PdfStamper = PdfStamper.CreateSignature(objReader, New FileStream(Target, FileMode.Create), ControlChars.NullChar)
        Dim objSA As PdfSignatureAppearance = objStamper.SignatureAppearance

        If AddVisibleSign Then
            objSA.SetVisibleSignature(New Rectangle(100, 100, 300, 200), 1, Nothing)
        End If

        objSA.SignDate = DateTime.Now
        objSA.SetCrypto(Nothing, objChain, Nothing, Nothing)
        objSA.Reason = Reason
        objSA.Location = Location
        objSA.Acro6Layers = True
        objSA.Render = PdfSignatureAppearance.SignatureRender.NameAndDescription
        Dim objSignature As New PdfSignature(PdfName.ADOBE_PPKMS, PdfName.ADBE_PKCS7_SHA1)
        objSignature.[Date] = New PdfDate(objSA.SignDate)
        objSignature.Name = PdfPKCS7.GetSubjectFields(objChain(0)).GetField("CN")
        If objSA.Reason IsNot Nothing Then
            objSignature.Reason = objSA.Reason
        End If
        If objSA.Location IsNot Nothing Then
            objSignature.Location = objSA.Location
        End If
        objSA.CryptoDictionary = objSignature
        Dim intCSize As Integer = 4000

        'Dim objTable As New Hashtable()
        Dim objTable As New Dictionary(Of PdfName, Integer)
        objTable(PdfName.CONTENTS) = intCSize * 2 + 2
        objSA.PreClose(objTable)

        Dim objSHA1 As HashAlgorithm = New SHA1CryptoServiceProvider()

        Dim objStream As Stream = objSA.RangeStream
        Dim intRead As Integer = 0
        Dim bytBuffer As Byte() = New Byte(8191) {}
        While (InlineAssignHelper(intRead, objStream.Read(bytBuffer, 0, 8192))) > 0
            objSHA1.TransformBlock(bytBuffer, 0, intRead, bytBuffer, 0)
        End While
        objSHA1.TransformFinalBlock(bytBuffer, 0, 0)

        Dim bytPK As Byte() = SignMsg(objSHA1.Hash, Certificate, False)
        Dim bytOut As Byte() = New Byte(intCSize - 1) {}

        Dim objDict As New PdfDictionary()

        Array.Copy(bytPK, 0, bytOut, 0, bytPK.Length)

        objDict.Put(PdfName.CONTENTS, New PdfString(bytOut).SetHexWriting(True))
        objSA.Close(objDict)
    End Sub

Private Shared Function SignMsg(ByVal Message As Byte(), ByVal SignerCertificate As SysX509.X509Certificate2, ByVal Detached As Boolean) As Byte()
        'Creamos el contenedor

        Dim contentInfo As ContentInfo = New ContentInfo(Message)
        'Dim contentInfo As New ContentInfo(Message)
        'Instanciamos el objeto SignedCms con el contenedor
        Dim objSignedCms As New SignedCms(contentInfo, Detached)
        'Creamos el “firmante”
        Dim objCmsSigner As New CmsSigner(SignerCertificate)
        ' Include the following line if the top certificate in the
        ' smartcard is not in the trusted list.
        objCmsSigner.IncludeOption = SysX509.X509IncludeOption.EndCertOnly
        ' Sign the CMS/PKCS #7 message. The second argument is
        ' needed to ask for the pin.
        objSignedCms.ComputeSignature(objCmsSigner, True) ' False)
''''en este punto es donde me sale que la clave no existe!



        'Encodeamos el mensaje CMS/PKCS #7
        Return objSignedCms.Encode()
    End Function

alguien que me ayude.

Gracias

]]>
Por: Maverifk https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-5877 Wed, 22 Feb 2012 10:52:59 +0000 http://www.programandoamedianoche.com/?p=1063#comment-5877 Hola Gustavo.
Interesante código, por lo menos encontramos algo más que lo «documentado» por iText para su funcionalidad.
Una pregunta, ¿como podría usar este certificado en un proceso de encriptación?
¡Gracias! y perdona las molestias

]]>
Por: Jaime https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-1747 Mon, 12 Sep 2011 22:36:34 +0000 http://www.programandoamedianoche.com/?p=1063#comment-1747 Supongo que lo habréis solucionado, pero lo de que en la web no os funcione, fijo que es por el usuario que está ejecutando el contexto de seguridad de la aplicación ( AppPool ). Para utilizarlo, deberéis instalar el certificado en el MYCOMPUTER desde certMngr.msc . Si necesitáis algo, podéis localizarme en jcastello@gmail.com.

]]>
Por: Alberto Dolmann https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-1231 Thu, 30 Jun 2011 13:19:16 +0000 http://www.programandoamedianoche.com/?p=1063#comment-1231 Buenas, queria saber si puedo encontrar algun enlace ? que me permita solucionar el mismo problema que tiene Alberto Pérez, de firmar un documento desde una aplicación Web. Estoy con la opcion 1 («La clave no existe»). Muchas Gracias

]]>
Por: Roberto https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-1219 Mon, 27 Jun 2011 16:32:50 +0000 http://www.programandoamedianoche.com/?p=1063#comment-1219 Sobre el error en preclose os dejo el codigo en c#

Dictionary objTable = new Dictionary() ;

debereis incluir el using
using System.Collections.Generic;

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-281 Fri, 18 Mar 2011 19:14:05 +0000 http://www.programandoamedianoche.com/?p=1063#comment-281 En respuesta a Fábio Freitas.

Hola, Fabio.
El problema que te da sobre «The current session is not interactive» seguramente sea porque estás intentando abrir el diálogo de selección de certificado del lado del servidor, lo cual no se puede. Si necesitas hacer que el usuario pueda firmar un documento utilizando una aplicación web lo mejor (si no es la única manera) es hacerlo a través de un control COM (con C++ o el viejo Visual Basic 6) ya que sino no vas a poder acceder al repositorio de certificados del cliente. Otra opción es utilizando Silverlight, con el cual aunque no puedas acceder al repositorio (a no ser que sea una aplicación out-of-browser) podés hacer que el usuario elija un archivo donde tiene su certificado y con eso firmarlo del lado del cliente (nosotro hemos hecho un proyecto así).
Sobre la selección del certificado para el acceso a un servicio web: esto lo podés hacer configurando el IIS. En esta página te explica un poco mejor cómo hacerlo con IIS 7: Configurar la autenticación de asignaciones de certificado de cliente (IIS 7).
Saludos.

]]>
Por: Fábio Freitas https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-280 Fri, 18 Mar 2011 19:01:43 +0000 http://www.programandoamedianoche.com/?p=1063#comment-280 Hola Gustavo,

En primer lugar enhorabuena por tu artículo.

Me pregunto si podemos abrir la pantalla para seleccionar un certificado digital en una aplicación web, de modo que firma un archivo XML y el acceso a un servicio Web?

Traté de alguna manera y cuando llegué a más regalos de error siguiente:

The current session is not interactive

Le doy las gracias,

Abrazos

]]>
Por: willi https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-227 Thu, 28 Oct 2010 00:40:03 +0000 http://www.programandoamedianoche.com/?p=1063#comment-227 Hola Tengo el siguiente mensaje de error, alguien podria ayudarme…!!!!!

  Dim intCSize As Integer = 4000
  Dim exc As New Dictionary(Of PdfName, Integer)()
  exc(PdfName.CONTENTS) = intCSize * 2 + 2
  sap.PreClose(exc)

Se cae en la ultima linea PreClose!!!

—————————
prySignDig
—————————
ERROR: System.NullReferenceException: Referencia a objeto no establecida como instancia de un objeto.

en iTextSharp.text.pdf.PdfPKCS7.GetSubjectFields(X509Certificate cert)

en iTextSharp.text.pdf.PdfSignatureAppearance.GetAppearance()

en iTextSharp.text.pdf.PdfSignatureAppearance.PreClose(Dictionary`2 exclusionSizes)

en prySignDig.frmSignDig02.btnPrueba_Click(Object sender, EventArgs e) en D:\prySignDig08\prySignDig\frmSignDig02.vb:línea 102

]]>
Por: karina https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-223 Thu, 21 Oct 2010 23:06:34 +0000 http://www.programandoamedianoche.com/?p=1063#comment-223 disculpa si solo kiero leer la firma desde un windows form
no sabrias como poder hacerle?
en un crystal report

]]>
Por: Alberto Pérez https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-221 Fri, 15 Oct 2010 10:21:52 +0000 http://www.programandoamedianoche.com/?p=1063#comment-221 Hola Gustavo,
despues de un tiempo continúo trabajando el tema de la firma digital de pdf.
Me dicen que no es posible lo que quiero hacer.
Mi idea:
Tener un pdf en el servidor web > El usuario lo selecciona > Clica el botón de firmar > Selecciona su certificado digital > y OK > El pdf firmado se queda en el servidor.
Pues me dicen que no es posible firmar en el servidor con un certificado de cliente ya que la clave privada no puede viajar. Eso es cierto? Alguien tiene alguna idea de como podría hacerlo? o una aplicación WEB que haga esto.
Yo buscaba algo parecido a lo que realiza Portasigma.com (firma online)

]]>
Por: Miguel https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-208 Fri, 17 Sep 2010 11:46:52 +0000 http://www.programandoamedianoche.com/?p=1063#comment-208 Hola.
Estoy desarrollando un proyecto en el cual añado una imagen y un texto a cada hoja del PDF. Éste viene firmado.

Para escribir en cada página, lo que hago básicamente es recorrer página a página, e ir creando nuevas páginas en un nuevo archivo e insertado el «contexto» (es decir, el contenido original) más lo que añado.

El caso es que la 1º página viene firmada, y no se como extaer la firma (que quedaría invalida, pero me sirve) y colocarla en la 1º página del nuevo archivo)

Alguna pista??

Gracias y un saludo

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-204 Tue, 10 Aug 2010 14:01:27 +0000 http://www.programandoamedianoche.com/?p=1063#comment-204 En respuesta a Juan.

El proyecto de ejemplo tiene la misma clase que muestro en este artículo, pero tiene una ventana para ingresar el PDF a firmar y poder probar más rápido esta clase.
Cualquier otra consulta no dudes en escribirla aquí.
Suerte!

]]>
Por: Juan https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-203 Tue, 10 Aug 2010 08:04:32 +0000 http://www.programandoamedianoche.com/?p=1063#comment-203 Gracias gustavo, ando buscando una manera para firmar pdf’s yme ha parecido simple…voy a probarlo…¿El ejemplo valido es el que has puesto para descargar?….

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-202 Mon, 09 Aug 2010 19:03:18 +0000 http://www.programandoamedianoche.com/?p=1063#comment-202 En respuesta a Juan.

El proyecto está hecho en Visual Studio 2008 con C#, pero se podría pasar facilmente a un proyecto de Visual Basic.NET con Visual Studio 2005.
Podrías probar con esta herramienta para migrar código C# a VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb.
Cualquier consulta no dudes en escribirla aquí.
Suerte!

]]>
Por: Juan https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-201 Mon, 09 Aug 2010 18:17:20 +0000 http://www.programandoamedianoche.com/?p=1063#comment-201 ¿Estos ejejmplos corren con Vb2005?

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-200 Fri, 06 Aug 2010 12:38:05 +0000 http://www.programandoamedianoche.com/?p=1063#comment-200 En respuesta a Alberto Pérez.

Hola, Alberto. Si, como dices, no puedes utilizar la interfaz desde una aplicación web.
Sobre el punto 1, seguramente el problema sea que el certificado a utilizar lo tienes instalado en un repositorio de usario, por lo tanto, cuando la aplicación se ejecuta en producción no lo encuentra. Prueba instalando tu certificado (con la clave privada) en un repositorio de la máquina (no de usuario) en el servidor utilizando la herramienta «certmgr». En este artículo muestro un ejemplo de cómo hacerlo: Crear certificados de prueba para servidor y cliente.
Suerte!

]]>
Por: Alberto Pérez https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-199 Fri, 06 Aug 2010 11:21:59 +0000 http://www.programandoamedianoche.com/?p=1063#comment-199 Hola Gustavo y compañía.
He visto que has dejado un proyecto para descargar y probar (funciona perfectamente) y creo que he encontrado el porque de uno de los dos errores que me dan.
El error (OPCION 2) que comento anteriormente se debe a que está utilizando X509Certificate2UI que solo se puede utilizar en una aplicación interactiva, como aplicaciones de WINDOWS FORMS.
Esta funcion muestra la interfaz de usuario cuadros de dialogo que le permiten seleccionar y ver los certificados X.509.
Esto no puede ser utilizado en APLICACIONES WEB asp.net (que es lo que estoy creando)
Ahora solo me queda la opción 1, guardar la clave y poder usarla.. si alguien sabe como ¿?

]]>
Por: Alberto Pérez https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-198 Fri, 06 Aug 2010 09:17:35 +0000 http://www.programandoamedianoche.com/?p=1063#comment-198 Primero Hola JuanFran, yo el tema de «System.Collections.Hashtable»/»System.Collections.Generic.Dictionary» lo he «solucionado (a mi me funciona)» modificando el código.
Te lo dejo en VB.net que es lo que uso:

       'Dim objTable As New Hashtable()
        Dim objTable As New Dictionary(Of PdfName, Integer)
        objTable(PdfName.CONTENTS) = intCSize * 2 + 2
        objSA.PreClose(objTable)

———————————————–
Hola Gustavo, estoy retomando el proyecto despues de unas vacacione si aún me encuentro algun problema, a ver si puedes ayudarme o cualquiera que pueda echarme una mano.

– Cuando estoy en desarrollo, el proyecto funciona bien (firma el pdf), pero cuando intento publicarlo en el servidor IIS me da algun fallo.
1-. (OPCION 1)Si publico el proyecto en un directorio virtual que SI requiere canal seguro SSL, a la hora de firmar el documento PDF me da el siguiente error:
«La clave no existe»
2-. (OPCION 2) Si publico el proyecto en un directorio virtual que NO requiere canal seguro SSL, al intentar acceder a la función GetCertificate me da el siguiente error:
«The current session is not interactive»

Os dejo el código en VB.net que estoy usando a ver si alguien da con la solución:

Imports System.Collections
Imports System.IO
Imports System.Security.Cryptography
Imports System.Security.Cryptography.Pkcs
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports Org.BouncyCastle.X509
Imports SysX509 = System.Security.Cryptography.X509Certificates

Imports System.Security
Imports System.Security.Cryptography.X509Certificates
Imports System.Security.Cryptography.X509Certificates.X509Certificate2

''' 
''' Helper para el firmado de PDFs con la librería iTextSharp
''' 
''' 
Partial Class FirmaDigital02
    Inherits System.Web.UI.Page

    Protected Sub btnSignDigital_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSignDigital.Click
        Try
            ''OPCIÓN 1: DIRECTORIO VIRTUAL IIS con SSL (requerir canal seguro)
            Dim objCertHttp As HttpClientCertificate
            objCertHttp = Request.ClientCertificate
            Dim certificate As X509Certificate2
            certificate = New System.Security.Cryptography.X509Certificates.X509Certificate2(objCertHttp.Certificate)
            'certificate = New SysX509.X509Certificate2(objCertHttp.Certificate)
 
            ''OPCIÓN 2: VENTANA SELECCIÓN CERTIFICADO
            'Dim certificate As X509Certificate2 = GetCertificate()

            Dim source As String = "C:\Inetpub\wwwroot\TestVB\documents\signats\PruebaSignatura.pdf"
            Dim target As String = "C:\Inetpub\wwwroot\TestVB\documents\signats\PruebaSignatura_hashed2.pdf"
            SignDigital.SignHashed(source, target, certificate, "Razón", "Localización", True)
            lblSignaPDF.Text = "Finalitzat correctament. Comprobar signa"
        Catch ex As Exception
            lblSignaPDF.Text = lblSignaPDF.Text & "Descripció error: " & ex.Message
        End Try
    End Sub



    Public Shared Function GetCertificate() As X509Certificate2
        Dim st As New X509Store(StoreName.My, StoreLocation.CurrentUser)

        st.Open(OpenFlags.[ReadOnly])
        Dim col As X509Certificate2Collection = st.Certificates
        Dim card As X509Certificate2 = Nothing

        Dim sel As X509Certificate2Collection = X509Certificate2UI.SelectFromCollection(col, "Certificates", "Seleccioni un certificat per a signar", X509SelectionFlag.SingleSelection)
        If sel.Count > 0 Then
            Dim en As X509Certificate2Enumerator = sel.GetEnumerator()
            en.MoveNext()
            card = en.Current
        End If
        st.Close()
        Return card
    End Function

    'Private Sub New()
    'End Sub
    ''' 
    ''' Firma un documento
    ''' 
    ''' Documento origen
    ''' Documento destino
    ''' Certificado a utilizar
    ''' Razón de la firma
    ''' Ubicación
    ''' Establece si hay que agregar la firma visible al documento
    Public Shared Sub SignHashed(ByVal Source As String, ByVal Target As String, ByVal Certificate As SysX509.X509Certificate2, ByVal Reason As String, ByVal Location As String, ByVal AddVisibleSign As Boolean)
        Dim objCP As New X509CertificateParser()
        'NOTA PRUEBAS de X509Certificate (ambiguo "Org.BouncyCastle.X509.X509Certificate()= X509Certificate()")
        Dim objChain As Org.BouncyCastle.X509.X509Certificate() = New Org.BouncyCastle.X509.X509Certificate() {objCP.ReadCertificate(Certificate.RawData)}

        Dim objReader As New PdfReader(Source)
        Dim objStamper As PdfStamper = PdfStamper.CreateSignature(objReader, New FileStream(Target, FileMode.Create), ControlChars.NullChar)
        Dim objSA As PdfSignatureAppearance = objStamper.SignatureAppearance

        If AddVisibleSign Then
            objSA.SetVisibleSignature(New Rectangle(100, 100, 300, 200), 1, Nothing)
        End If

        objSA.SignDate = DateTime.Now
        objSA.SetCrypto(Nothing, objChain, Nothing, Nothing)
        objSA.Reason = Reason
        objSA.Location = Location
        objSA.Acro6Layers = True
        objSA.Render = PdfSignatureAppearance.SignatureRender.NameAndDescription
        Dim objSignature As New PdfSignature(PdfName.ADOBE_PPKMS, PdfName.ADBE_PKCS7_SHA1)
        objSignature.[Date] = New PdfDate(objSA.SignDate)
        objSignature.Name = PdfPKCS7.GetSubjectFields(objChain(0)).GetField("CN")
        If objSA.Reason IsNot Nothing Then
            objSignature.Reason = objSA.Reason
        End If
        If objSA.Location IsNot Nothing Then
            objSignature.Location = objSA.Location
        End If
        objSA.CryptoDictionary = objSignature
        Dim intCSize As Integer = 4000

        'Dim objTable As New Hashtable()
        Dim objTable As New Dictionary(Of PdfName, Integer)
        objTable(PdfName.CONTENTS) = intCSize * 2 + 2
        objSA.PreClose(objTable)

        Dim objSHA1 As HashAlgorithm = New SHA1CryptoServiceProvider()

        Dim objStream As Stream = objSA.RangeStream
        Dim intRead As Integer = 0
        Dim bytBuffer As Byte() = New Byte(8191) {}
        While (InlineAssignHelper(intRead, objStream.Read(bytBuffer, 0, 8192))) > 0
            objSHA1.TransformBlock(bytBuffer, 0, intRead, bytBuffer, 0)
        End While
        objSHA1.TransformFinalBlock(bytBuffer, 0, 0)

        Dim bytPK As Byte() = SignMsg(objSHA1.Hash, Certificate, False)
        Dim bytOut As Byte() = New Byte(intCSize - 1) {}

        Dim objDict As New PdfDictionary()

        Array.Copy(bytPK, 0, bytOut, 0, bytPK.Length)

        objDict.Put(PdfName.CONTENTS, New PdfString(bytOut).SetHexWriting(True))
        objSA.Close(objDict)
    End Sub

    ''' 
    ''' Crea la firma CMS/PKCS #7
    ''' 
    Private Shared Function SignMsg(ByVal Message As Byte(), ByVal SignerCertificate As SysX509.X509Certificate2, ByVal Detached As Boolean) As Byte()
        'Creamos el contenedor
        Dim contentInfo As New ContentInfo(Message)
        'Instanciamos el objeto SignedCms con el contenedor
        Dim objSignedCms As New SignedCms(contentInfo, Detached)
        'Creamos el "firmante"
        Dim objCmsSigner As New CmsSigner(SignerCertificate)
        ' Include the following line if the top certificate in the
        ' smartcard is not in the trusted list.
        objCmsSigner.IncludeOption = SysX509.X509IncludeOption.EndCertOnly
        '  Sign the CMS/PKCS #7 message. The second argument is
        '  needed to ask for the pin.
        objSignedCms.ComputeSignature(objCmsSigner, False)
        'Encodeamos el mensaje CMS/PKCS #7
        Return objSignedCms.Encode()
    End Function

    Private Shared Function InlineAssignHelper(Of T)(ByRef target As T, ByVal value As T) As T
        target = value
        Return value
    End Function
End Class
]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-196 Mon, 02 Aug 2010 13:26:12 +0000 http://www.programandoamedianoche.com/?p=1063#comment-196 En respuesta a Juan Fran.

Juan, muchas gracias por tus palabras.
Sobre el proyecto, puede ser que tengas una versión distinta del iTextSharp. Acabo de subir en este mismo artículo un proyecto de ejemplo funcionando para que lo puedas descargar y probar.
Cualquier consulta no dudes en escribir.
Suerte!

]]>
Por: Juan Fran https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-194 Sun, 01 Aug 2010 20:28:32 +0000 http://www.programandoamedianoche.com/?p=1063#comment-194 Hola Gustavo. En primer lugar agradecerte que haya sacado de la oscuridad. Eres un crack!!
Al compilar el codigo me dan los siguientes errores y no se como solucionarlo:

Error 1 La mejor coincidencia de método sobrecargado para ‘iTextSharp.text.pdf.PdfSignatureAppearance.PreClose(System.Collections.Generic.Dictionary)’ tiene algunos argumentos no válidos

Error 2 Argumento ‘1’: no se puede convertir de ‘System.Collections.Hashtable’ a ‘System.Collections.Generic.Dictionary’

]]>
Por: Juan Fran https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-193 Sun, 01 Aug 2010 20:19:14 +0000 http://www.programandoamedianoche.com/?p=1063#comment-193 Hola, Gustavo. En primer lugar agradecerte que hayas dejado este codigo en tu blog.
Al compilar tu codigo me da el siguiente error

Error 2 Argumento ‘1’: no se puede convertir de ‘System.Collections.Hashtable’ a ‘System.Collections.Generic.Dictionary’

y la verdad es que estoy un poco perdido.

]]>
Por: Gustavo Cantero (The Wolf) https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-174 Thu, 15 Jul 2010 15:07:58 +0000 http://www.programandoamedianoche.com/?p=1063#comment-174 En respuesta a Alvaro Pardo.

Tienes razón, Álvaro, acabo de actualizar el código, me había faltado un método que justamente es el que crea la firma.
Después cuéntame cómo te anduvo.
Saludos.

]]>
Por: Alvaro Pardo https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-173 Thu, 15 Jul 2010 12:53:46 +0000 http://www.programandoamedianoche.com/?p=1063#comment-173 Hola Gustavo,

Estamos probando a utilizar tu ejemplo, pero nos da error al compilarlo… ya que el método SingMsg no está definido.

¿Podrías añadirlo al ejemplo?

Muchas gracias

]]>
Por: darmowe e booki https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-168 Tue, 06 Jul 2010 09:35:00 +0000 http://www.programandoamedianoche.com/?p=1063#comment-168 darmowe e booki…

I was interested in your article. Well, there are some people who are able to present this issue in such a way. I wish you continued success and looks forward to further articles….

]]>
Por: Alberto Pérez https://www.programandoamedianoche.com/2010/06/como-firmar-un-documento-pdf-desde-c-sharp-con-itextsharp/#comment-163 Fri, 25 Jun 2010 08:57:28 +0000 http://www.programandoamedianoche.com/?p=1063#comment-163 Hola Gustavo… espero no me odies, pero sigo con el mismo problema… «La clave no existe» AHGG!!.

No sé que es lo que hago mal, pero en local me funciona y en el servidor no.
La diferencia entre estas dos pruebas es la manera de obtener el certificado.
En local (a través de la función «GetCertificate» de iTextSharp).
En el servidor a través del Request.ClientCertificate indicando al IIS Requerir Canal Seguro SSL y Requerir certificado cliente.

Dim objCertHttp As HttpClientCertificate
objCertHttp = Request.ClientCertificate
Dim certificate As X509Certificate2
certificate = New System.Security.Cryptography.X509Certificates.X509Certificate2(objCertHttp.Certificate)

A la hora de llamar a la función:
PDF.SignHashed(source, target, certificate, «Razón», «Localización», True)

Donde source es «C:\Inetpub\wwwroot\documentos\Prueba.pdf» y la carpeta documentos con permisos de escritura, lectura.
y target «C:\Inetpub\wwwroot\documentos\Prueba_sign.pdf»

Me persigue el error: «LA CLAVE NO EXISTE».
Creo que en local la clave existe porque cuando le doy al botón de firmar me pide el certificado (funcion getCertificate), mientras que en el servidor cuando entro en la página es cuando me pide el certificado (Request.ClientCertificate) (por el SSL de IIS) y me pide la clave, despues he de picar al botón de firmar y da el error.

Por favor… ya se que abuso, pero necesito algo de luz!.
Saludos

]]>