jueves, 13 de octubre de 2016

Timestamp con TSA con HTTP

Si quisiéramos enviar una request a un timestamp server, ¿Cómo lo harías? Yo conozco una TSA que antes me funcionaba (las pruebas que hacía tiraban) hasta que hace poco me encontré con que ya no tiraba el método empleado. Al menos tengo pruebas realizadas que daban resultado y ahora ya no. ¿Por qué? Porque me ahora me está pidiendo que le envíe los datos por post. [Actualización antes de publicar] Porque aun pudiendo haber funcionado con el método de más abajo, el problema no era que no estuviera llamando por post. Realmente en alguna prueba debí de quitar algún carácter y dejó de funcionar [fin actualización] Si accedemos directamente nos encontramos con:
The GET method is not allowed. Try with POST!
La siguiente pregunta es: ¿Cómo sé qué parámetros tengo que pasasrle si quiero continuar usando curl? Hice lo que todo el mundo haría en su sano juicio: leerse la mitad de la RFC1381. Es cierto que hay muchas cosas que se te escapan hasta que encuentras la sección que dice:
There is no mandatory transport mechanism for TSA messages in this document. The mechanisms described below are optional; additional optional mechanisms may be defined in the future.
Y te enumera las distintas formas. Entre las mencionadas están e-mail, fichero (con extensión .tsq o Time-Stamp query), sockets y el que estaba buscando:  HTTP(S). Pero la información que muestra ya la sabemos, porque lo estábamos usando. Pero a partir de otra búsqueda pude encontrar en Stackoverflow que hablaban de un "navegador" específico para estos menesteres. Por lo tanto, para enviar a una TSA un fichero .tsq hay que usar la herramienta tsget.

En teoría deberíamos de poder acceder a ella directamente porque se espera que esté en el path. Pero en mi caso la encontraba. Ni siquiera probando whereis. Así, con otra búsqueda más, apareció en /usr/lib/ssl/misc/. Además, lo más curioso de todo es que el comando man sí que mostraba el manual.

Ahora que ya la tenemos, nos encontramos con un nuevo bache: esta herramienta está hecha en perl y nos muestra un mensaje de error:
"&WWW::Curl::Easy::global_cleanup called at ./tsget line 196."
Aunque después descubrí que sí que había funcionado con este mensaje, hice una nueva búsqueda en la que me encontré con que se podían instalar dos cosas para eliminar el mensaje:
  • Una librería para curl y openssl: 
    • apt-get install libcurl4-openssl-dev
  • Una librería de perl:
    • perl -MCPAN -e "CPAN::Shell->force(qw(install WWW::Curl::Easy));"
Aunque en una de ellas empezó a pedirme que configurara ciertos parámetros y me ofreció hacer casas automáticamente, primero decidí hacerlo a mano. Pero terminé desistiendo y cancelé el proceso para más tarde repetirlo y permitirle hacerlo automáticamente. También hay que tener en cuenta que es posible que te haga falta instalarlo para cada usuario (lo hice con root y parecía que me también me pedía ejecutar el comando de perl para mi usuario mortal).

Una vez instaladas las cosas y encontrarme con que seguía saliendo el mensaje, pero también obtenía resultados, se puede explicar las distintas formas de llamar a la TSA. 

¿Qué estaba haciendo antes y cómo se puede hacer con el nuevo comando?

Antes estaba ejecutando esta línea, pero sin los caracteres en negrita (con ellos funciona, sin ellos no):

cat miFich.tsq > curl -s -S -H "Content-Type: application/timestamp-query" --data-binary @- http://tss.accv.es:8318/tsa -o result.tsr

Con tsget se podría ejecutar de esta forma:

./tsget -h http://tss.accv.es:8318/ts -o /ruta/destino/fich.tsr /ruta/fichero/query.tsq

Ahora si se quiere se podría añadir la ruta de esta herramienta al $PATH para no depender de tener que poner la ruta completa de los ficheros de entrada/salida. Para eso tendremos que editar el fichero /etc/profile. Para mi usuario mortal funciona, que es lo importante.

¿Qué podemos contar de todo esto?

  • Que para estas cosas nos tenemos que acordar de mirar todos los comandos letra a letra, que a veces leemos lo que queremos, no lo que realmente hay escrito.
  • Que para trabajar con una agencia de sellado de tiempo, además de curl tenemos tsget.
  • Que si una cosa no funciona, siempre puedes terminar buscando una posible solución en el RFC del tema en cuestión, si es que existe. En mi caso me lo leí hasta la mitad y como mínimo alguna cosa curiosa aprendes aunque no consigas solucionar el problema. 

No hay comentarios:

Publicar un comentario