Manual OpenTSAv1.0



Comments



Description

OpenTSA Yessica De AscencaoOPENTSA Elaborado por: Yessica De Ascencao [email protected] OpenTSA Yessica De Ascencao OPENTSA 1.- Marco teórico El objetivo del proyecto OpenTSA es desarrollar una aplicación cliente y servidor compatible, estable, segura, open source y libre para una autoridad de estampado de tiempo de acuerdo a los estándares y directivas expuestas en el RFC 3161 Internet X.509 Public Key Infrastructure Time-Stamp Protocol (TSP).[4] Este proyecto ofrece un conjunto de parches a OpenSSL para incorporar soporte al estampado de tiempo en la popular suite open source de criptografía pública. Para ello incorpora: ● El cliente de Estampado de Tiempo: una simple línea de comando que se puede utilizar para crear y enviar solicitudes de estampado de tiempo a través de HTTP o HTTPS a un TSS, y para recibir y verificar las respuestas. Esta utilidad se consigue con el parche para openSSL v0.9.8 o directamente en openSSL v1.0.0. Comando para creación y envío de solicitud: openssl ts -query [-rand file:file...] [-config configfile] [-data file_to_hash] [-digest digest_bytes] [-md2|-md4|-md5|-sha|-sha1|-mdc2|-ripemd160|...] [-policy object_id] [no_nonce] [-cert] [-in request.tsq] [-out request.tsq] [-text] Comando para verificar la respuesta recibida: openssl ts -verify [-data file_to_hash] [-digest digest_bytes] [-queryfile request.tsq] [-in response.tsr] [-token_in] [-CApath trusted_cert_path] [-CAfile trusted_certs.pem] [untrusted cert_file.pem ● El módulo de Estampado de Tiempo para Apache: este paquete consiste en una extensión para el servidor Apache HTTP. Utilizando la funcionalidad ofrecida por el parche de estampado de tiempo de OpenSSL, este módulo funciona como un servidor compatible con el RFC 3161 a través de protocolos de transporte HTTP y HTTPS, expidiendo tokens de estampado de tiempo que pueden ser almacenados en una base de datos MySQL, Postgres o FireBird. Comando para la generación y envío de la respuesta: openssl ts -reply [-config configfile] [-section tsa_section] [-queryfile request.tsq] [passin password_src] [-signer tsa_cert.pem] [-inkey private.pem] [-chain certs_file.pem] [-policy object_id] [-in response.tsr] [-token_in] [-out response.tsr] [token_out] [-text] [-engine id] Ahora bien, ¿cómo se usa?; cuando se tiene un archivo o una data, se aplica openssl ts -query para obtener el timestamping request y luego se manda a firmar el request en la autoridad de estampado de tiempo. El proveedor de estampado de tiempo recibe el request y aplica openssl ts -reply para generar el token de estampado de tiempo, y envía la repuesta al solicitante. El emisor distribuye la estampilla recibida junto con la data, y la persona OpenTSA Yessica De Ascencao interesada puede verificar la integridad y existencia de la data teniendo la data, la estampilla y el certificado del proveedor de estampado de tiempo, mediante la aplicación de openssl ts verify. 2.- Instalación y configuración De acuerdo a la descripción anterior, se tienen dos ambientes por instalar; el cliente y el servidor. El cliente de OpenTSA consiste simplemente en la instalación del OpenSSL que ofrece soporte para estampado de tiempo; openssl-1.0.0. Para ello es necesario instalar el paquete build-essential; el cual contiene las librerías necesarias para compilar, y luego descargar las fuentes desde la página oficial del proyecto, posteriormente ejecutar las siguientes instrucciones: ● tar -xvf openssl-version-tar.gz ● cd openssl-version ● ./config ● make ● make install Nota: se recomienda instalar la ultima versión estable de openssl publicada en fecha recientes. Ahora bien, del lado del servidor se tiene un proceso más complejo. Para la instalación de esta aplicación se requieren tener previamente instalados otros paquetes, en este mismo orden, así como también las librerías de build-essential: ● Un sistema de gestión de base de datos; MySQL, Postgres o FireBird, usaremos MySQL, la cual descargamos e instalamos desde los repositorios de Debian. ● OpenSSL en su última versión con soporte a TS. tar -xvf openssl-version-tar.gz cd openssl-version ./config make make install ● Apache, versión httpd-2.0.59. tar -xvf httpd-2.0.59.tar.gz cd httpd-2.0.59 ./configure make make install El primer paso consiste en instalar el módulo TSA en el servidor, para ello es necesario descargar las fuentes de “mod_tsa”, versión 2006, desde la fuente de OpenTSA e instalar el complemento apache2-prefork-dev de apache que ofrece soporte para apxs y apachectl; librerías que permiten cargar módulos y ejecutar el servicio de apache, respectivamente. Una vez se disponga del paquete es necesario realizar un cambio al Makefile de las fuentes del “mod_tsa”; dado que el apache es compilado, se requiere dar la ruta de las librerías antes instaladas.. En las líneas 21 y 22 del Makefile se deben cambiar a: OpenTSA Yessica De Ascencao APXS=apxs por APXS=/usr/local/apache2/bin/apxs APACHECTL=apachectl por APACHECTL=/usr/local/apache2/bin/apachectl El próximo paso es agregar el módulo mod_tsa.so (se puede conseguir en http://www.mediafire.com/?3zrc765un2az6mp); debe ser agregado previamente, al repositorio de módulos de apache /usr/local/apache2/modules. Seguidamente se agregan los módulos y el archivo de configuración de “mod_tsa” al archivo de configuración de apache; el cual se encuentra en /usr/local/apache2/conf/httpd.conf: ServerName localhost Para indicar el servidor donde se está implementando el servicio. LoadModule tsa_module /usr/local/apache2/modules/mod_tsa.so Para que al iniciar apache se levante el modulo que ofrecerá el soporte para estampado de tiempo. A veces se requiere añadir esta línea dos veces para lograr cargar el módulo. Include /path/mod_tsa/tsa.conf Añadir el archivo de configuración del mod_tsa, para cargar las directivas correspondientes. Luego se debe proceder a compilar las fuentes pero indicándole dónde se encuentran los binarios de OpenSSL y qué tipo de gestión de base de datos utilizaremos: make OPENSSL=<openssl_root> # TS_MYSQL=1 TS_FBSQL=1 TS_PGSQL=1, donde openss_root es /usr/local/ssl y en nuestro caso usamos el gestor MySQl: make OPENSSL=/usr/local/ssl TS:MYSQL=1 Ahora se procede a finalizar la instalación del modulo de OpenTSA para apache, ejecutando como root o administrador, la instrucción: make install Una vez finalizada la instalación del módulo, se debe terminar de configurar la base de datos, los certificados digitales y el archivo de configuración del “mod_tsa”. Para completar la estructura que conforma el servidor de Estampado de Tiempo, es preciso contar con una base de datos para almacenar los tokens de estampado de tiempo que se generen y envíen, por lo cual se crea una base de datos con el gestor MySQL. La estructura de dicha base de datos está conformada por una tabla llamada “token” y los siguientes campos: OpenTSA Yessica De Ascencao Campo token_id token_date Valor Serial unívoco del token. Fecha y hora de emisión del token. Codificación DER para el PKCS7 del token_pkcs7 token del estampado, en formato binario. El script para la creación de la tabla lo podemos encontrar en el paquete “mod_tsa”, y es el siguiente: create table token ( token_id varchar(40) not null primary key, token_date datetime not null, token_pkcs7 blob not null ); y se ejecuta con la siguiente instrucción: mysql -h <mysql_host> <database> -p < mysql_create.sql Luego se debe crear la clave privada, así como también el certificado para la TSSTime Stamping Server o Servidor de Estampado de Tiempo, en formato “.pem”. Ahora bien, antes de poder generar un certificado es necesario contar con una estructura PKI. Para crear la cadena de confianza con OpenSSL, se debe: 1. Crear la clave privada y el certificado autofirmado de la AC: openssl req -x509 -newkey rsa:2048 -keyout cakey.pem -days 3650 -sha256 -out cacert.pem Con este comando creamos un CA para certificados X509 con algoritmo de cifrado rsa de 2048 bytes. Con el -keyout le indicamos que la clave privada de nuestra CA se almacene en el fichero cakey.pem, con algoritmo de firma sha256 y la clave publica -out en el cacert.pem. Seguidamente pedirá un password para nuestra CA y se lo damos. También pedirá una serie de datos por ejemplo país, nombre de empresa que nos identifica como CA, entre otros. Y el parámetro -days con el que indicamos el tiempo de validez del certificado.[3] 2. Seguidamente se deben agregar algunos parámetros en el archivo de configuración del openSSL para poder generar certificados para estampado de tiempo. El archivo de configuración se encuentra en: /usr/local/ssl/openssl.cnf, y para poder establecer los tipos de extensiones que se emitirán para los certificados, debemos ubicarnos en la sección “[usr_cert]” del archivo de configuración y añadir: OpenTSA Yessica De Ascencao [ usr_cert ]  # These extensions are added when 'ca' signs a request.    #   This   goes   against   PKIX   guidelines   but   some   CAs   do   it   and   some  software  #  requires this to avoid interpreting an end user certificate  as  a  CA.  basicConstraints=CA:FALSE  # Here are some examples of the usage of nsCertType. If it is omitted  # the certificate can be used for anything *except* object signing.  # This is OK for an SSL server.  # nsCertType = server  # For an object signing certificate this would be used.  # nsCertType = objsign  # For normal client use this is typical  # nsCertType = client, email  # and for everything including object signing:  # nsCertType = client, email, objsign  # This is typical in keyUsage for a client certificate.    keyUsage = nonRepudiation, digitalSignature # This will be displayed in Netscape's comment listbox.  # nsComment = "OpenSSL Generated Certificate"  # PKIX recommendations harmless if included in all certificates.  subjectKeyIdentifier=hash  authorityKeyIdentifier=keyid,issuer  # This stuff is for subjectAltName and issuerAltname.  # Import the email address.  # subjectAltName=email:[email protected]  # An alternative to produce certificates that aren't  # deprecated according to PKIX.  # subjectAltName=email:move  # Copy subject details  # issuerAltName=issuer:copy  #nsCaRevocationUrl = http://www.domain.dom/ca­crl.pem  #nsBaseUrl  OpenTSA Yessica De Ascencao #nsRevocationUrl  #nsRenewalUrl  #nsCaPolicyUrl  #nsSslServerName  # This is required for TSA certificates.    extendedKeyUsage = critical,timeStamping  3. Luego creamos el certificado para el TSS; OpenTSA. Para crear la clave privada: openssl genrsa -des3 -out tsskey.pem -passout pass:123456 2048 Con esto se genera la clave privada, que tendrá un algoritmo de cifrado triple des (des3) de 2048 bits y se almacenara en el fichero (-out) serv-priv.pem y con el comando -passout pass: indicamos la frase para la clave privada.[3] 4. Generar el CSR: openssl req -new -key tsskey.pem -passin pass:123456 -sha256 -out tssCSR.pem Con req -new indicamos que es una petición. A la petición se le indica que clave privada debe usar para generar la petición de certificado, con -key serv-priv.pem, luego el password (-passing pass):mipassword, le indicamos el algoritmo a usar para el resumen criptográfico -sha256 y como salida (-out) el nombre y extensión que tendrá el fichero; petic-certificado-serv.perm. 5. Por último generamos el certificado digital: openssl x509 -req -days 365 -in tssCSR.pem -CA cacert.pem -CAkey cakey.pem -Cacreateserial -extfile openssl.cnf -extensions usr_cert -sha256 -out tssCRT.pem Indicamos que será un certificado del tipo x509 cuya CA (-CA) esta definida en el fichero cacert.pem, que usa como clave privada (-CAkey) el fichero cakey.pem y que el certificado a generar tendrá las especificaciones definidas en el apartado anterior (req -in) las cuales están en el fichero de petición tssCSR.pem. El certificado tendrá una validez de un año (-days 365).[3] La primera vez que utilice la entidad emisora a firmar un certificado se puede utilizar la opción CAcreateserial. Esta opción creará un archivo (ca.srl) que contiene un número de serie. Para la próxima vez que se genere un certificado, la opción a utilizar será CAserial (y no más-CAcreateserial), seguido con el nombre del archivo que contiene su número de serie. Este archivo se incrementa cada vez que firme un nuevo certificado. Este número de serie se podrá leer utilizando un navegador (una vez que el certificado se importa a un formato PKCS12). Y podemos tener una idea del número de certificados creados por una CA.[1] Posteriormente le indicamos que el certificado es para estampado de tiempo, como esto lo tenemos en nuestro fichero de configuración se lo indicamos poniendo -extfile y nuestro fichero openssl.cnf, seguido del modulo a cargar -extensions usr_cert y OpenTSA Yessica De Ascencao finalmente le decimos donde generar el certificado (-out) en el fichero tssCRT.pem. Una vez lanzado el comando nos pedirá el password de la CA que lo emite y el fichero se generará.[3] Obtendremos algo similar a esto: Certificate:      Data:          Version: 3 (0x2)          Serial Number: 9 (0x9)          Signature Algorithm: sha256WithRSAEncryption                  Issuer:   CN=Autoridad   de   Certificacion   Raiz,   C=VE,   L=Caracas,  ST=Distrito   Capital,   O=Sistema   de   Certificacion   Electronica,  OU=AC_Raiz/[email protected]          Validity              Not Before: Mar 16 16:11:28 2011 GMT              Not After : Mar 15 23:59:59 2016 GMT                  Subject:   CN=Autoridad   de   Estampado   de   Tiempo   ,   C=VE,   L=Caracas,  ST=Distrito   Capital,   O=Sistema   de   Certificacion   Electronica,  OU=AC_Raiz/[email protected]          Subject Public Key Info:              Public Key Algorithm: rsaEncryption              RSA Public Key: (2048 bit)                  Modulus (2048 bit):                      00:bd:65:e2:60:6c:e9:25:40:70:49:79:92:d6:a1:                      ba:e1:25:57:52:c1:b0:38:fc:9c:a7:34:0a:d3:c2:                      2c:b1:31:c4:0b:4d:ca:21:25:27:b2:5b:77:75:96:                      d4:8b:a3:31:c3:25:4e:9a:62:3e:2b:ac:2c:33:d2:                      c4:6c:9c:81:25:71:b1:13:79:e6:f4:43:19:08:b2:                      17:2f:ef:34:09:8b:70:02:15:89:be:3a:1b:76:d0:                      f9:d0:b4:f8:37:5d:e5:2c:4a:e2:7f:fb:0d:1d:c2:                      f2:8c:fe:04:b4:bf:fe:e5:35:1b:7f:35:85:e3:f9:                      71:12:e5:b6:18:83:57:49:9c:ee:dd:2a:35:5b:7a:                      cf:47:0d:a7:15:3b:80:91:04:2d:4f:99:b4:44:5e:                      c4:49:6d:42:ac:1c:7c:47:0a:2d:65:84:bc:71:57:                      39:27:23:dc:5b:2f:78:7a:3e:de:ab:9f:96:59:7e:                      03:a4:3e:c0:8d:cc:90:6d:5e:fa:27:2e:2c:b3:d1:                      87:dd:fb:b4:44:60:17:d2:32:58:e6:46:2c:3c:a3:                      ff:c3:80:c8:92:7f:94:4a:93:36:45:d4:a4:70:c7:                      ed:6c:9c:64:ae:97:ce:db:29:79:1f:ae:0b:f0:ef:                      eb:5b:36:b8:76:e5:d9:16:4f:c9:ba:72:b3:78:12:                      f2:c9                  Exponent: 65537 (0x10001)          X509v3 extensions:              X509v3 Basic Constraints: critical                  CA:TRUE, pathlen:1              X509v3 Subject Key Identifier:                  FF:6C:CB:BF:DD:E7:14:2A:EC:D5:D1:BC:90:08:2D:E0:23:25:0E:66              X509v3 Authority Key Identifier:                  keyid:06:67:50:45:48:10:15:DC:4C:44:DF:80:E5:A5:85:79:DB:39:75:F D    DirName:/CN=Autoridad   de   Certificacion  Raiz/C=VE/L=Caracas/ST=Distrito Capital/O=Sistema de Certificacion Electronica/ OU=AC_RAiz/[email protected]                  serial:03              X509v3 Key Usage: critical  OpenTSA Yessica De Ascencao                 Certificate Sign, CRL Sign      Signature Algorithm: sha256WithRSAEncryption          02:a7:3a:c7:a9:de:00:3d:2b:6b:35:8a:5a:50:af:bf:8f:4b:          fd:ec:b6:93:b9:27:93:70:1b:a1:79:ea:8f:61:6b:86:42:01:          e7:9c:cb:c2:57:22:aa:3f:5c:10:4d:35:2c:23:8d:6d:ab:75:          f2:45:88:d4:2f:30:a6:54:9b:a0:cd:84:da:e4:b0:c4:90:e2:          73:9a:42:d8:b1:ce:0b:6b:64:fe:9a:ea:37:91:8b:f3:0d:bf:          22:06:7f:47:9d:48:e7:c8:4c:3a:6f:7a:60:2d:5f:76:23:9d:          e4:b7:43:6b:72:13:30:b3:23:61:36:43:24:7e:d6:a7:60:11:          2a:94:a9:67:d7:0f:45:b3:66:36:11:af:c8:7b:8c:82:fe:f1:          9e:cc:35:88:88:e7:dd:46:65:62:a0:6f:47:0b:a8:a7:fd:ae:          54:97:5f:58:e9:f8:b0:f7:48:4c:e3:b1:ba:43:4a:09:85:3a:          1a:dc:64:01:26:9e:90:3d:ba:7d:10:b9:87:27:14:af:1b:20:          22:48:c2:db:5f:b9:92:4b:b0:a0:85:18:b3:d9:30:d6:06:51:          88:12:ad:ed:dc:e3:67:00:a6:fd:c1:54:8e:e8:59:63:9e:ef:          18:07:21:57:5e:68:88:54:f2:b9:f3:41:0e:d9:93:88:c6:f6:          f0:9c:8d:58:d5:7b:1c:a1:74:c7:f2:46:ee:d4:7b:3e:0b:69:          7c:67:16:50:d2:bc:f5:29:2a:d8:1f:71:fa:25:b0:59:df:0a:          9d:c6:29:05:7e:6e:99:f0:0f:66:e2:95:34:3f:e6:9d:8b:c7:          98:82:d5:f9:cf:5a:05:ed:47:70:67:9a:97:f8:8a:a7:3b:2b:          c6:d8:2f:d2:c8:24:13:19:3f:68:d0:08:52:72:bb:29:cb:ae:          62:b0:18:7c:10:ef:af:46:96:8c:79:ff:e1:73:38:91:e0:d6:          c4:03:15:be:31:68:1f:35:5d:7e:8a:84:76:44:1e:b9:91:af:          ba:b9:1d:47:db:89:60:4d:69:84:57:b5:30:a6:4d:84:d3:e9:          ab:7f:3e:74:2c:2f:c6:61:19:db:5f:11:0c:a6:6a:36:8e:ab:          97:93:5a:65:b0:da:42:ef:df:fc:71:09:b8:65:b3:4d:06:3c:          62:ff:a6:45:b5:5a:9f:51:4b:5b:18:d1:d1:74:16:07:e3:f1:          5e:f6:8f:38:26:91:ca:80:27:23:68:07:77:1b:2f:74:7f:fc:          18:61:d0:8a:79:7f:ca:7f:5b:d2:57:3a:4b:45:57:62:e1:a8:          53:6b:72:55:97:a4:09:dc:53:33:2c:25:ec:60:7a:37:c0:a9:          c4:11:66:93:60:9c:c5:77  Ahora que tenemos los certificados digitales, se procede a configurar el openSSL y el openTSA, buscamos en archivo /usr/local/ssl/openssl.cnf y se modifican las rutas y nombres de los certificados digitales: ● En la sección [ CA_default ] , modificar: dir = /path/, para nosotros es /root/certificados certificate = $dir/certificadoTSA, para el plan piloto ACESTAMPADO-SHA1.pem En la sección [ tsa_config1 ], modificar: dir = /path/, para nosotros es /root/certificados signer_cert = $dir/certificadoTSS, el nuestro corresponde a dra_tss.pem certs = $dir/certificadoAC, para el plan piloto ACESTAMPADO-SHA1.pem signer_key = $dir/clavePrivada, la nuestra es dra_tss_key.pem Posteriormente se abre el archivo /mod_tsa/tsa.conf y modificamos: ● ● Descomentar las siguientes líneas: TSASerialFile conf/tsaserial TSACryptoDevice builtin OpenTSA Yessica De Ascencao TSAMySQLHost localhost TSAMySQLPort 3306 TSAMySQLPassPhrase On ● Modificar las siguientes rutas y datos: TSACertificate [ruta del certificado] TSAKey [ruta de la clave privada] TSAKeyPassPhrase Off TSAMySQLUser [usuario] TSAMySQLDatabase [nombre de la base de datos] TSAMySQLUnixSocket /var/run/mysqld/mysqld.sock El último paquete a instalar, consiste en la librería CURL de perl, la cual es una herramienta de línea de comandos para la transferencia de datos con la sintaxis de dirección URL; soporta los protocolos DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet y TFTP.[7] Se descarga y compila el paquete curl-7.21.4; en su última versión disponible para el momento: ● tar -xvf curl-7.21.4.tar.gz ● cd curl-7.21.4 ● ./configure ● make ● make install Reiniciamos el servidor apache: /usr/local/apache2/bin/apachectl -k restart Revisamos los logs por posibles errores: tail -f /usr/local/apache2/logs/error_log Para finalizar la configuración del servidor, debemos agregar el demonio de apache a los sistemas de inicio del servidor. Para ello creamos un script en /etc/init.d/ con la línea de comando para iniciar el servidor: #!/bin/sh /usr/local/apache2/bin/apachectl -k restart ;; esac Le damos permisos 777 ó 700, y lo agregamos a los servicios con el siguiente comando: sudo update-rc.d nombre_del_script defaults Para concluir, los comandos a ejecutar en consola para peticiones, respuesta y OpenTSA Yessica De Ascencao verificación de token de estampado de tiempo son: ● QUERY ./openssl ts -query -data /root/prueba -sha1 -cert -out request.tsq REPLY ./openssl ts -reply -config /usr/local/ssl/openssl.cnf -queryfile request.tsq -out response.tsr VERIFY ./openssl ts -verify -data file -in response.tsr -CApath /ruta_certificados -CAfile cert.pem donde cert.pem debe contener concatenados todos los certificados correspondientes a la cadena de confianza, desde la AC Raíz hasta la Autoridad de Estampado de Tiempo. Petición a través de CURL a un agente externo ./openssl ts -query -data file -cert | tee request.tsq | curl -s -S -H 'Content-Type: application/timestamp-query' --data-binary @- http://IP:Port/ -o response.tsr ● ● ● 3.- Paquetes y certificados modelo Se pueden conseguir los paquetes utilizados en este manual, en la dirección: http://www.mediafire.com/?0oer3qyqnwtfjj6, así como también los certificados modelo para la AC Raíz y el Servidor de Estampado de Tiempo. OpenTSA Yessica De Ascencao 4.- Referencias [1] Botte, Pascal. “Create and sign your server certificate”, 2004. En: http://users.skynet.be/pascalbotte/art/server-cert.htm. Consultado el 22/02/2011. [2] Bureado, José. “Estampillado de tiempo según RFC 3161 con software libre”, 2010. En: http://www.bureado.com/archives/626. Consultado el 20/01/2011. [3] García, Javier. “Certificado Digitales con OpenSSL http://bulma.net/body.phtml?nIdNoticia=2280. Consultado el 15/02/2011. I”, 2006. En: [4] Glózik, Zoltán. “OpenTSA”, 2006. En: http://www.opentsa.org/. Consultado el 18/01/2011. [5] “OpenSSL command line tool”. En: http://www.openssl.org/docs/apps/openssl.html#COMMAND_SUMMARY. Consultado el 18/01/2011. [6] “Linux: Salida a pantalla y a fichero, Comando Tee” En : http://anticanis.es/2008/06/24/linux-salida-a-pantalla-y-a-fichero-comando-tee/. Consultado el 25/02/2011. [7] “Curl”. En: http://curl.haxx.se/ Consultado el 25/02/2011.
Copyright © 2024 DOKUMEN.SITE Inc.