Documento técnico Manual de integración WebSigner

Anuncio
Documento técnico
Manual de integración WebSigner
Revisión:
v 1.3
Fecha última versión:
junio de 2006
Índice
1_
Introducción .................................................................................................... 3
1.1_
Descripción de plataforma ASF ..................................................................... 3
1.2_
Módulo WebSigner........................................................................................ 4
2_
Integración de WebSigner .............................................................................. 6
2.1_
Configuración de servidores web para Netscape........................................... 6
2.2_
Descripción de API........................................................................................ 6
2.3_
Orden lógico de invocación de procedimientos............................................ 43
2.4_
Integración de WebSigner en una página HTML ......................................... 46
3_
Anexo I: Firma Paralela de Formulario ........................................................ 48
4_
Anexo II: Cifrado de Formulario ................................................................... 57
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
2
1_ Introducción
Este documento tiene como finalidad recoger todos los aspectos relacionados
con la integración del módulo cliente WebSigner perteneciente a la Plataforma
de Firma Electrónica Avanzada ASF. Dicha plataforma es una solución
completa para la integración de la Firma Electrónica Avanzada en la
infraestructura informática de una entidad u organización.
1.1_ Descripción de plataforma ASF
La Plataforma ASF es una solución completa para la integración de la Firma
Electrónica Avanzada en una infraestructura informática de una entidad u
organización.
Una de sus características más diferenciadoras es el hecho de permitir la
convivencia con más de una Autoridad de Certificación (CA), independizando
completamente al resto de los sistemas de la complejidad añadida que
supone la compatibilidad con más de una CA.
Los principales aspectos que permite resolver la utilización de ASF en
cualquier organización incluyen los siguientes:
•
Autenticación. Permite conocer la identidad de los usuarios remotos
utilizando certificados X.509 como método de autenticación.
•
Integridad. La generación de documentos con firma electrónica
avanzada permite la comprobación de que el documento no ha sido
modificado por un tercero desde la generación del mismo.
•
No Repudio. El sistema almacena en una base de datos copias de los
documentos firmados, de forma que puedan ser utilizados en caso de
necesidad como prueba de autoría.
•
Confidencialidad. La generación de documentos cifrados permite
garantizar que sólo los destinatarios de los mismos podrán acceder a
su contenido.
El entorno ASF establece una solución de principio a fin en la seguridad de
las transmisiones con acciones para firmar, cifrar, fechar y transmitir todo tipo
de documentos electrónicos de un modo seguro.
ASF está compuesto de un conjunto de módulos que permiten abarcar de
manera ágil y sencilla todos los aspectos relacionados con el proceso de
implementación de Firma Electrónica Avanzada dentro de cualquier aplicativo.
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
3
Cada módulo está especializado en una tarea específica, interactuando entre
ellos para dar la solución completa. De esta forma las tareas habitualmente
comunes de un entorno PKI están implementadas sólo en uno de los módulos
de utilidad. Por ejemplo, cuando cualquiera de los módulos necesita conocer
la validez de un certificado, interactúa con el módulo X509·Validator, quien le
confirmará o le rechazará la validez del certificado.
ASF contempla el ciclo de vida completo de utilización de certificados
proporcionando herramientas para:
•
Constituir una autoridad de certificación
•
Creación de documentos firmados
•
Validación y control de documentos firmados
•
Cifrado de documentos
•
Validación de la vigencia de los certificados
•
Registro de información de la firma de documento, de cara al no
repudio
•
Cifrado y descifrado de documentos
•
Establecer políticas de firma y cifrado a nivel de aplicaciones y/o
operaciones
1.2_ Módulo WebSigner
El módulo WebSigner está compuesto por una serie de componentes y
tecnologías que permiten la generación de documentos firmados en formato
PKCS#7, CMS y XMLDSIG en sistemas basados en tecnología web.
Asimismo, permite el cifrado de documentos en formato PKCS#7 y CMS.
WebSigner es el componente cliente de ASF diseñado para permitir a un
usuario la firma y el cifrado de documentos y formularios web desde una
página HTML para enviar al servidor, así como la verificación y descifrado de
los mismos.
La integración es posible en aplicaciones de diversa índole, tales como en
mecanismos de identificación (autenticación de cliente) para el acceso a
servicios web, como para la transmisión de documentos digitales o
formularios firmados.
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
4
Debido a que se trata de un componente cliente se han cuidado los aspectos
de compatibilidad entre distintos navegadores y tecnologías así como la
usabilidad de cara al usuario. WebSigner proporciona utilidades para permitir
filtrados de certificados autorizados en cada proceso.
WebSigner expone un Interfaz Javascript común, para la invocación de los
componentes de firma y cifrado, y la independización de la tecnología
utilizada. Para Internet Explorer, WebSigner basa su solución en la
innovadora CAPICOM, un control ActiveX que proporciona una interfaz COM
para la biblioteca criptográfica Microsoft CryptoAPI, para la firma XMLDSIG
basa su solución en las librerias XERCES, XALAN y XSEC de Apache
implementando el modulo en C++.
Para Netscape 6.x o superior, la solución está basada en un applet Java que
accede al almacén de certificados propietario de Netscape y realiza las
operaciones de firma a través de JSSP/NSS. Este mismo applet es la
solución adoptada para el uso de Websigner en Mozilla desde las version 1.x,
teniendo en cuenta que para algunas versiones de este navegador será
necesario descargar el JDK.
En el caso del applet existen dos versiones, una versión “ligera”, que no
soporta el formato XMLDSig, y una versión completa, de tamaño mucho
mayor, que soporta XMLDSig. La versión completa está basada en las
librerias XERCES, XALAN y XSEC de Apache.
Las funcionalidades incluidas en WebSigner son las siguientes:
Título:
Revisión:
Fecha:
•
Uso de firma única o múltiple (mancomunada) en formato PKCS#7,
CMS o XMLDSig. Este módulo ha sido diseñado para permitir la firma
de un documento o formulario por más de una persona.
•
Firma de cualquier tipo de documentos y formulario. Gracias a la
implementación de WebSigner es posible firmar cualquier tipo de
documento o formulario que deseemos enviar al servidor, permitiendo
su integración en cualquier aplicación.
•
Filtrado de certificados autorizados para el proceso. Esta funcionalidad
permite facilitar al usuario la selección del certificado que puede
utilizar, en función de las políticas de confianza definidas para el
proceso en el servidor.
•
Cifrado y descifrado de un formulario o un documento. Gracias a la
implementación de WebSigner es posible cifrar cualquier tipo de
documento o formulario que deseemos enviar al servidor.
Manual de integración WebSigner
v 1.3
junio de 2006
5
2_ Integración de WebSigner
A continuación se describe el API del componente WebSigner, así como el
orden lógico de llamadas al mismo a la hora de integrarlo en una página
HTML.
2.1_ Configuración de servidores web para
Netscape
Para la descarga inicial de WebSigner en Netscape, es necesario que el
servidor asocie ficheros con la extensión “.xpi” al MIME type “application/xxpinstall”. En muchos servidores web (o servidores de aplicaciones con
funciones de servidor web como Tomcat) ya viene definido este tipo MIME.
En un servidor apache, por ejemplo, seria necesario añadir la sigueinte línea
al fichero httpd.conf:
AddType application/x-xpinstall .xpi
O asegurarse de que este tipo MIME viene definido en el fichero mime.types.
2.2_ Descripción de API
El componente no visual de generación de firma tiene los siguientes métodos
en su interfaz:
initWebSigner(sOnlyWithPrivateKey)
Obtiene del almacén de certificados del navegador la lista de certificados
emitidos por una serie de autoridades de certificación y cuyos campos
cumplen la retriccion pasada por parámetro.
En NetScape, esta función solo hace comprobaciones de uso, simpre se
cargan todos los certificados de los almacenes independientemente del
valor del parámetro de entrada. El Usuario podrá limitar los certificados a
mostrar con el uso de la función getCertificates().
Entrada
•
sOnlyWithPrivateKey:
String que identifica si se deben de cargar los certificados que contienen clave
privada o no. Valores posibles: ST_PRI_KEY (certificados con clave privada),
ST_PUB_KEY (certificados sin clave privada), ST_ALL_KEY (todos).
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
6
Salida
Devolvera un booleano indicando si la carga se ha realizado correctamente o
no y cargará una constante array con los certificados que continen los
diversos almacenes de certificados.
getCertificates
(bFilterCAs,
arrCAs,
sOnlyWithPrivateKey,
bOnlyNotExpired,
sCertificateFieldPart)
arrRestrictions,
sCertificateField,
Obtiene un array que contiene los certificados contenidos en la constante
array que ha sido inicializada por initWebSigner y cuyos campos cumplen una
serie de restricciones indicadas por cada parametro
Entrada
•
bFilterCAs
Parámetro booleano que indica si se recuperan todos los certificados (false) o
solo los que el campo issuer sea similar al del arrCAs que se indica
igualmente como parámetro.
•
arrCAs
Array que contiene las CAs de confianza, este parámetro sólo se tiene en
cuenta cuando el campo bFilterCAs (anteriormente citado) es true.
•
arrRestrictions
Este parámetro es un array. Cada componente es a su vez un array de dos
posiciones (campo y patrón) que indica las restricciones que ha de cumplir la
CA que está en esa misma posición en el array indicado en el parámetro
arrCAs. En caso de no tener que cumplir ninguna restricción la posición
correspondiente del array de restricciones tendrá dos componentes iguales a
“” (cadena vacía). Este campo se ha de tener en cuenta sólo en el caso de
que el parámetro bFilterCAs sea true.
•
sOnlyWithPrivateKey
String que indica si se desean cargar los certificados con clave privada,
publica o todos. Valores posibles: ST_PRI_KEY (certificados con clave
privada), ST_PUB_KEY (certificados sin clave privada), ST_ALL_KEY (todos).
Este parámetro estará supeditado al tipo de inicialización establecida al
ejecutar initWebSigner(). Si se inicializó websigner con el parámetro
ST_PUB_KEY, este parámetro no puede tomar el valor de ST_PRI_KEY. Lo
mismo a la inversa. En cambio si se inicializó websigner con el valor
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
7
ST_ALL_KEY, este parámetro puede tomar cualquiera de los tres posibles
valores.
•
bOnlyNotExpired
Booleano que indica si se ha de tener en cuenta para la carga de certificados
los certificados que están caducados o no.
•
sCertificateField
String que indica qué campo del certificado se ha de devolver en cada
posición
del
array
de
certificados.
Valores
posibles:
CERTIFICATE_SUBJECT,
CERTIFICATE_ISSUER,
CERTIFICATE_SERIALNUMBER,
CERTIFICATE_DATE_FROM,
CERTIFICATE_DATE_TO,
CERTIFICATE_SUBJECT_KEY_IDENTIFIER,
CERTIFICATE_AUTHORITY_KEY_IDENTIFIER.
•
sCertificateFieldPart
String que indica qué parte del campo sCertificateField se ha de devolver en
cada posición del array de certificados. Valores posibles: CERTIFICATE_ALL,
CERTIFICATE_CN,
CERTIFICATE_OU,
CERTIFICATE_O,
CERTIFICATE_C, CERTIFICATE_E.
Salida
Devolverá un array con los certificados que han cumplido los parámetros de
entrada especificados.
signByIssuerAndSerialNumber (sIssuer, sSerialNumber, sData,
bDetached, sFormat, sHashAlgorithm, envelopetype, signElement,
parent, bSingDate, sIdCert)
Realiza la firma de un documento o un formulario por emisor y número de
serie del certificado seleccionado para la misma.
Entrada
•
sIssuer
String que contiene el campo emisor del certificado con el que se desea
firmar.
•
Título:
Revisión:
Fecha:
sSerialNumber
Manual de integración WebSigner
v 1.3
junio de 2006
8
String que contiene el campo número de serie del certificado con el que se
desea firmar.
•
sData
String que contiene los datos a firmar
•
bDetached
Booleano que marca si la firma va a ser detached o attached.
•
sFormat
String que da el formato de la firma. Posibles valores: MT_PKCS7, MT_CMS,
MT_XMLDSIG.
•
sHashAlgorithm
String que contiene el tipo de algoritmo hash para la firma. Posibles valores:
HASH_MD2, HASH_MD4, HASH_MD5, HASH_SHA1.
•
envelopetype
String que indica si la firma es Enveloped o Enveloping, este parámetro se ha
de tener en cuenta si la firma es de formato XMLDSIG. Valores posibles:
“Enveloped”, “Enveloping”.
•
signElement
Indica el elemento XML a firmar (id del documento XML). Este parámetro sólo
se tendrá en cuenta si la firma a realizar es en formato XMLDSIG.
•
parent
Indica el elemento padre del elemento a firmar (ruta XPath del elemento a
firmar). Este elemento se tendrá en cuenta si es firma de formato XMLDSIG y
además es de tipo Enveloped.
•
bSignDate
Indica si se desea incluir como atributo de firma la fecha.
•
Título:
Revisión:
Fecha:
sIdCert
Manual de integración WebSigner
v 1.3
junio de 2006
9
Indentifica si se va a firmar por Issuer and Serial Number o por Subject Key
Identifier. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
Salida
La función devolverá los datos firmados codificados en Base64 (salvo en caso
de firma XML, en el que se devuelve el XML resultado de la firma, sin
codificar) si la funcion ha funcionado correctamente y null en caso contrario.
signByIndex (iCertificatePos, sData, bDetached, sFormat,
sHashAlgorithm, envelopetype, signElement, parent, bSignDate,
sIdCert)
Firma un formulario mediante el identificador de la posicion del certificado de
firma en el array de certificados cargado con getCertificates.
Entrada
•
iCertificatePos
Entero que indica la posicion en el array de certificados del certificado
seleccionado para firmar el fichero.
•
sData
String que contiene los datos a firmar.
•
bDetached
Booleano que identifica si la firma es detached o no.
•
sFormat
String que da el formato de la firma. Posibles valores: MT_PKCS7, MT_CMS,
MT_XMLDSIG.
•
sHashAlgorithm
String que contiene el tipo de algoritmo de hash para la firma. Posibles
valores: HASH_MD2, HASH_MD4, HASH_MD5, HASH_SHA1.
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
10
•
envelopetype
String que indica si la firma es Enveloped o Enveloping. Este parámetro se ha
de tener en cuenta sólo si la firma es de formato XMLDSIG. Valores posibles:
“Enveloped”, “Enveloping”.
•
signElement
Indica el elemento XML a firmar (id del documento XML). Este parámetro sólo
se tendrá en cuenta si la firma a realizar es en formato XMLDSIG.
•
parent
Indica el elemento padre del elemento a firmar (ruta XPath del elemento a
firmar). Este elemento se tendrá en cuenta si es firma de formato XMLDSIG y
además es de tipo Enveloped.
•
bSignDate
Indica si se desea incluir como atributo de firma la fecha.
•
sIdCert
Indentifica si se va a firmar por Issuer and Serial Number o por Subject Key
Identifier. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
Salida
La función devolverá los datos firmados codificados en Base64 (salvo en caso
de firma XML, en el que se devuelve el XML resultado de la firma, sin
codificar) si la funcion ha funcionado correctamente y null en caso contrario.
signFileByIndex(iCertificatePos, bDetached, sFormat,
sHashAlgorithm, sContent, envelopetype, signElement, parent,
bSignDate, sIdCert)
Firma un fichero mediante el identificador de la posicion del certificado de
firma en el array de certificados cargado con getCertificates. Los datos a
firmar deben pasarse en base64, la función los decodifica antes de firmarlos.
Entrada
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
11
•
iCertificatePos
Entero que indica la posicion en el array de certificados del certificado
seleccionado para firmar el fichero.
•
bDetached
Booleano que identifica si la firma es detached o no.
•
sFormat
String que da el formato de la firma. Posibles valores: MT_PKCS7, MT_CMS,
MT_XMLDSIG.
•
sHashAlgorithm
String que contiene el tipo de algoritmo de hash para la firma. Posibles
valores: HASH_MD2, HASH_MD4, HASH_MD5, HASH_SHA1.
•
sContent
String que contiene los datos del fichero a firmar, codificados en base64.
•
envelopetype
String que indica si la firma es Enveloped o Enveloping. Este parámetro se ha
de tener en cuenta sólo si la firma es de formato XMLDSIG. Valores posibles:
“Enveloped”, “Enveloping”.
•
signElement
Indica el elemento XML a firmar (id del documento XML). Este parámetro sólo
se tendrá en cuenta si la firma a realizar es en formato XMLDSIG.
•
parent
Indica el elemento padre del elemento a firmar (ruta XPath del elemento a
firmar). Este elemento se tendrá en cuenta si es firma de formato XMLDSIG y
además es de tipo Enveloped.
•
bSignDate
Indica si se desea incluir como atributo de firma la fecha.
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
12
•
sIdCert
Indentifica si se va a firmar por Issuer and Serial Number o por Subject Key
Identifier. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
Salida
La función devolverá los datos firmados codificados en Base64 si la funcion
ha funcionado correctamente y null en caso contrario.
signFileByIssuerAndSerialNumber(sIssuer,sSerialNumber,
bDetached, sFormat, sHashAlgorithm, sContent, envelopetype,
signElement, parent, bSignDate, sIdCert)
Firma un fichero indicando el emisor y el número de serie del certificado de
firma. Los datos a firmar deben pasarse en base64, la función los decodifica
antes de firmarlos.
Entrada
•
sIssuer
String que guarda el emisor del certificado seleccionado para la firma.
•
sSerialNumber
String que guarda el número de serie del certificado seleccionado para la
firma.
•
bDetached
Booleano que identifica si la firma es detached o no.
•
sFormat
String que da el formato de la firma. Posibles valores: MT_PKCS7, MT_CMS,
MT_XMLDSIG.
•
sHashAlgorithm
String que contiene el tipo de algoritmo de hash para la firma. Posibles
valores: HASH_MD2, HASH_MD4, HASH_MD5, HASH_SHA1.
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
13
•
sContent
String que contiene los datos del fichero a firmar, codificados en base64.
•
envelopetype
String que indica si la firma es Enveloped o Enveloping. Este parámetro se ha
de tener en cuenta sólo si la firma es de formato XMLDSIG. Valores posibles:
“Enveloped”, “Enveloping”.
•
signElement
Indica el elemento XML a firmar (id del documento XML). Este parámetro sólo
se tendrá en cuenta si la firma a realizar es en formato XMLDSIG.
•
parent
Indica el elemento padre del elemento a firmar (ruta XPath del elemento a
firmar). Este elemento se tendrá en cuenta si es firma de formato XMLDSIG y
además es de tipo Enveloped.
•
bSignDate
Indica si se desea incluir como atributo de firma la fecha.
•
sIdCert
Indentifica si se va a firmar por Issuer and Serial Number o por Subject Key
Identifier. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
Salida
La función devolverá los datos firmados codificados en Base64 si la función
ha funcionado correctamente y null en caso contrario.
signFileByIndexOneStep(iCertificatePos, bDetached, sFormat,
sHashAlgorithm, envelopetype, signElement, parent, bSignDate,
sIdCert, sPathDocument)
Firma un fichero mediante el identificador de la posicion del certificado de
firma en el array de certificados cargado con getCertificates.
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
14
Entrada
•
iCertificatePos
Entero que indica la posicion en el array de certificados del certificado
seleccionado para firmar el fichero.
•
bDetached
Booleano que identifica si la firma es detached o no.
•
sFormat
String que da el formato de la firma. Posibles valores: MT_PKCS7, MT_CMS,
MT_XMLDSIG.
•
sHashAlgorithm
String que contiene el tipo de algoritmo de hash para la firma. Posibles
valores: HASH_MD2, HASH_MD4, HASH_MD5, HASH_SHA1.
•
envelopetype
String que indica si la firma es Enveloped o Enveloping. Este parámetro se ha
de tener en cuenta sólo si la firma es de formato XMLDSIG. Valores posibles:
“Enveloped”, “Enveloping”.
•
signElement
Indica el elemento XML a firmar (id del documento XML). Este parámetro sólo
se tendrá en cuenta si la firma a realizar es en formato XMLDSIG.
•
parent
Indica el elemento padre del elemento a firmar (ruta XPath del elemento a
firmar). Este elemento se tendrá en cuenta si es firma de formato XMLDSIG y
además es de tipo Enveloped.
•
bSignDate
Indica si se desea incluir como atributo de firma la fecha.
•
Título:
Revisión:
Fecha:
sIdCert
Manual de integración WebSigner
v 1.3
junio de 2006
15
Indentifica si se va a firmar por Issuer and Serial Number o por Subject Key
Identifier. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
•
sPathDocument
Indica la ruta del documento a firmar. Este parámetro es opcional, si no se
pasa ruta la función abrirá un explorador para que el usuario seleccione el
archivo deseado.
Salida
La función devolverá los datos firmados codificados en Base64 si la funcion
ha funcionado correctamente y null en caso contrario.
signFileByIssuerAndSerialNumberOneStep(sIssuer,sSerialNumber,
bDetached, sFormat, sHashAlgorithm, envelopetype, signElement,
parent, bSignDate, sIdCert, sPathDocument)
Firma un fichero indicando el emisor y el número de serie del certificado de
firma.
Entrada
•
sIssuer
String que guarda el emisor del certificado seleccionado para la firma.
•
sSerialNumber
String que guarda el número de serie del certificado seleccionado para la
firma.
•
bDetached
Booleano que identifica si la firma es detached o no.
•
sFormat
String que da el formato de la firma. Posibles valores: MT_PKCS7, MT_CMS,
MT_XMLDSIG.
•
Título:
Revisión:
Fecha:
sHashAlgorithm
Manual de integración WebSigner
v 1.3
junio de 2006
16
String que contiene el tipo de algoritmo de hash para la firma. Posibles
valores: HASH_MD2, HASH_MD4, HASH_MD5, HASH_SHA1.
•
envelopetype
String que indica si la firma es Enveloped o Enveloping. Este parámetro se ha
de tener en cuenta sólo si la firma es de formato XMLDSIG. Valores posibles:
“Enveloped”, “Enveloping”.
•
signElement
Indica el elemento XML a firmar (id del documento XML). Este parámetro sólo
se tendrá en cuenta si la firma a realizar es en formato XMLDSIG.
•
parent
Indica el elemento padre del elemento a firmar (ruta XPath del elemento a
firmar). Este elemento se tendrá en cuenta si es firma de formato XMLDSIG y
además es de tipo Enveloped.
•
bSignDate
Indica si se desea incluir como atributo de firma la fecha.
•
sIdCert
Indentifica si se va a firmar por Issuer and Serial Number o por Subject Key
Identifier. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
•
sPathDocument
Indica la ruta del documento a firmar. Este parámetro es opcional, si no se
pasa ruta la función abrirá un explorador para que el usuario seleccione el
archivo deseado.
Salida
La función devolverá los datos firmados codificados en Base64 si la función
ha funcionado correctamente y null en caso contrario.
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
17
addNestedSignByIndex (iCertificatePos, sSourceSignedData,
sFormat, sHashAlgorithm, envelopetype, signElement, parent,
bSignDate, sIdCert)
Función que añade una nueva firma al formulario o al documento
seleccionado, mediante una posición en el array de certificados. Esta función
añade la nueva firma de forma secuencial.
Entrada
•
iCertificatePos
Entero que indica la posición del certificado (dentro del array de certificados)
seleccionado para firmar.
•
sSourceSignedData
String que contiene los datos firmados a los que se les va a añadir una firma.
•
sFormat
String que da el formato de la firma. Posibles valores: MT_PKCS7, MT_CMS,
MT_XMLDSIG.
•
sHashAlgorithm
String que contiene el tipo de algoritmo de hash para la firma. Posibles
valores: HASH_MD2, HASH_MD4, HASH_MD5, HASH_SHA1.
•
envelopetype
String que indica si la firma es Enveloped o Enveloping. Este parámetro se ha
de tener en cuenta sólo si la firma es de formato XMLDSIG. Valores posibles:
“Enveloped”, “Enveloping”.
•
signElement
Indica el elemento XML a firmar (id del documento XML). Este parámetro sólo
se tendrá en cuenta si la firma a realizar es en formato XMLDSIG.
•
parent
Indica el elemento padre del elemento a firmar (ruta XPath del elemento a
firmar). Este elemento se tendrá en cuenta si es firma en formato XMLDSIG y
además es de tipo Enveloped.
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
18
•
bSignDate
Indica si se desea incluir como atributo de firma la fecha.
•
sIdCert
Indentifica si se va a firmar por Issuer and Serial Number o por Subject Key
Identifier. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
Salida
La función devolverá los datos firmados codificados en base 64 (salvo en
caso de firma XML, en el que se devuelve el XML resultado de la firma, sin
codificar), o null si se ha producido algún error.
addNestedSignByIssuerAndSerialNumber (sIssuer, sSerialNumber,
sSourceSignedData, sFormat, sHashAlgorithm, envelopetype,
signElement, parent, bSignDate, sIdCert)
Función que añade una nueva firma al formulario o al documento
seleccionado, especificando el certificado de firma por emisor y número de
serie. Esta función añade la nueva firma de forma secuencial.
Entrada
•
sIssuer
String que guarda el emisor del certificado seleccionado para la firma.
•
sSerialNumber
String que guarda el número de serie del certificado seleccionado para la
firma.
•
sSourceSignedData
String que contiene los datos firmados a los que se les va a añadir una firma.
•
sFormat
String que da el formato de la firma. Posibles valores: MT_PKCS7, MT_CMS,
MT_XMLDSIG.
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
19
•
sHashAlgorithm
String que contiene el tipo de algoritmo de hash para la firma. Posibles
valores: HASH_MD2, HASH_MD4, HASH_MD5, HASH_SHA1.
•
envelopetype
String que indica si la firma es Enveloped o Enveloping. Este parámetro se ha
de tener en cuenta sólo si la firma es de formato XMLDSIG. Valores posibles:
“Enveloped”, “Enveloping”.
•
signElement
Indica el elemento XML a firmar (id del documento XML). Este parámetro sólo
se tendrá en cuenta si la firma a realizar es en formato XMLDSIG.
•
parent
Indica el elemento padre del elemento a firmar (ruta XPath del elemento a
firmar). Este elemento se tendrá en cuenta si es firma de formato XMLDSIG y
además es de tipo Enveloped.
•
bSignDate
Indica si se desea incluir como atributo de firma la fecha.
•
sIdCert
Indentifica si se va a firmar por Issuer and Serial Number o por Subject Key
Identifier. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
Salida
La función devolverá los datos firmados codificados en base 64 (salvo en
caso de firma XML, en el que se devuelve el XML resultado de la firma, sin
codificar), o null si se ha producido algún error.
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
20
cosignByIndex(iCertificatePos, sSignedData, sFormat,
sHashAlgorithm, envelopetype, signElement, parent, bSignDate,
sIdCert)
Funcion utilizada para realizar una firma paralela sobre unos datos ya
firmados, especificando la posición del certificado de firma.
Entrada
•
iCertificatePos
Entero que indica la posición del certificado (dentro del array de certificados)
seleccionado para firmar.
•
sSignedData
String que contiene los datos firmados a los que se les va a añadir una firma.
•
sFormat
String que da el formato de la firma. Posibles valores: MT_PKCS7, MT_CMS,
MT_XMLDSIG.
•
sHashAlgorithm
String que contiene el tipo de algoritmo de hash para la firma. Posibles
valores: HASH_MD2, HASH_MD4, HASH_MD5, HASH_SHA1.
•
envelopetype
String que indica si la firma es Enveloped o Enveloping. Este parámetro se ha
de tener en cuenta sólo si la firma es de formato XMLDSIG. Valores posibles:
“Enveloped”, “Enveloping”.
•
signElement
Indica el elemento XML a firmar (id del documento XML). Este parámetro sólo
se tendrá en cuenta si la firma a realizar es en formato XMLDSIG.
•
parent
Indica el elemento padre del elemento a firmar (ruta XPath del elemento a
firmar). Este elemento se tendrá en cuenta si es firma en formato XMLDSIG y
además es de tipo Enveloped.
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
21
•
bSignDate
Indica si se desea incluir como atributo de firma la fecha.
•
sIdCert
Indentifica si se va a firmar por Issuer and Serial Number o por Subject Key
Identifier. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
Salida
La función devolverá los datos firmados codificados en base 64 (salvo en
caso de firma XML, en el que se devuelve el XML resultado de la firma, sin
codificar), o null si se ha producido algún error.
cosignFileByIndex(iCertificatePos, sSignedData, sFormat,
sHashAlgorithm, envelopetype, signElement, parent, bSignDate,
sIdCert)
Funcion que añade una firma en paralelo a los datos ya firmados,
especificando la posición del certificado de firma. Los datos a firmar
(parámetro sDetachedData) deben pasarse en base64, la función los
decodifica antes de firmarlos.
Entrada
•
iCertificatePos
Entero que indica la posición del certificado (dentro del array de certificados)
seleccionado para firmar.
•
sSignedData
String que contiene los datos firmados a los que se les va a añadir una firma.
•
sFormat
String que da el formato de la firma. Posibles valores: MT_PKCS7, MT_CMS,
MT_XMLDSIG.
•
sHashAlgorithm
String que contiene el tipo de algoritmo de hash para la firma. Posibles
valores: HASH_MD2, HASH_MD4, HASH_MD5, HASH_SHA1.
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
22
•
envelopetype
String que indica si la firma es Enveloped o Enveloping. Este parámetro se ha
de tener en cuenta sólo si la firma es de formato XMLDSIG. Valores posibles:
“Enveloped”, “Enveloping”.
•
signElement
Indica el elemento XML a firmar (id del documento XML). Este parámetro sólo
se tendrá en cuenta si la firma a realizar es en formato XMLDSIG.
•
parent
Indica el elemento padre del elemento a firmar (ruta XPath del elemento a
firmar). Este elemento se tendrá en cuenta si es firma en formato XMLDSIG y
además es de tipo Enveloped.
•
bSignDate
Indica si se desea incluir como atributo de firma la fecha.
•
sIdCert
Indentifica si se va a firmar por Issuer and Serial Number o por Subject Key
Identifier. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
Salida
La función devolverá los datos firmados en base 64, o null si se ha producido
algún error.
cosignByIssuerAndSerialNumber(sIssuer,sSerialNumber,
sSignedData, sFormat, sHashAlgorithm, envelopetype, signElement,
parent, bSignDate, sIdCert)
Funcion que añade una firma en paralelo a los datos ya firmados,
especificando el certificado de firma por emisor y número de serie.
Entrada
•
Título:
Revisión:
Fecha:
sIssuer
Manual de integración WebSigner
v 1.3
junio de 2006
23
String que contiene el emisor del certificado
•
sSerialNumber
String que contiene el número de serie del certificado
•
sSignedData
String que contiene los datos firmados a los que se les va a añadir una firma.
•
sFormat
String que da el formato de la firma. Posibles valores: MT_PKCS7, MT_CMS,
MT_XMLDSIG.
•
sHashAlgorithm
String que contiene el tipo de algoritmo de hash para la firma. Posibles
valores: HASH_MD2, HASH_MD4, HASH_MD5, HASH_SHA1.
•
envelopetype
String que indica si la firma es Enveloped o Enveloping. Este parámetro se ha
de tener en cuenta sólo si la firma es de formato XMLDSIG. Valores posibles:
“Enveloped”, “Enveloping”.
•
signElement
Indica el elemento XML a firmar (id del documento XML). Este parámetro sólo
se tendrá en cuenta si la firma a realizar es en formato XMLDSIG.
•
parent
Indica el elemento padre del elemento a firmar (ruta XPath del elemento a
firmar). Este elemento se tendrá en cuenta si es firma en formato XMLDSIG y
además es de tipo Enveloped.
•
bSignDate
Indica si se desea incluir como atributo de firma la fecha.
•
Título:
Revisión:
Fecha:
sIdCert
Manual de integración WebSigner
v 1.3
junio de 2006
24
Indentifica si se va a firmar por Issuer and Serial Number o por Subject Key
Identifier. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
Salida
La función devolverá los datos firmados codificados en base 64 (salvo en
caso de firma XML, en el que se devuelve el XML resultado de la firma, sin
codificar), o null si se ha producido algún error.
cosignFileByIssuerAndSerialNumber(sIssuer,sSerialNumber,
sSignedData, sFormat, sHashAlgorithm, envelopetype, signElement,
parent, bSignDate, sIdCert)
Funcion que añade una firma en paralelo a los datos ya firmados,
especificando el certificado de firma por emisor y número de serie. Los datos
a firmar (parámetro sDetachedData) deben pasarse en base64, la función los
decodifica antes de firmarlos.
Entrada
•
sIssuer
String que contiene el emisor del certificado
•
sSerialNumber
String que contiene el número de serie del certificado
•
sSignedData
String que contiene los datos firmados a los que se les va a añadir una firma.
•
sFormat
String que da el formato de la firma. Posibles valores: MT_PKCS7, MT_CMS,
MT_XMLDSIG.
•
sHashAlgorithm
String que contiene el tipo de algoritmo de hash para la firma. Posibles
valores: HASH_MD2, HASH_MD4, HASH_MD5, HASH_SHA1.
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
25
•
envelopetype
String que indica si la firma es Enveloped o Enveloping. Este parámetro se ha
de tener en cuenta sólo si la firma es de formato XMLDSIG. Valores posibles:
“Enveloped”, “Enveloping”.
•
signElement
Indica el elemento XML a firmar (id del documento XML). Este parámetro sólo
se tendrá en cuenta si la firma a realizar es en formato XMLDSIG.
•
parent
Indica el elemento padre del elemento a firmar (ruta XPath del elemento a
firmar). Este elemento se tendrá en cuenta si es firma en formato XMLDSIG y
además es de tipo Enveloped.
•
bSignDate
Indica si se desea incluir como atributo de firma la fecha.
•
sIdCert
Indentifica si se va a firmar por Issuer and Serial Number o por Subject Key
Identifier. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
Salida
La función devolverá los datos firmados en base 64, o null si se ha producido
algún error.
verify (sSignedData, bDetached, sDetachedData, sFormat)
Función que verifica si los datos firmados son correctos.
Entrada
•
sSignedData
String con los datos firmados.
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
26
•
bDetached
Booleano que identifica si la firma es detached o attached.
•
sDetachedData
String que contiene los datos que se firmaron. Este parámetro sólo se utiliza
en caso de que la selección de firma sea bDetached=true.
•
sFormat
String que indica el formato de la firma. Valores posibles: MT_PKCS7,
MT_CMS, MT_XMLDSIG.
Salida
La función devuelve un array con n componentes asignados a cada una de
las firmas. Cada componente es a su vez un array de dos posiciones:
- Código de error
- Subject del certificado que ha firmado, si pudo extraerse de la firma
verifyFile(sSignedData, bDetached, sDetachedData, sFormat)
Función que verifica si la firma de un fichero se ha realizado correctamente.
Los datos que se firmaron (parámetro sDetachedData) deben pasarse en
base64, la función los decodifica antes de verificar la firma a partir de ellos.
Entrada
•
sSignedData
String con los datos firmados.
•
bDetached
Booleano que identifica si la firma es detached o attached.
•
sDetachedData
String que contiene los datos que se firmaron en base64. Este parámetro sólo
se utiliza en caso de que la selección de firma sea bDetached=true.
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
27
•
sFormat
String que indica el formato de la firma. Valores posibles: MT_PKCS7,
MT_CMS, MT_XMLDSIG.
Salida
La función devuelve un array con n componentes asignados a cada una de
las firmas. Cada componente es a su vez un array de dos posiciones:
- Código de error
- Subject del certificado que ha firmado, si pudo extraerse de la firma
getInfoByIndex (iCertificatePos)
Función que devuelve un array con información del certificado solicitado
mediante su identificador de posición en el array de certificados.
Entrada
•
iCertificatePos
Entero que identifica la posición dentro del array del certificado que se desea
obtener.
Salida
Devuelve una array con información del certificado solicitado si la función ha
ido correctamente, y null en caso contrario. El array devuelto contiene la
siguiente información (por este orden):
-
Emisor
-
Asunto
-
Número de serie
-
Fecha de inicio de validez
-
Fecha de fin de validez
-
Certificado en base64
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
28
-
Booleano indicando si existe clave privada asociada al certificado.
getInfoByIssuerAndSerialNumber(sIssuer,sSerialNumber)
Función que devuelve un array con información del certificado solicitado
mediante su emisor y su número de serie.
Entrada
•
sIssuer
String que identifica el emisor del certificado
•
sSerialNumber
String que identifica el número de serie del certificado
Salida
Devuelve una array con información del certificado solicitado si la función ha
ido correctamente, y null en caso contrario. El array devuelto contiene la
siguiente información (por este orden):
-
Emisor
-
Asunto
-
Número de serie
-
Fecha de inicio de validez
-
Fecha de fin de validez
-
Certificado en base64
-
Booleano indicando si existe clave privada asociada al certificado.
encryptByIndex (arrCertificatePos,sData,sSimmetricAlgorithm,
sFormat, sIdCert)
Funcion que cifra un texto con los certificados especificados
Entrada
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
29
•
arrCertificatePos
Array con las posiciones en el array de certificados de los certificados a usar
para cifrar.
•
sData
String con los datos a cifrar.
•
sSimmetricAlgorithm
String que contiene el algoritmo simétrico a utilizar para cifrar. Valores
posibles:
SCA_DES,
SCA_3DES,
SCA_RC2,
SCA_RC4,
SCA_AES_128_CBC, SCA_AES_192_CBC, SCA_AES_256_CBC.
•
sFormat
String que indica el formato del cifrado. Valores posibles: MT_PKCS7,
MT_CMS.
•
sIdCert
Indentifica el atributo del certificado mediante el cual se va ha realizar el
cifrado. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
Salida
La función devuelve los datos cifrados en Base64 si en el procedimiento no
se ha producido ningún error, en caso contrario devuelve null.
encryptFileByIndex(arrCertificatePos,sData,sSimmetricAlgorithm,
sFormat, sIdCert)
Función que cifra con los certificados especificados. Los datos a cifrar deben
estar en base64, se decodificarán antes de cifrarse.
Entrada
•
arrCertificatePos
Array con las posiciones en el array de certificados de los certificados a usar
para cifrar.
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
30
•
sData
String con los datos a cifrar en base64.
•
sSimmetricAlgorithm
String que contiene el algoritmo simétrico a utilizar para cifrar. Valores
posibles:
SCA_DES,
SCA_3DES,
SCA_RC2,
SCA_RC4,
SCA_AES_128_CBC, SCA_AES_192_CBC, SCA_AES_256_CBC.
•
sFormat
String que indica el formato del cifrado. Valores posibles: MT_PKCS7,
MT_CMS.
•
sIdCert
Indentifica el atributo del certificado mediante el cual se va ha realizar el
cifrado. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
Salida
La función devuelve los datos cifrados en Base64 si en el procedimiento no
se ha producido ningún error, en caso contrario devuelve null.
encryptByIssuerAndSerialNumber (sIssuer, sSerialNumber, sData,
sSimmetricAlgorithm, sFormat, sIdCert)
Función que cifra un texto con el certificado especificado mediante emisor y
número de serie.
Entrada
•
sIsuuer
String que identifica el emisor del certificado
•
sSerialNumber
String que guarda el numero de serie del certificado con el que se va ha cifrar
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
31
•
sData
String con los datos a cifrar.
•
sSimmetricAlgorithm
String que contiene el algoritmo simétrico a utilizar para cifrar. Valores
posibles:
SCA_DES,
SCA_3DES,
SCA_RC2,
SCA_RC4,
SCA_AES_128_CBC, SCA_AES_192_CBC, SCA_AES_256_CBC.
•
sFormat
String que indica el formato del cifrado. . Valores posibles: MT_PKCS7,
MT_CMS.
•
sIdCert
Indentifica el atributo del certificado mediante el cual se va ha realizar el
cifrado. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
Salida
La función devuelve los datos cifrados en Base64 si en el procedimiento no
se ha producido ningún error, en caso contrario devuelve null.
encryptFileByIssuerAndSerialNumber (sIssuer, sSerialNumber,
sData, sSimmetricAlgorithm, sFormat, sIdCert)
Función que cifra un texto con el certificado especificado mediante emisor y
número de serie. Los datos a cifrar deben estar en base64, se decodificarán
antes de cifrarse.
Entrada
•
sIsuuer
String que identifica el emisor del certificado
•
sSerialNumber
String que guarda el numero de serie del certificado con el que se va ha cifrar
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
32
•
sData
String con los datos a cifrar en base64.
•
sSimmetricAlgorithm
String que contiene el algoritmo simétrico a utilizar para cifrar. Valores
posibles:
SCA_DES,
SCA_3DES,
SCA_RC2,
SCA_RC4,
SCA_AES_128_CBC, SCA_AES_192_CBC, SCA_AES_256_CBC.
•
sFormat
String que indica el formato del cifrado. Valores posibles: MT_PKCS7,
MT_CMS.
•
sIdCert
Indentifica el atributo del certificado mediante el cual se va ha realizar el
cifrado. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
Salida
La función devuelve los datos cifrados en Base64 si en el procedimiento no
se ha producido ningún error, en caso contrario devuelve null.
encryptByCert (aCertificates,sData,sSimmetricAlgorithm, sFormat,
sIdCert)
Funcion que cifra un texto con los certificados especificados en el array
aCertificates
Entrada
•
aCertificates
Array con los certificados (en Base64) a usar para cifrar.
•
sData
String con los datos a cifrar.
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
33
•
sSimmetricAlgorithm
String que contiene el algoritmo simétrico a utilizar para cifrar. Valores
posibles:
SCA_DES,
SCA_3DES,
SCA_RC2,
SCA_RC4,
SCA_AES_128_CBC, SCA_AES_192_CBC, SCA_AES_256_CBC.
•
sFormat
String que indica el formato del cifrado. Valores posibles: MT_PKCS7,
MT_CMS.
•
sIdCert
Indentifica el atributo del certificado mediante el cual se va ha realizar el
cifrado. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
Salida
La función devuelve los datos cifrados en Base64 si en el procedimiento no
se ha producido ningún error, en caso contrario devuelve null.
encryptFileByCert(aCertificates,sData,sSimmetricAlgorithm,
sFormat, sIdCert)
Función que cifra con los certificados especificados en el array aCertificates.
Los datos a cifrar deben estar en base64, se decodificarán antes de cifrarse.
Entrada
•
aCertificates
Array con los certificados (en Base64) a usar para cifrar.
•
sData
String con los datos a cifrar en base64.
•
Título:
Revisión:
Fecha:
sSimmetricAlgorithm
Manual de integración WebSigner
v 1.3
junio de 2006
34
String que contiene el algoritmo simétrico a utilizar para cifrar. Valores
posibles:
SCA_DES,
SCA_3DES,
SCA_RC2,
SCA_RC4,
SCA_AES_128_CBC, SCA_AES_192_CBC, SCA_AES_256_CBC.
•
sFormat
String que indica el formato del cifrado. Valores posibles: MT_PKCS7,
MT_CMS.
•
sIdCert
Indentifica el atributo del certificado mediante el cual se va ha realizar el
cifrado. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
Salida
La función devuelve los datos cifrados en Base64 si en el procedimiento no
se ha producido ningún error, en caso contrario devuelve null.
decrypt (sEncryptedData)
Función que descifra los datos cifrados que recibe como parámetro.
Entrada
•
sEncryptedData
String con los datos cifrados en formato Base64
Salida
La función devolverá los datos originales que habían sido cifrados si todo el
proceso se ha realizado correctamente, en caso contrario devolverá null.
decryptFile (sEncryptedData)
Función que descifra un fichero cifrado que recibe como parámetro.
Entrada
•
sEncryptedData
String con los datos del fichero cifrados en formato Base64
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
35
Salida
La función devolverá los datos originales que habían sido cifrados codificados
en base64 si todo el proceso se ha realizado correctamente, en caso contrario
devolverá null.
signAndEncryptByIndex (iSignerCertificatePos, sData, bDetached,
sFormat, sHashAlgorithm, sSimmetricAlgorithm,
arrTargetCertificatePos, bSignDate, sIdCert)
Firma y cifra un texto mediante un certificado del cual ha sido especificada su
posición dentro del array de certificados.
Entrada
•
iSignerCertificatePos
Entero que especifica la posición del certificado con el que se va a firmar el
texto.
•
sData
String con los datos a firmar
•
bDetached
Booleano que identifica si la firma es detached o attached.
•
sFormat
String que indica el formato de la firma. Valores posibles: MT_PKCS7,
MT_CMS, MT_XMLDSIG.
•
sHashAlgorithm
String que contiene el tipo de algoritmo hash para la firma. Posibles valores:
HASH_MD2, HASH_MD4, HASH_MD5, HASH_SHA1.
•
sSimmetricAlgorithm
String que contiene el algoritmo simétrico usado para cifrar el texto firmado.
Valores posibles: SCA_DES, SCA_3DES, SCA_RC2, SCA_RC4,
SCA_AES_128_CBC, SCA_AES_192_CBC, SCA_AES_256_CBC.
•
Título:
Revisión:
Fecha:
arrTargetCertificatePos
Manual de integración WebSigner
v 1.3
junio de 2006
36
Array con la posición de los certificados con los que se va a cifrar el texto
firmado.
•
bSignDate
Indica si se desea incluir como atributo de firma la fecha.
•
sIdCert
Indentifica el atributo del certificado mediante el cual se va ha realizar el
cifrado. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
Salida
La función devuelve los datos firmados y cifrados, o null si se produce
algún error.
signAndEncryptByIssuerAndSerialNumber (sIssuer, sSerialNumber,
sData, bDetached, sFormat, sHashAlgorithm, sSimmetricAlgorithm,
arrTargetCertificatePos, bSignDate, sIdCert)
Función que firma un texto con el certificado especificado por emisor y
numero de serie y lo cifra con los certificados especificados por posición.
Entrada
•
sIssuer
String que especifica el emisor del certificado
•
sSerialNumber
String que especifica el número de serie del certificado.
•
sData
String con los datos a firmar.
•
bDetached
Booleano que identifica si la firma es detached o attached.
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
37
•
sFormat
String que indica el formato de la firma. Valores posibles: MT_PKCS7,
MT_CMS, MT_XMLDSIG.
•
sHashAlgorithm
String que contiene el tipo de algoritmo hash para la firma. Posibles valores:
HASH_MD2, HASH_MD4, HASH_MD5, HASH_SHA1.
•
sSimmetricAlgorithm
String que contiene el algoritmo simétrico usado para cifrar el texto firmado.
Valores posibles: SCA_DES, SCA_3DES, SCA_RC2, SCA_RC4,
SCA_AES_128_CBC, SCA_AES_192_CBC, SCA_AES_256_CBC.
•
arrTargetCertificatePos
Array con laa posiciones de los certificados con los que se va a cifrar el texto
firmado.
•
bSignDate
Indica si se desea incluir como atributo de firma la fecha.
•
sIdCert
Indentifica el atributo del certificado mediante el cual se va ha realizar el
cifrado. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
Salida
La función devuelve los datos firmados y cifrados.
encryptByCert (aCertificates,sData,sSimmetricAlgorithm, sFormat,
sIdCert)
Funcion que cifra un texto con los certificados especificados, proporcionados
explícitamente y que no deben estar previamente almacenados en las bases
de datos del navegador.
Entrada
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
38
•
arrCertificatePos
Array con los certificados a usar para cifrar, codificados en PEM (base 64 con
cabecera y pie).
•
sData
String con los datos a cifrar.
•
sSimmetricAlgorithm
String que contiene el algoritmo simétrico a utilizar para cifrar. Valores
posibles:
SCA_DES,
SCA_3DES,
SCA_RC2,
SCA_RC4,
SCA_AES_128_CBC, SCA_AES_192_CBC, SCA_AES_256_CBC.
•
sFormat
String que indica el formato del cifrado. Valores posibles: MT_PKCS7,
MT_CMS.
•
sIdCert
Indentifica el atributo del certificado mediante el cual se va ha realizar el
cifrado. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
Salida
La función devuelve los datos cifrados en Base64 si en el procedimiento no
se ha producido ningún error, en caso contrario devuelve null.
encryptFileByCert(aCertificates,sData,sSimmetricAlgorithm,
sFormat, sIdCert)
Función que cifra con los certificados especificados, proporcionados
explícitamente y que no deben estar previamente almacenados en las bases
de datos del navegador. Los datos a cifrar deben estar en base64, se
decodificarán antes de cifrarse.
Entrada
•
Título:
Revisión:
Fecha:
arrCertificatePos
Manual de integración WebSigner
v 1.3
junio de 2006
39
Array con los certificados a usar para cifrar, codificados en PEM (base 64 con
cabecera y pie).
•
sData
String con los datos a cifrar en base64.
•
sSimmetricAlgorithm
String que contiene el algoritmo simétrico a utilizar para cifrar. Valores
posibles:
SCA_DES,
SCA_3DES,
SCA_RC2,
SCA_RC4,
SCA_AES_128_CBC, SCA_AES_192_CBC, SCA_AES_256_CBC.
sFormat
String que indica el formato del cifrado. Valores posibles: MT_PKCS7,
MT_CMS.
•
sIdCert
Indentifica el atributo del certificado mediante el cual se va ha realizar el
cifrado. Posibles valores: PARAMETER_ISSUER_AND_SERIAL_NUMBER,
PARAMETER_SUBJECT_KEY_IDENTIFIER.
Salida
La función devuelve los datos cifrados en Base64 si en el procedimiento no
se ha producido ningún error, en caso contrario devuelve null.
getFile()
Función carga el fichero que posteriormente se va a firmar.
Salida
La función devuelve los datos contenidos en el fichero codificados en Base
64.
getFileByPath(path)
Funcion que carga el fichero mediante el path indicado, para posteriormente
ser firmado.
Entrada
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
40
•
Path:
Path absoluto del fichero que se desea cargar.
Salida
La función devuelve los datos contenidos en el fichero codificados en Base
64.
setFile(content)
Función guarda el contenido de la variable en un fichero.
Entrada
•
content
Contenedor de los datos codificados en base 64 que se va ha proceder a
guardar.
Salida
Path completo del fichero guardado.
hashText(sData, sHashAlgorithm, sEncoding)
Codifica el texto recibido como parámetro según el parámetro sEncoding (si
no se especifica dicho texto es codificado en ISO-8859-1), una vez codificado
aplica el algoritmo hash recibido como parámetro, una vez realizado el hash
codifica el resultado en Base64.
Entrada
•
sData
String que contiene los datos a los que hay que aplicar la función hash.
•
sHashAlgorithm
String que contiene el tipo de algoritmo de hash para la firma. Posibles
valores: HASH_MD2, HASH_MD4, HASH_MD5, HASH_SHA1.
•
Título:
Revisión:
Fecha:
sEncoding
Manual de integración WebSigner
v 1.3
junio de 2006
41
String que contiene el tipo de codificación a aplicar a los datos antes de que
les sean aplicados la función hash. Posibles valores: US-ASCII, ISO-8859-1,
UTF-8, UTF-16BE, UTF-16LE, UTF-16
Salida
La función devolverá el hash de los datos en Base64 si la función ha
funcionado correctamente y null en caso contrario.
hashDocument(sHashAlgorithm, sPathDocument)
Aplica el algoritmo hash recibido como parámetro al contenido del documento,
una vez realizado el hash codifica el resultado en Base64.
Entrada
•
sHashAlgorithm
String que contiene el tipo de algoritmo de hash para la firma. Posibles
valores: HASH_MD2, HASH_MD4, HASH_MD5, HASH_SHA1.
•
sPathDocument
Indica la ruta del documento a firmar. Este parámetro es opcional, si no se
pasa ruta la función abrirá un explorador para que el usuario seleccione el
archivo deseado.
Salida
La función devolverá el hash del contenido del fichero en Base64 si la función
ha funcionado correctamente y null en caso contrario.
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
42
2.3_ Orden lógico de invocación de
procedimientos
Este punto recoge el orden lógico de invocación de los procedimientos
anteriores:
1. Inicialización de controles y librerías
Para ello es necesario invocar a la siguiente función:
initWebSigner (sOnlyWithPrivateKey)
La función recibe un parámetro que indica si se van a seleccionar los
certificados con clave privada o no. Esto permite establecer un filtro a
WebSigner a la hora de obtener los certificados del almacén. Estos
certificados los almacena una variable global de tipo array.
2. Obtención de certificados para firmar
getCertificates(bFilterCAs,
arrCAs,
sOnlyWithPrivateKey,
bOnlyNotExpired,
sCertificateFieldPart)
arrRestrictions,
sCertificateField,
Esta funcion devuelve un array con los certificados que se van a
seleccionar para ser mostrados más adelante en un combo en las
paginas HTML.
3. A partir de aquí, la función a invocar depende de la funcionalidad
requerida:
Firma de datos
Para la firma de datos se pueden utilizar las siguientes
funciones, dependiendo de si se firma un formulario o un
fichero y si se especifica el certificado con el que se firma a
partir de un índice respecto a la lista de certificados o a partir
del emisor y el número de serie del certificado:
Título:
Revisión:
Fecha:
signByIssuerAndSerialNumber(sIssuer,
bDetached, sFormat, sHashAlgorithm,
parent, bSignDate, sIdCert)
signByIndex(iCertificatePos,
sHashAlgorithm,
envelopetype,
sIdCert)
getFile()
Manual de integración WebSigner
v 1.3
junio de 2006
sSerialNumber,
sData,
envelopetype, signElement,
sData,
bDetached,
signElement,
parent,
sFormat,
bSignDate,
43
La función getFile() tiene como cometido seleccionar el fichero que
luego se va firmar.
signFileByIndex(iCertificatePos,
bDetached,
sHashAlgorithm,
sContent,
envelopetype,
signElement,
bSignDate, sIdCert)
sFormat,
parent,
signFileByIssuerAndSerialNumber(sIssuer,sSerialNumber,
bDetached,
sFormat,
sHashAlgorithm,
sContent,
envelopetype,
signElement,
parent, bSignDate, sIdCert)
Para añadir firmantes de forma secuencial a firmas ya generadas
usaremos las siguientes funciones:
•
•
addNestedSignByIndex(iCertificatePos,sSourceSignedData,
sFormat,sHashAlgorithm,envelopetype,
signElement,
bSignDate, sIdCert)
parent,
addNestedSignByIssuerAndSerialNumber(sIssuer,sSerialNumber,
sSourceSignedData,sFormat,sHashAlgorithm,envelopetype, signElement,
parent, bSignDate, sIdCert)
Para añadir firmantes de forma paralela a firmas ya generadas
usaremos las siguientes funciones:
•
cosignByIndex(iCertificatePos,
sHashAlgorithm,
envelopetype,
sIdCert)
sSignedData,
signElement,
parent,
sFormat,
bSignDate,
•
cosignFileByIndex(iCertificatePos,
sSignedData,
sHashAlgorithm,
envelopetype,
signElement,
parent,
sIdCert)
sFormat,
bSignDate,
•
cosignByIssuerAndSerialNumber(sIssuer, sSerialNumber, sSignedData,
sFormat,
sHashAlgorithm,
envelopetype,
signElement,
parent,
bSignDate, sIdCert)
Verificación de firma
Para la verificación de la firma se pueden utilizar las siguientes
funciones, dependiendo de si se verifica la firma de un
formulario o de un fichero.
•
verifyFile(sSignedData,bDetached, sDetachedData, sFormat)
•
verify(sSignedData,bDetached, sDetachedData, sFormat)
Cifrado de datos
Para el cifrado de datos se pueden utilizar las siguientes
funciones, dependiendo de si se cifra un formulario o un fichero
y si se especifica el certificado con el que se cifra a partir de un
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
44
índice respecto a la lista de certificados o a partir del emisor y
el número de serie del certificado
•
encryptFileByIndex(arrCertificatePos,sData,sSimmetricAlgorithm,
sFormat, sIdCert)
•
encryptByIndex(arrCertificatePos,sData,sSimmetricAlgorithm,
sFormat, sIdCert)
•
encryptByIssuerAndSerialNumber(sIssuer,sSerialNumber,
arrCertificatePos, sData, sSimmetricAlgorithm, sFormat, sIdCert)
•
encryptFileByIssuerAndSerialNumber(sIssuer,sSerialNumber,
arrCertificatePos, sData, sSimmetricAlgorithm, sFormat, sIdCert)
setFile()
La función setFile() tiene como cometido guardar el documento que
ha sifo cifrado.
Descifrado de datos cifrados con anterioridad
Para el descifrado de datos cifrados se pueden utilizar las
siguientes funciones, dependiendo de si ha de descifrar un
texto cifrado o un fichero cifrado.
•
decrypt(sEncryptedData)
•
decryptFile(sEncryptedData)
Firma y cifrado de datos.
Para la firma y el cifrado de datos se pueden utilizar las
siguientes funciones dependiendo de si se especifica el
certificado con el que se firma a partir de un índice respecto a
la lista de certificados o a partir del emisor y el número de serie
del certificado
Título:
Revisión:
Fecha:
•
signAndEncryptByIndex(iSignerCertificatePos,
sFormat,
sHashAlgorithm,
arrTargetCertificatePos, bSignDate, sIdCert)
•
signAndEncryptByIssuerAndSerialNumber(sIssuer,sSerialNumber,sData,
bDetached,
sFormat,
sHashAlgorithm,
sSimmetricAlgorithm,
arrTargetCertificatePos, bSignDate, sIdCert)
Manual de integración WebSigner
v 1.3
junio de 2006
sData,
bDetached,
sSimmetricAlgorithm,
45
2.4_ Integración de WebSigner en una página
HTML
1. Incluir el script WS.js (o WS_Full.js, si se desea disponer de la
funcionalidad de firma y verificación XMLDSig en el applet, es decir, para
utilizar el applet completo), que discrimina el tipo de navegador usado y en
base a esto introduce la referencia correcta al interfaz de WebSigner, en la
cabecera de la página:
<script language="javascript" src="http://ASF.tbsolutions.com:8080/ASF/js/WS.js" type="text/javascript"></script>
En el caso de que el navegador utilizado sea Internet Explorer, WS.js
introducirá:
<object id="oWebSigner_Crypto"
style="position:absolute;top:50;left=-3"
codebase="'+_WEBSIGNER_LOCATION+'WebSignerCOM.cab#Version='+_WEBSIGN
ER_VERSION+'"
classid="CLSID:04521414-1636-464C-BFEE-6348EDD34BCD"
VIEWASTEXT> </object>
<object id="oCAPICOM" style="position:absolute;top:-25;left=-3"
codeBase="' + _WEBSIGNER_LOCATION + 'capicom.cab#version=2,0,0,0"
classid="clsid:A996E48C-D3DC-4244-89F7-AFA33EC60679" VIEWASTEXT>
</object>
<script language="JavaScript" src="' + jsURL + 'WSIE.js"></script>
<script
language="JavaScript"
src="'
+
jsURL
+
src="'
+
jsURL
+
'WSIE_const.js"></script>
<script
language="JavaScript"
'WSIE_utils.js"></script>
En el caso de que el navegador utilizado sea Nestcape o Mozilla
introducirá :
WS.js
<script language="JavaScript" src="' + jsURL + 'WSNN.js"></script>
<script language="JavaScript" src="' + jsURL +
'WSNN_const.js"></script>
<script language="JavaScript" src="' + jsURL +
'WSNN_util.js"></script>
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
46
2. Seguir los pasos indicados en el punto Orden lógico de invocación de
procedimientos
En los anexos se adjuntan ejemplos de integración en una página html para
todas las acciones posibles indicadas con anterioridad en este documento.
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
47
3_ Anexo I: Firma Paralela de Formulario
A continuación se adjunta el código fuente de una página HTML donde se
integra WebSigner para la firma paralela de formularios:
<!DOCTYPE
HTML
PUBLIC
"-//W3C//DTD
HTML
4.01
Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ page import = " jfactory.exchange.ResultInfo,
java.util.ArrayList,
com.tbsolutions.asf.demo.util.Util,
com.tbsolutions.asf.policymanager.sa.CertAppOperationRestrictionsInfoSet,
com.tbsolutions.asf.policymanager.sa.CertAppOperationRestrictionsInfo,
com.tbsolutions.asf.policymanager.sa.RestrictionInfo,
com.tbsolutions.asf.policymanager.sa.CertTypeInfo,
com.tbsolutions.asf.securityagent.*"
contentType="text/html; charset=iso-8859-1"%>
<%!
//Filtra la cadena pasada como parámetro, sustituyendo \ por \\ y " por
\"
public static String Filter(String cadena) {
String filtered = "";
for (int i = 0; i < cadena.length(); i ++) {
if (cadena.charAt(i) == '\\') {
filtered += "\\\\";
}
else if (cadena.charAt(i) == '"') {
filtered += "\\\"";
}
else {
filtered += cadena.charAt(i);
}
}
return filtered;
}
%>
<%
String gsURL = Util.getPropertyAsString(Util.ASF_URL);
boolean ssoEnabled = Util.getPropertyAsBool(Util.SSO_ENABLED_PROP);
boolean advancedDemo = false;
try {
advancedDemo = Util.getPropertyAsBool(Util.ADVANCED_DEMO);
} catch (Exception e) {
}
%>
<html>
<head>
<title>Firma Texto Paralelo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="estilos.css" rel="stylesheet" type="text/css">
<script
language="javascript"
src="<%=gsURL%>js/WS.js"
type="text/javascript"></script>
<script
language="javascript"
src="utils.js"
type="text/javascript"></script>
<script language="javascript">
<!-var
var
var
var
var
var
var
var
Título:
Revisión:
Fecha:
iCertificatePos;
iSerialNumber;
iIssuer;
sFormat;
sHashAlgorithm;
bDetached;
bSignDate;
bIdentifyBySubjectKI = "1";
Manual de integración WebSigner
v 1.3
junio de 2006
48
<%
if(ssoEnabled){
%>
recargarMenu();
<%
}
%>
function readFilterValues(){
iCertificatePos = document.formData.selCertificate.value;
<%
if(advancedDemo){
%>
iSerialNumber = document.formData.selSerialNumber.value;
iIssuer = document.formData.selIssuer.value;
bSignDate = document.formData.signDate.checked;
<%
}
%>
if (document.formData.formato[0].checked){
sFormat = MT_PKCS7;
}
if (document.formData.formato[1].checked){
sFormat = MT_CMS;
bIdentifyBySubjectKI = document.formData.identifyBy.value;
}
bDetached = document.formData.tipo[1].checked;
sHashAlgorithm = document.formData.hashAlgorithm.value;
}
function resetValues(){
document.formData.firmatexto.disabled = false;
document.formData.afirmatexto1.disabled = true;
document.formData.vfirmatexto.disabled = false;
document.formData.datos.value = "Texto a fimar";
document.formData.datosfirmados.value = "";
document.formData.datosverificar.value="";
document.formData.formato[0].disabled = false;
document.formData.formato[1].disabled = false;
document.formData.tipo[0].disabled = false;
document.formData.tipo[1].disabled = false;
if (nn || nn6) {
resetFirmaNN();
}
}
function radioChanged(radio) {
if(radio[1].checked) {
document.formData.identifyBy.disabled = false;
} else {
document.formData.identifyBy.disabled = true;
}
}
function firmatexto_onclick(){
readFilterValues();
//firmar
if
(document.formData.datos.value!=null
document.formData.datos.value!="") {
var sData = document.formData.datos.value;
var sSignedData = null;
&&
<%
if(advancedDemo){
%>
if(document.formData.selType[0].checked == true){
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
49
sSignedData = signByIndex(iCertificatePos, sData, bDetached,
sFormat,
sHashAlgorithm,
null,
null,
null,
bSignDate,
bIdentifyBySubjectKI);
} else {
sSignedData
=
signByIssuerAndSerialNumber(iIssuer,
iSerialNumber, sData, bDetached, sFormat, sHashAlgorithm, null, null,
null, bSignDate, bIdentifyBySubjectKI);
}
<%
} else {
%>
sSignedData
=
signByIndex(iCertificatePos,
sData,
bDetached,
sFormat, sHashAlgorithm, null, null, null, false, bIdentifyBySubjectKI);
<%
}
%>
if (sSignedData!=null)
{
document.formData.datosfirmados.value = sSignedData;
document.formData.firmatexto.disabled = true;
document.formData.afirmatexto1.disabled = false;
document.formData.vfirmatexto.disabled = false;
document.formData.vfirmatextoser.disabled=false;
document.formData.formato[0].disabled = true;
document.formData.formato[1].disabled = true;
}
else {
alert("Se ha producido algún error al firmar");
}
}
else
{
alert("Debe de introducir un texto para poder firmar.");
}
}
function afirmatexto1_onclick(){
readFilterValues();
//firmar
if
(document.formData.datosfirmados.value!=null
document.formData.datosfirmados.value!="")
{
var sDetachedData = document.formData.datos.value;
var sSignedData = document.formData.datosfirmados.value;
&&
<%
if(advancedDemo){
%>
if(document.formData.selType[0].checked == true){
sSignedData
=
cosignByIndex(iCertificatePos,
sSignedData,
bDetached, sDetachedData, sFormat, sHashAlgorithm, null, null, null,
bSignDate, bIdentifyBySubjectKI);
} else {
sSignedData
=
cosignByIssuerAndSerialNumber(iIssuer,
iSerialNumber,
sSignedData,
bDetached,
sDetachedData,
sFormat,
sHashAlgorithm);
}
<%
} else {
%>
sSignedData
=
cosignByIndex(iCertificatePos,
sSignedData,
bDetached, sDetachedData, sFormat, sHashAlgorithm, null, null, null,
false, bIdentifyBySubjectKI);
<%
}
%>
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
50
if (sSignedData!=null)
{
document.formData.datosfirmados.value = sSignedData;
}
else {
alert("Se ha producido algún error al añadir una firma
paralela");
}
}
else
{
alert("Debe de haber firmado un texto anteriormente para poder
añadir una nueva firma.");
}
}
function vfirmatexto_onclick()
{
readFilterValues();
if
(document.formData.datosfirmados.value!=null
document.formData.datosfirmados.value!="")
{
var sResult = null;
var arrResult = null;
&&
arrResult
=
verify(document.formData.datosfirmados.value,
bDetached,
document.formData.datos.value,sFormat);
sResult = "RESULTADO DE LA VERIFICACIÓN\n";
sResult += "--------------------------------------------\n";
if (arrResult!=null){
for (var i=0;i < arrResult.length;i++){
var iVerifyResult = arrResult[i][ERROR_VERIFY_INDEX];
var sVerifyResult = "\n-Error desconocido\n";
var sSigner = arrResult[i][SIGNER_VERIFY_INDEX];
if (iVerifyResult == VERIFY_OK) sVerifyResult = "\n-Firma
Correcta ";
if (iVerifyResult == VERIFY_BAD_SIGNATURE) sVerifyResult =
"\n-Firma Incorrecta ";
if (iVerifyResult == VERIFY_BAD_CERT_CHAIN) sVerifyResult =
"\n-El certificado no ha podido ser verificado, falta cadena de
certificación ";
if
(iVerifyResult
==
VERIFY_BAD_SIGNATURE_AND_CERT)
sVerifyResult = "\n-Firma incorrecta y certificado no ha podido ser
verificado ";
if
(iVerifyResult
==
VERIFY_ALGORITHM_NOT_DEFINED)
sVerifyResult = "\n-Firma incorrecta, algoritmo de firma no definido ";
if (iVerifyResult == CERTIFICATE_NOT_FOUND) sVerifyResult =
"\n-Firma incorrecta, certificado no encontrado ";
if (iVerifyResult == VERIFY_BAD_CERT_USAGE) sVerifyResult =
"\n-Firma incorrecta y uso de certificado no válido para la firma ";
if
(iVerifyResult
==
VERIFY_BAD_CERT_VALIDITY)
sVerifyResult = "\n-Firma incorrecta, certificado caducado ";
if
(iVerifyResult
==
INVALID_SIGNATURE_FORMAT)
sVerifyResult = "\n-Firma incorrecta, formato de firma incorrecto";
if (sSigner != "") sVerifyResult += ":" + sSigner;
sVerifyResult += "\n";
sResult += sVerifyResult;
}
alert(sResult);
}
}
else
{
alert("Debe
haber
datos
firmados
para
poder
realizar
la
verificacion.");
}
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
51
}
function vfirmatextoserv_onclick()
{
if (document.formData.datosfirmados.value!="")
{
document.formData.action="VerifyServidorP.jsp";
document.formData.submit();
}
else
{
alert("Debe firmar para poder realizar la verificación.");
}
}
function addOption(list,optionText,optionValue){
list.options[list.options.length]
Option(optionText,optionValue);
}
=
new
<%
if(advancedDemo){
%>
function selType_onclick(){
if(document.formData.selType[0].checked == true){
document.formData.selIssuer.disabled = true;
document.formData.selSerialNumber.disabled = true;
document.formData.selCertificate.disabled = false;
} else {
document.formData.selCertificate.disabled = true;
document.formData.selIssuer.disabled = false;
document.formData.selSerialNumber.disabled = false;
}
}
<%
}
%>
function initAlgorithms(list){
list.options.length=0;
addOption(list,"HASH_SHA1",HASH_SHA1);
addOption(list,"HASH_MD5",HASH_MD5);
addOption(list,"HASH_MD2", HASH_MD2);
}
function init(){
var bFilterCAs = true;
if (bFilterCAs)
{
<% CertAppOperationRestrictionsInfoSet listaCAs=null;
String applicationID="1";
String operationID="1";
listaCAs=SecurityAgentPM.getValidCAsSignS(applicationID,
operationID, "1");
%>
var arrCAs = new Array(<%=listaCAs.getArrayList().size()%>);
var
arrRestrictions
=
new
Array(<%=listaCAs.getArrayList().size()%>);
<%
for (int i=0; i < listaCAs.getArrayList().size(); i++)
{
CertAppOperationRestrictionsInfo
info
=
(CertAppOperationRestrictionsInfo) listaCAs.getArrayList().get(i);
CertTypeInfo CA = info.getCertTypeInfo();
%>
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
52
arrCAs[<%=i%>] = "<%=Filter(CA.getIssuer())%>";
arrRestrictions[<%=i%>]
=
new
Array("<%=Filter(info.getRestrictionFields())%>","<%=Filter(info.getRestri
ctionPatterns())%>");
<%
}%>
}
else
{
var arrCAs=new Array();
var arrRestrictions=new Array();
}
var sCertificateField = CERTIFICATE_SUBJECT;
var sCertificateFieldPart = CERTIFICATE_CN;
var sOnlyWithPrivateKey = ST_PRI_KEY;
var bOnlyNotExpired = false;
var arrCertificates = new Array();
var arrIssuers = new Array();
var arrSNs = new Array();
if (initWebSigner(ST_ALL_KEY)){
arrCertificates
=
getCertificates(bFilterCAs,
arrCAs,
arrRestrictions, sOnlyWithPrivateKey, bOnlyNotExpired, sCertificateField,
sCertificateFieldPart);
//Load certificate list with array
document.formData.selCertificate.options.length=0;
for (var i=0;i< arrCertificates.length;i++){
if (arrCertificates[i] != null)
{
if (arrCertificates[i] != ""){
addOption(document.formData.selCertificate,arrCertificates[i][1],arrCerti
ficates[i][0]);
}
}
}
<%
if(advancedDemo){
%>
arrIssuers
=
getCertificates(bFilterCAs,
arrCAs,
arrRestrictions, sOnlyWithPrivateKey, bOnlyNotExpired, CERTIFICATE_ISSUER,
"");
document.formData.selIssuer.options.length=0;
for (var i=0;i< arrIssuers.length;i++){
if (arrIssuers[i] != null) {
if (arrIssuers[i] != "") {
var issuerSt = new String(arrIssuers[i][1]);
var arrayAtrib = new Array();
arrayAtrib = issuerSt.split(",");
addOption(document.formData.selIssuer,
arrayAtrib[0], arrIssuers[i][1]);
}
}
}
arrSNs = getCertificates(bFilterCAs, arrCAs, arrRestrictions,
sOnlyWithPrivateKey, bOnlyNotExpired, CERTIFICATE_SERIALNUMBER, "");
document.formData.selSerialNumber.options.length=0;
for (var i=0;i< arrSNs.length;i++){
if (arrSNs[i] != null) {
if (arrSNs[i] != "") {
addOption(document.formData.selSerialNumber,
arrSNs[i][1], arrSNs[i][1]);
}
}
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
53
}
selType_onclick();
<%
}
%>
}
//init hash algorithm list
initAlgorithms(document.formData.hashAlgorithm);
}
//-->
</script>
</head>
<body onload="init()">
<form name="formData" id="formData" method="post">
<input type="hidden" name="origen" value="SignTextP.jsp">
<table width="100%" border="0" cellspacing="16" cellpadding="0">
<tr>
<th colspan="4">Firma y verificación en paralelo de un
texto</th>
</tr>
<tr>
<td>Formato:</td>
<td>
<input
type="radio"
name="formato"
value="1"
checked
onClick="javascript:radioChanged(document.formData.formato);"
onKeyPress="javascript:radioChanged(document.formData.formato);">PKCS#7
<input
type="radio"
name="formato"
value="2"
onClick="javascript:radioChanged(document.formData.formato);"
onKeyPress="javascript:radioChanged(document.formData.formato);">CMS
</td>
<td>Identificador de usuario a incluir: </td>
<td>
<select disabled name="identifyBy">
<option value="1">Issuer + Serial Number</option>
<option value="2">Subject Key Identifier</option>
</select>
</td>
</tr>
<tr>
<td>Tipo:</td>
<td>
<input name="tipo" type="radio" value="1" checked>Attached
<input type="radio" name="tipo" value="2">Detached </td>
<td>Algoritmo de resumen:</td>
<td>
<select name="hashAlgorithm" id="select">
</select>
</td>
</tr>
<%
if(advancedDemo) {
%>
<tr>
<td colspan="4">
<input type="checkbox" name="signDate"/> Firmar el Atributo Fecha
</td>
</tr>
<tr>
<td>Seleccion de Certificado:</td>
<td colspan="3" >
<input
type="radio"
name="selType"
value="1"
checked
onclick="javascript:selType_onclick()">Por posicion
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
54
<input
type="radio"
name="selType"
value="2"
onclick="javascript:selType_onclick()">Por Issuer y SN
</td>
</tr>
<%
}
%>
<tr>
<td>Certificado:</td>
<td colspan="3"><select name="selCertificate" id="select3">
</select></td>
</tr>
<%
if(advancedDemo) {
%>
<tr>
<td>Issuer and SN:</td>
<td colspan="3">
<select name="selIssuer" id="selIssuer"></select>
<select name="selSerialNumber" id="selSerialNumber"></select>
</td>
</tr>
<%
}
%>
<tr>
<td height="24" colspan="4">Introduzca el texto que desea firmar:</td>
</tr>
<tr>
<td colspan="2">
<textarea
name="datos"
cols="80"
rows="5"
id="datos">Texto
a
firmar</textarea>
</td>
<td colspan="2" valign="bottom">
<p>
<input name="setValue" type=button class="boton" id="setValue2"
onClick="javascript:resetValues();" value="Reiniciar">
</p>
<p>
<input class="boton" name="firmatexto" type=button
onClick="javascript:firmatexto_onclick();" value="Firmar">
<input
class="boton"
name="afirmatexto1"
type=button
onClick="javascript:afirmatexto1_onclick();"
disabled="true"
value="Añadir firma Paralela">
</p></td>
</tr>
<tr>
<td colspan="4">Resultado de la firma (en BASE64) :</td>
</tr>
<tr>
<td colspan="2">
<%String Dato="";
if
(request.getParameter("datosfirmados")!=""
&&
request.getParameter("datosfirmados")!=null)
{
Dato=request.getParameter("datosfirmados");
}
%>
<textarea
name="datosfirmados"
cols="80"
rows="5"
id="datosfirmados"><%=Dato%></textarea>
</td>
<td colspan="2" valign="bottom"><p>
<input
class="boton"
name="vfirmatexto"
type=button
onClick="javascript:vfirmatexto_onclick();" value="Verificar Firma">
</p>
</td>
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
55
</tr>
<tr>
<td colspan="2">
<%String mensaje="";
if
(request.getParameter("mensaje")!=""
&&
request.getParameter("mensaje")!=null)
{
mensaje=request.getParameter("mensaje");
}
%>
<textarea
name="datosverificar"
cols="80"
rows="5"
id="datosverificar"><%=mensaje%></textarea>
</td>
<td colspan="2" valign="bottom"><p>
<input
class="boton"
name="vfirmatextoser"
type=button
onClick="javascript:vfirmatextoserv_onclick();" value="Verificar Firma en
Servidor">
</p>
</td>
</tr>
</table>
<br>
<center>
<input
name="back"
type="button"
class="boton"
id="back2"
onClick="window.location.href='indexFormulario.html'" value="Volver">
</center>
</form>
</body>
</html>
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
56
4_ Anexo II: Cifrado de Formulario
A continuación se adjunta el código fuente de una página HTML donde se
integra WebSigner para el cifrado de un formulario:
<%@ page import = "jfactory.exchange.ResultInfo,
java.util.ArrayList,
com.tbsolutions.asf.policymanager.sa.*,
com.tbsolutions.asf.demo.util.Util,
com.tbsolutions.asf.securityagent.*"
contentType="text/html; charset=iso-8859-1"%>
<%!
//Filtra la cadena pasada como parámetro, sustituyendo \ por \\ y " por
\"
public static String Filter(String cadena) {
String filtered = "";
for (int i = 0; i < cadena.length(); i ++) {
if (cadena.charAt(i) == '\\') {
filtered += "\\\\";
}
else if (cadena.charAt(i) == '"') {
filtered += "\\\"";
}
else {
filtered += cadena.charAt(i);
}
}
return filtered;
}
public static String GetName(String issuer) {
int index, index2, prefix;
String issuerAux = issuer.toUpperCase();
index = issuerAux.indexOf("CN=");
if (index == -1) {
//No hay CN => buscamos la OU más externa
index = issuerAux.indexOf("OU=");
if (index == -1) {
//No hay OU => buscamos la O
index = issuerAux.indexOf("O=");
if (index == -1) {
return "";
}
else {
prefix = 2;
}
}
else {
prefix = 3;
}
}
else {
prefix = 3;
}
//Hay que comprobar que el valor del campo no está entre comillas
if (issuerAux.charAt(index + prefix) != '"') {
index2 = issuerAux.indexOf(",", index + prefix);
if (index2 == -1) {
return
issuer.substring(index
+
prefix,
issuer.length());
}
else {
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
57
return issuer.substring(index + prefix, index2);
}
}
else {
index2 = issuerAux.indexOf("\"", index + prefix + 1);
if (index2 == -1) {
//Error, no hay comilla de cierre
return "";
}
else {
return
issuer.substring(index
+
prefix
+
1,
index2);
}
}
}
public static String parseaTexto(String original)
{
StringBuffer resultado = new StringBuffer("");
int length = original.length();
for (int i = 0; i < length; i++)
{
if (original.charAt(i) == 0x0A){
resultado.append(0x0A);
}else{
resultado.append(original.charAt(i));
}
}
return resultado.toString();
}
%>
<%
boolean ssoEnabled = Util.getPropertyAsBool(Util.SSO_ENABLED_PROP);
String gsURL = Util.getPropertyAsString(Util.ASF_URL);
String
certificateSeparator
Util.getPropertyAsString(Util.CERTIFICATE_SEPARATOR);
boolean advancedDemo = false;
try {
advancedDemo = Util.getPropertyAsBool(Util.ADVANCED_DEMO);
} catch (Exception e){}
=
// "true" si ya ha sido definido.
String
profileDefined
=
(String)
request.getSession().getAttribute("USER_N6_PROFILE");
if (profileDefined == null) {
profileDefined = "";
}
// Establecemos para el resto de paginas que el perfil ya ha sido
definido
request.getSession().setAttribute("USER_N6_PROFILE",
new
String("true"));
%>
<html>
<head>
<title>Demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="estilos.css">
<script
language="javascript"
src="<%=gsURL%>js/WS.js"
type="text/javascript"></script>
<script
language="javascript"
src="utils.js"
type="text/javascript"></script>
<script language="Javascript">
<!-<%
if(ssoEnabled){
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
58
%>
recargarMenu();
<%
}
%>
function enviarFormularioACifrar() {
if (document.formData.file.value.length == 0) {
alert("Introduzca el texto a cifrar");
return false;
}
if
(formData.SelecCertificate.value.length==0
&&
formData.SelecAliases.value.length==0
&&
formData.SelecIssuer.value.length==0
&&
formData.SelecAttributes.value.length==0)
{
alert("Introduzca
los
certificados
para
cifrar
como
destinatarios");
return false;
}
if (!formData.SelecCertificate.disabled)
document.formData.tarjectCertificates.value
=
getInfoByIndex(document.formData.SelecCertificate.value)[5];
if (!formData.SelecAliases.disabled)
document.formData.tarjectAliases.value
=
document.formData.SelecAliases.value;
if (!formData.SelecAttributes.disabled)
document.formData.tarjectAttributes.value
=
document.formData.SelecAttributes[document.formData.SelecAttributes.select
edIndex].text;
document.formData.action = "CipherServidor.jsp";
document.formData.submit();
return false;
}
function enviarFormularioADescifrar() {
if (document.formData.selAlias.value.length==0)
{
alert("Introduzca el certificado para descifrar. ");
return false;
}
else
{
document.formData.tarjectselAlias.value=document.formData.selAlias.value;
}
if
(document.formData.datoscifrados.value==null
||
document.formData.datoscifrados.value=="")
{
alert("Para realizar el descifrado debe haber datos cifrados. ");
return false;
}
document.formData.action = "DecryptionServidor.jsp";
document.formData.submit();
return false;
}
function borrarCertificado() {
return false;
}
function addOption(list,optionText,optionValue){
list.options[list.options.length]
Option(optionText,optionValue);
}
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
=
new
59
<%
CertAppOperationRestrictionsEncInfoSet listaCAs=null;
%>
function initAlgorithms(list)
{
list.options.length=0;
addOption(list,"DES",SCA_DES);
addOption(list,"3DES-CBC",SCA_3DES);
addOption(list,"RC2", SCA_RC2);
}
function checkChanged(checkBox) {
if(checkBox.checked){
checkBox.value = "true";
} else {
checkBox.value = "false";
}
}
function verifCertChange() {
checkChanged(document.formData.verifCert);
if(document.formData.verifCert.value == "false") {
document.formData.noRep.disabled = true;
document.formData.cache.disabled = true;
} else {
document.formData.noRep.disabled = false;
document.formData.cache.disabled = false;
}
}
function initAlgorithmsAsy(list) //algoritmos asymetricos
{
list.options.length=0;
addOption(list,"RSA",RSA);
addOption(list,"DH",DH);
}
function init()
{
<%
String dcifrados=(String)session.getAttribute("datoscifrados");
String ddescifrados=(String)session.getAttribute("datosdescifrados");
String resultcif=(String)session.getAttribute("resultadocif");
String resultdescif=(String)session.getAttribute("resultadodescif");
if (dcifrados!="" && dcifrados!=null)
{
session.setAttribute("datoscifrados",null);
%>
document.formData.datoscifrados.value="<%=parseaTexto(dcifrados)%>";
<%
if (resultcif!="" && resultcif!=null)
{
session.setAttribute("resultadocif",null);
%>
document.formData.resultcifrado.value="<%=resultcif%>";
<%
}
}
else
{
String mensaje="";
if
(request.getParameter("mensaje")!=""
request.getParameter("mensaje")!=null)
{
mensaje=request.getParameter("mensaje");
}
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
&&
60
%>
document.formData.resultcifrado.value=document.formData.resultcifrado.valu
e+" <%=mensaje%>";
<%
}
if (ddescifrados!="" && ddescifrados!=null)
{
session.setAttribute("datosdescifrados",null);
%>
document.formData.datosdescifrados.value="<%=parseaTexto(ddescifrados)%>"
;
<%
if (resultdescif!="" && resultdescif!=null)
{
session.setAttribute("resultadodescif",null);
%>
document.formData.resultdescifrado.value="<%=resultdescif%>";
<%
}
}
else
{
String mensaje2="";
if
(request.getParameter("mensaje2")!=""
request.getParameter("mensaje2")!=null)
{
mensaje2=request.getParameter("mensaje2");
}
%>
&
document.formData.resultdescifrado.value=document.formData.resultdescifra
do.value+" <%=mensaje2%>";
<%
}
%>
initAlgorithms(document.formData.hashAlgorithm);
<%
String applicationID="1";
String operationID="3";
%>
var bFilterCAs = true;
if (bFilterCAs)
{
<%
listaCAs=SecurityAgentPM.getValidCAsEncS(applicationID,
operationID, "1");
%>
var arrCAs = new Array(<%=listaCAs.getArrayList().size()%>);
var arrCert = new Array(<%=listaCAs.getArrayList().size()%>);
var
arrRestrictions
=
new
Array(<%=listaCAs.getArrayList().size()%>);
<%
for (int i=0; i < listaCAs.getArrayList().size(); i++)
{
CertAppOperationRestrictionsEncInfo
info
=
(CertAppOperationRestrictionsEncInfo) listaCAs.getArrayList().get(i);
CertTypeEncInfo CA = info.getCertTypeEncInfo();
%>
arrCAs[<%=i%>] = "<%=GetName(Filter(CA.getIssuer()))%>";
arrCert[<%=i%>] = "<%=CA.getCertTypeId()%>";
arrRestrictions[<%=i%>]
=
new
Array("<%=Filter(info.getRestrictionFields())%>","<%=Filter(info.getRestri
ctionPatterns())%>");
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
61
<% }%>
}
else
{
var arrCAs=new Array();
var arrRestrictions=new Array();
}
var sCertificateField = CERTIFICATE_SUBJECT;
var sCertificateFieldPart = CERTIFICATE_CN;
var sOnlyWithPrivateKey = ST_PRI_KEY;
var bOnlyNotExpired = true;
var arrCertificates = new Array();
if (initWebSigner(ST_ALL_KEY)){
arrCertificates
=
getCertificates(bFilterCAs,
arrRestrictions,sOnlyWithPrivateKey,
bOnlyNotExpired,sCertificateField,sCertificateFieldPart);
//Load certificate list with array
document.formData.SelecCertificate.options.length=0;
for (var i=0;i< arrCertificates.length;i++){
if (arrCertificates[i] != null)
{
if (arrCertificates[i] != ""){
arrCAs,
addOption(document.formData.SelecCertificate,arrCertificates[i][1],arrCert
ificates[i][0]);
}
}
}
}
<%
CertificateAliasInfoSet certif=new CertificateAliasInfoSet();
Long
oper=new
Long(com.tbsolutions.asf.util.Constants.ENCRYPTION_OPERATION);
certif=SecurityAgentPM.getCertificateAlisesS(oper, "1");
ArrayList arrCertif=certif.getArrayList();
%>
var aliases = new Array(<%=certif.getArrayList().size()%>);
<%
for (int i=0; i < arrCertif.size(); i++) {
CertificateAliasInfo info = (CertificateAliasInfo) arrCertif.get(i);
out.println("aliases[" + i + "]=\"" + info.getNickname() + "\";");
}
%>
modo();
var i;
var el;
document.getElementsByName("SelecIssuer")[0].options.length = 0;
for (i = 0; i < arrCAs.length; i ++) {
document.getElementsByName("SelecIssuer")[0].options.length = i + 1;
el = document.getElementsByName("SelecIssuer")[0].options.item(i);
el.text =arrCAs[i];
el.value = arrCert[i];
}
document.getElementsByName("SelecAliases")[0].options.length = 0;
for (i = 0; i < aliases.length; i ++) {
document.getElementsByName("SelecAliases")[0].options.length = i + 1;
el = document.getElementsByName("SelecAliases")[0].options.item(i);
el.text = aliases[i];
el.value = aliases[i];
}
//DESCIFRADO
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
62
initAlgorithmsAsy(document.formData.asiAlgorithm);
<%
AppOpeCertAliasInfoSet Alias=null;
String appli="1";
String operation="4";
Long
Long(com.tbsolutions.asf.util.Constants.DECRYPTION_OPERATION);
Alias=SecurityAgentPM.getAppOpeCertAliasesS(appli,
"1");
operD=new
operation,
operD,
ArrayList arrAlias=Alias.getArrayList();
CertificateAliasInfoSet
certifi=SecurityAgentPM.getCertificateAlisesS(operD, "1");
ArrayList arrCertifi=certifi.getArrayList();
for (int a=0;a< arrAlias.size() ;a++){
if (arrAlias.get(a) != null)
{
if (arrAlias.get(a) != ""){
AppOpeCertAliasInfo
infoCertAlias=(AppOpeCertAliasInfo)arrAlias.get(a);
for (int c=0; c<arrCertifi.size(); c++)
{
if (arrCertifi.get(c)!=null)
{
if (arrCertifi.get(c) !="")
{
CertificateAliasInfo
infoCertAlias2=(CertificateAliasInfo)arrCertifi.get(c);
if
(infoCertAlias.getCertAliasId()==infoCertAlias2.getCertificateAliasId())
{
%>
addOption(document.formData.selAlias,"<%=infoCertAlias2.getNickname()%>","
<%=infoCertAlias2.getNickname()%>");
<%
}
}
}
}
}
}
}
%>
}
function entidad_onChange()
{
var c=document.formData.SelecIssuer.value;
document.formData.SelecAttributes.options.length = 0;
<%
// Remote invocation
for (int j = 0; j < listaCAs.getArrayList().size(); j++)
{
ArrayList allowedAttributes = new ArrayList();
CertAppOperationRestrictionsEncInfo
infoca
(CertAppOperationRestrictionsEncInfo) listaCAs.getArrayList().get(j);
CertTypeEncInfo CA2 = infoca.getCertTypeEncInfo();
%>
if (c=="<%=CA2.getCertTypeId()%>")
{
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
=
63
<%
Long certId=new Long((long)CA2.getCertTypeId());
LdapAttributeInfoSet
ldapAttributeInfoSet=SecurityAgentPM.getValidLdapSearchAliasesS(certId,
"1");
allowedAttributes.addAll(ldapAttributeInfoSet.getArrayList());
for (int k=0; k<allowedAttributes.size(); k++)
{
LdapAttributeInfo
attinfo=(LdapAttributeInfo)
allowedAttributes.get(k);
if (attinfo.getAlias()!="" && attinfo.getAlias()!=null)
{
%>
addOption(document.formData.SelecAttributes,"<%=attinfo.getAlias()%>","<%=
attinfo.getLdapAttributeId()%>");
<%
}
}
%>}
<%
}
%>
}
function modo(){
if (formData.Seleccionar[0].checked)
{
formData.SelecCertificate.disabled=false;
formData.SelecAliases.disabled=true;
formData.SelecIssuer.disabled=true;
formData.SelecAttributes.disabled=true;
formData.attValue.disabled=true;
if (document.formData.tarjectCertificates.value.length == 0) {
document.formData.tarjectCertificates.value
getInfoByIndex(document.formData.SelecCertificate.value);
}
}
else if (formData.Seleccionar[1].checked)
{
formData.SelecCertificate.disabled=true;
formData.SelecAliases.disabled=false;
formData.SelecIssuer.disabled=true;
formData.SelecAttributes.disabled=true;
formData.attValue.disabled=true;
}
else if (formData.Seleccionar[2].checked)
{
formData.SelecCertificate.disabled=true;
formData.SelecAliases.disabled=true;
formData.SelecIssuer.disabled=false;
formData.SelecAttributes.disabled=false;
formData.attValue.disabled=false;
}
}
=
function resetValues(){
document.formData.resutlcifrado.value="";
document.formData.datoscifrados.value="";
document.formData.formato[0].disabled = false;
document.formData.formato[1].disabled = false;
document.formData.datosdescifrados.value="";
document.formData.resultdescifrado.value="";
}
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
64
//-->
</script>
</head>
<BODY onload="init()">
<form name="formData" method="post" action="">
<TABLE width="100%" border="0" cellspacing="16" cellpadding="0">
<tr>
<th colspan=4>Cifrado/Descifrado</th>
</tr>
<tr>
<td >Texto a cifrar: </TD>
<td
colspan="2"><input
type="text"
value="Texto
a
cifrar"
name="file" size="50">
</TD>
</tr>
<tr>
<td>Formato:</td>
<td colspan="2">
<input name="formato" type="radio" value="1" checked>PKCS#7
<input type="radio" name="formato" value="2">CMS
</td>
</tr>
<tr>
<td>Algoritmo simétrico de cifrado: </td>
<td colspan="2">
<select name="hashAlgorithm" id="select"></select>
</td>
</tr>
<!-- Esta Fila de la tabla servirá para definir tb los certificados por
alias (otra muy parecida) -->
<tr>
<td>Certificados de Usuario: </td>
<td colspan="2">
<select disabled name="SelecCertificate"></select>
<input
type=radio
name=Seleccionar
onClick="modo()"
value=1>Seleccionar CU
<script language="JavaScript">
if (esNN6 && "true" != "<%=profileDefined%>")
{
document.write('<select
name="SelecUserNN"></select>');
document.write('<input
type=button
name=SetProfile
class=boton
value="Establecer"
onClick="setUserProfileNT(document.formData.SelecUserNN.value);return
false;">');
showProfileListNT("SelecUserNN","");
}
</script>
</td>
</tr>
<tr>
<td>Certificados en BD: </td>
<td colspan="2">
<select disabled name="SelecAliases"></select>
<input
type=radio
name=Seleccionar
checked="true"
onClick="modo()" value=2>Seleccionar BD
</td>
</tr>
<tr>
<td>Entidad emisora: </td>
<td width="43%">
<select
disabled
name="SelecIssuer"
onChange="entidad_onChange()"></select>
</td>
<td width="27%" rowspan="3">
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
65
<input
type=radio
name=Seleccionar
onClick="modo()"
value=3>Seleccionar LDAP
</td>
</tr>
<tr>
<td>Atributo: </td>
<td>
<select disabled name="SelecAttributes">
<script language="JavaScript">
var i;
if
(document.getElementsByName("SelecAttributes")[0].options!=null)
{
document.getElementsByName("SelecAttributes")[0].options.length = 0;
}
</script>
</select>
</td>
</tr>
<TR>
<TD>Valor: </TD>
<TD><input disabled type="text" name="attValue" size=50></TD>
</TR>
<%
if(advancedDemo) {
%>
<tr>
<td>
<input
type="checkbox"
name="verifCert"
onclick="javascript:verifCertChange();"
onkeypress="javascript:verifCertChange();">Verificar
el
estado
de
revocacion
</td>
<td colspan="2" >
<input type="checkbox" name="noRep" disabled="true" value="false"
onClick="javascript:checkChanged(document.formData.noRep);"
onKeyPress="javascript:checkChanged(document.formData.noRep);"/> Registrar
No Repudio
<input
type="checkbox"
name="cache"
disabled="true"
value="false"
onClick="javascript:checkChanged(document.formData.cache);"
onKeyPress="javascript:checkChanged(document.formData.cache);"/>
Usar
Caches
</td>
</tr>
<%
}
%>
<tr>
<td colspan="3">Resultado del cifrado:</td>
</tr>
<tr>
<td colspan="2">
<textarea
name="datoscifrados"
cols="80"
rows="5"
id="datoscifrados"></textarea>
</td>
<td valign="bottom">
<input
name="button"
type="button"
class=boton
onClick="javascript:enviarFormularioACifrar();" value="Cifrar">
</td>
</tr>
<tr>
<td colspan="2">
<textarea
name="resultcifrado"
cols="80"
rows="3"
id="resutlcifrado"></textarea>
</td>
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
66
<td valign="bottom">
<input type=button class=boton name=borrar value="Borrar"
onClick="resetValues()">
</td>
</tr>
<tr>
<td>Algoritmo asimétrico de descifrado: </td>
<td colspan="2">
<select name="asiAlgorithm" id="select"></select>
</td>
</tr>
<!-- Esta Fila de la tabla servirá para definir tb los certificados por
alias (otra muy parecida) -->
<tr>
<td>Certificados en BD: </td>
<td colspan="2">
<select name="selAlias"></select>
</td>
</tr>
<tr>
<td colspan="3">Resultado del descifrado:</td>
</tr>
<tr>
<td colspan="2">
<textarea
name="datosdescifrados"
cols="80"
rows="5"
id="datosdescifrados"></textarea>
</td>
<td valign="bottom">
<input
name="button"
type="button"
class=boton
onClick="javascript:enviarFormularioADescifrar();" value="Descifrar">
</td>
</tr>
<tr>
<td colspan="2">
<textarea
name="resultdescifrado"
cols="80"
rows="3"
id="resutldescifrado"></textarea>
</td>
</tr>
</TABLE>
<input type="hidden" name="tarjectCertificates" value="">
<input type="hidden" name="tarjectAliases" value="">
<input type="hidden" name="tarjectAttributes" value="">
<input type="hidden" name="tarjectselAlias" value="">
</form>
<div id="cargando" method="post" style="top: 517px;left: 96px; position:
absolute; z-index:13;visibility:hidden;">
<form
name="formHidden"
ENCTYPE="multipart/form-data"
method="post"
action="">
<input type="hidden" name="tarjectValues" value="">
<input type="hidden" name="tarjectIssuer" value="">
<input type="hidden" name="data" value="">
<input type="hidden" name="pageOperation" value="">
</form>
</div>
</body>
</html>
Título:
Revisión:
Fecha:
Manual de integración WebSigner
v 1.3
junio de 2006
67
Descargar