Ver Mensaje Individual
  #22  
Antiguo 05-10-2011
ogonza ogonza is offline
Registrado
 
Registrado: jul 2006
Posts: 8
Reputación: 0
ogonza Va por buen camino
VicVil Saludos ...

Está claro que lo que pides, no lo haces con OpenSSL sino mas bien con TXMLDocument o XML Binding de delphi. Hay un par de cosas que puedes hacer utilizando OpenSSL. Por ejemplo el Elemento <SignedInfo> es prácticamente lo mismo salvo por 2 cosas que debes incorporar el <Reference URI=....> que debe ser igual al atributo ID del documento que estas fimando y el <Digest Value> que es el resultado de aplicar un algoritmo a un grupo de datos en este caso el propio documento al que hace referencia el Reference URI anterior. Estos datos tienen la particularidad que deben estar en forma canónica y en este estado, es la entrada al algoritmo de cálculo que generará el Digest Value. Para hacer esto, existen unas librerías basadas en OpenSSL (No estoy autorizado para poner enlaces, pero busca en google con "Disi+Delphi" sin comillas en el primer enlace) con las que puedes realizarlo. Observa el segundo ejemplo en la lista del Enlace. Con lo anterior tienes tu <SignedInfo> compuesto.
El <SignedInfo> anterior debe ser "canonicalizado", para que sirva de entrada ahora no para el cálculo del DigestValue sino del <SignatureValue> propiamente tal (Esto supongo que también se puede hacer pero no he logrado que me acepten un EnvioDTE en el SII). Luego viene el elemento <KeyInfo> que debe ser completado con los datos de tu certificado provisto por alguna CA. Hasta aquí he llegado con mi desarrollo pero no he podido lograr que el servicio me acepte un documento completo, me lo rechaza invariablemente por Error en Firma.
Saludos,
Responder Con Cita