Manual OpenTSAv1.0
Manual OpenTSAv1.0
Manual OpenTSAv1.0
Yessica De Ascencao
OPENTSA
OPENTSA
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
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
ServerName localhost
Para indicar el servidor donde se está implementando el servicio.
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 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 Valor
token_id Serial unívoco del token.
token_date Fecha y hora de emisión del token.
Codificación DER para el PKCS7 del
token_pkcs7 token del estampado, en formato
binario.
Luego se debe crear la clave privada, así como también el certificado para la TSS-
Time 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.
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]
[ 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:tss@suscerte.gob.ve
# 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/cacrl.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.
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]
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/emailAddress=acraiz@dominio.com
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/emailAddress=acestampado@dominio.com
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/emailAddress=acraiz@dominio.com
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
TSAMySQLHost localhost
TSAMySQLPort 3306
TSAMySQLPassPhrase On
#!/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:
● 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.
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 I”, 2006. En:
http://bulma.net/body.phtml?nIdNoticia=2280. Consultado el 15/02/2011.