seguridad-digital.png, 0 kB
SECCIONES
PORTAL
ARTÍCULOS
NOTICIAS
TUTORIALES
SERVICIOS
ENLACES
COLABORADORES
CONTRIBUIR
ACERCA DE...
LOGIN





¿Recuperar clave?
¿Quiere registrarse? Regístrese aquí
ESTADÍSTICAS
Usuarios: 620
Noticias: 215
Enlaces: 35
Visitantes: 1176185
ACTIVIDAD
Hay 14 invitados en línea
PKI basada en OpenSSL | Imprimir |  E-Mail
Calificación del usuario: / 13
MaloBueno 
Escrito por ozeki   
Thursday, 02 de February de 2006
En este artículo vamos a ver como se crea una estructura de clave pública (PKI) a partir de OpenSSL. OpenSSL es un trabajo derivado de SSLeay.

SSLeay fue desarrollado originalmente por Eric A. Young y Tim J. Hudson en 1995. En Diciembre de 1998, el desarrollo de SSLeay fue interrumpido y la primera versión de OpenSSL fue liberada (0.9.1c) , utilizando SSLeay 0.9.1b como punto de partida. OpenSSL se compone de dos partes:

 
             1.librería criptográfica 2.conjunto de aplicaciones SSL

 
Existen versiones para distintas plataformas. Se puede descargar de: http://www.openssl.org vamos a ver el funcionamiento básico de openssl y cómo construir una infraestructura de clave pública o PKI(Public Key Infraestrure) con ella.

#Comandos disponibles:
 
OpenSSL> 
Standard commands

asn1parse ca ciphers crl crl2pkcs7 dgst dh dhparam dsa dsaparam 
enc engine errstr gendh gendsa genrsa nseq ocsp passwd pkcs12 
pkcs7 pkcs8 rand req rsa rsautl s_client s_server s_time sess_id 
smime speed spkac verify version x509 

Message Digest commands (see the `dgst' command for more details)

md2 md4 md5 rmd160 sha sha1 

Cipher commands (see the `enc' command for more details)

aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc aes-256-ecb base64 bf bf-cbc bf-cfb bf-ecb bf-ofb cast cast-cbc cast5-cbc 
cast5-cfb cast5-ecb cast5-ofb des des-cbc des-cfb des-ecb des-ede des-ede-cbc des-ede-cfb des-ede-ofb des-ede3
des-ede3-cbc des-ede3-cfb des-ede3-ofb 

des-ofb des3 desx rc2 rc2-40-cb rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb 

#Algunas operaciones básicas:

[root@nesys209 ssl]# openssl version
OpenSSL 0.9.7a Feb 19 2003

[root@nesys209 ssl]# openssl version -d
OPENSSLDIR: "/usr/share/ssl"

[root@nesys209 ssl]# ls -sla
total 36
4 drwxr-xr-x    7 root root 4096 sep  7 22:30 .
4 drwxr-xr-x  161 root root 4096 jun 29 13:45 ..
4 drwx------    3 root root 4096 jun 14 09:42 CA
0 lrwxrwxrwx   1 root root   19 jun 14 09:42 cert.pem ->  certs/ca-bundle.crt
4 drwxr-xr-x    2 root root 4096 jun 24 19:10 certs
4 drwxr-xr-x    2 root root 4096 mar 25  2004 lib
4 drwxr-xr-x    3 root root 4096 jun 16 12:01 misc
8 -rw-r--r--    1 root root 7655 sep  7 22:30 openssl.cnf
4 drwxr-xr-x    2 root root 4096 jun 24 19:10 private

Archivo de configuración de openssl

[root@nesys209 ssl]# cat /usr/share/ssl/openssl.cnf

Hashing

#openssl md5 a.txt
#openssl sha1 a.txt
#openssl sha1 -out a_hash.txt a.txt

Cifrado simétrico 3DES
#openssl enc -des3 -salt -in a.txt -out cifra_a.bin -pass pass:CLAVE

     Descifrado 3DES
#openssl enc -des-ede3-cbc -d -in cifra_a.bin -out descifra_a_3des.txt -pass pass:CLAVE

Cifrado simétrico BLOWFISH
#openssl bf-cfb -salt -in a.txt -out cifra_a.bin -pass pass:CLAVE

     Descifrado BLOWFISH
#openssl bf-cbc -salt -d -in cifra_a.bin -out descifra_a_blow.txt -pass pass:CLAVE

Codificación de la información
#openssl base64 -in cifra_a.bin -out cifra_a_base64.txt


#Construyendo una Autoridad de Certificación

Creamos la estructura del entorno de la PKI

# mkdir /tmp/newca
# cd /tmp/newca
# mkdir certs private
# chmod g-rwx,o-rwx private
# echo '01' > serial
# touch index.txt
# ls -las

4 drwxr-xr-x  4 root root 4096 sep 10 17:20 .
4 drwxrwxrwt  9 root root 4096 sep 10 17:19 ..
4 drwxr-xr-x  2 root root 4096 sep 10 17:19 certs
0 -rw-r--r--  1 root root    0 sep 10 17:20 index.txt
4 drwx------  2 root root 4096 sep 10 17:19 private
4 -rw-r--r--  1 root root    3 sep 10 17:20 serial

Parte de la configuración del archivo openssl.cnf

[ CA_default ]
dir             = /tmp/newca            # Where everything is kept
certs           = $dir/certs            # Where the issued certs are kept
crl_dir         = $dir/crl              # Where the issued crl are kept
database        = $dir/index.txt        # database index file.
new_certs_dir   = $dir/certs            # default place for new certs.
certificate     = $dir/cacert.pem       # The CA certificate
serial          = $dir/serial           # The current serial number
crl             = $dir/crl.pem          # The current CRL
private_key     = $dir/private/privkey.pem      # The private key
RANDFILE        = $dir/private/.rand    # private random number file
x509_extensions = usr_cert              # The extentions to add to the cert
. . .
# crl_extensions        = crl_ext
default_days    = 365                   # how long to certify for
default_crl_days= 30                    # how long before next CRL
default_md      = md5                   # which md to use.
preserve        = no                    # keep passed DN ordering
[ req ]
default_bits            = 2048
default_keyfile         = privkey.pem
distinguished_name      = req_distinguished_name


#Ahora construimos la Autoridad de Certificación

+ Construyendo el certificado de la CA autofirmado
#openssl req -x509 -days 3650 -newkey rsa -out cacert.pem -outform PEM

    Información del certificado
#openssl x509 -in cacert.pem -text -noout

+ Transferencia de confianza entre CAs (CA2 da confianza a CA) CA2-CA

# openssl x509 -in cacert.pem -days 3650 -out cacert.pem -signkey ./private/ca2key.pem


+ Generación de una petición del certificado (request)

# openssl req -newkey rsa:1024 -keyout certkey.pem -keyform PEM -out
certreq.pem -outform PEM

    Información de la petición del certificado (request)
#openssl req -in certreq.pem -text -noout

#Veamos lo que hemos generado

 [root@nesys209 newca]# cat testkey.pem
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,CE2D5DC9F9275BE0

fPVuz1E2dFPb5ja3dSQrgUyJ1Z0vMMPyuREAL53eoUAplkBQnkutKyiK13GXFlHT
mb4kYswgy4koa/Jj9AjO10jTUdQ0bKF4F69w/hWLKl7CcOdTiZpCFXtE/b8kS/+d
Kecw/4YEfDW2V+rrlYu8QaMUSvTBGjlrT2wlJIdTpn78uEjdEeyjDmf5VL8yyeSb
FqKZa1zgE3qCUedpL24NCYBUESCoMUH4YtdXn4hvxaHkdgBigDS3LW9Ztedo+tCy
qqYBqO9LBQAgYVgYoxe37BKw++mBAo32AbP9KUY/TqW3atsGEzeTKgt8XErvkEsJ
NquuxjwEQClOcoASF5ox8TOEAGMic7iUKlmIZB37a4n7on075Wenoez7/i/EuFR6
YMxABMVZ9jTcPJfNJViKpCUFEli8vGgBF83iifbGgYaCfRyCcyvB5fFBzmkYHft4
uVaJJLoaxotLj8FHTPPeCQqtfgpESPSVrq+funfDtZJiKzUB3JATeyshK8Zc0OR8
REu51+jWD9CY5piRDvfk6JEvs1v2vXt6rbFXGkzysasrbgcb722dpkLNTWDTJxEl
UyCfLJflCxZ08lXbG6oaMIHxhbaewcEyovxOTHIFbYzL+y3xetwDD3I3f+XhikB/
l9eC+MUIaFzSS9rFXOzxULzZ3gdCUMHkcIkUY7J1e6mYmBs6Z3g4lchKVe1/cxrd
B6AtRxIJIJFLwBumXGnXvBHTfTdAcN6Ical32zyL2DOgY4yy/sdwUA8yFEoavK0g
g9aQhgULjdPAcuvxloF4YE8UosBhu0VqzdhMtiY5oosK5A/AAC7cNg==
-----END RSA PRIVATE KEY-----

[root@nesys209 newca]# cat testreq.pem
-----BEGIN CERTIFICATE REQUEST-----
MIIBxTCCAS4CAQAwgYQxCzAJBgNVBAYTAkVTMRAwDgYDVQQIEwd2aXpjYXlhMRAw
DgYDVQQHEwdTb25kaWNhMQ40gAYDVQQKEwVORVNZUzEMMAoGA1UECxMDUEtJMREw
DwYDVQQDEwhuZXN5czIwOTEgMB4GCSqGSIb3DQEJARYRaW5mb0BuZXN5cy1zdC5j
b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAK393j3aF0hBgsRR1lbwfswo
99b2rzXHB5npgq6BjKind1IaWfDcy/zMF+fcYWD1o2A5s6R0XoKaIDTKFVd3P338
uL8HuIoMcfY2e6kL7FmvjCtDBP8mdOtBp7YNb3j1wVQYkivJoIUwLFZpYDJBwGFW
Wq1RK405PklL7ltgOxPNAgMBAAGgADANBgkqhkiG9w0BAQQFAAOBgQAAQH24mSdP
nzbYM11pIltXlZPUYuxSDUrt2eq6snGrMgnKprZDqObKixkM/8nQnhT1Jv/buVKG
Jpf8iivMWgSHED/KVB3fwmnJ/Qy6gQgQLJ/ip7SufpjTtMVMg4ETG/bbvtn9tBkL
NcZ9jkcPATUVaajuHaQ5ExmjCcJfCfurvA==
-----END CERTIFICATE REQUEST-----

#Generación de un certificado a partir del request
#openssl ca -in certreq.pem
...
-----BEGIN CERTIFICATE-----
MIIEADCCAuigAwIBAgIBATANBgkqhkiG9w0BAQQFADCBhDELMAkGA1UEBhMCRVMx
EDAOBgNVBAgTB3ZpemNheWExEDAOBgNVBAcTB1NvbmRpY2ExDjAMBgNVBAoTBU5F
U1lTMQwwCgYDVQQLEwNQS0kxETAPBgNVBAMTCG5lc3lzMjA5MSAwHgYJKoZIhvcN
...
IppRmJrZ7HCOsgOkhsoYe4EIYcZRoqgZFK0dehcRWG4/auXmKFO+XtdYorjYEU0/
07PI2LtOyEjA2lgCEk5pH/khbAI=
-----END CERTIFICATE-----

[root@nesys209 newca]# cat index.txt
V       060910160943Z           01      unknown  . . .

#Revocación de certificados
# cp certs/01.pem testcert.pem
# openssl ca -revoke testcert.pem
Using configuration from openssl.cnf
Enter PEM pass phrase:
Revoking Certificate 01.
Data Base Updated

[root@nesys209 newca]# cat index.txt
R       060910160943Z   050910161743Z   01      unknown . . .


# Generación de una lista de revocación

#openssl ca -gencrl -out exampleca.crl

[root@nesys209 newca]# cat exampleca.crl
-----BEGIN X509 CRL-----
MIIB4TCByjANBgkqhkiG9w0BAQQFADCBhDELMAkGA1UEBhMCRVMxEDAOBgNVBAgT
B3ZpemNheWExEDAOBgNVBAcTB1NvbmRpY2ExDjAMBgNVBAoTBU5FU1lTMQwwCgYD
...
pzZzTn8qjaa04D3DDOaque8XTILCLJWk7gUrMGR0VrAbghr79B69gFAJWKMKRJ/Y
gmOO85lAAfr1waQEb6ooCBK2LpZONOpiCKMAwLKAvFQnSCfcrWIlrXmJMhXvPjab
SFbI6V4=
-----END X509 CRL-----

#openssl crl -in exampleca.crl -text -noout

Certificate Revocation List (CRL):
        Version 1 (0x0)
        Signature Algorithm: md5WithRSAEncryption
        Issuer: /C=ES/ST=../L=../O=../OU=PKI/CN=../emailAddress=..
        Last Update: Sep 10 16:21:38 2005 GMT
        Next Update: Oct 10 16:21:38 2005 GMT
Revoked Certificates:
    Serial Number: 01
        Revocation Date: Sep 10 16:17:43 2005 GMT
    Signature Algorithm: md5WithRSAEncryption
        ba:93:b1:5c:e9:21:03:b3:ed:ec:f6:17:89:f6:41:61:36:ab:


:wq!
 
 
Seguridad Digital - Licencia CC v2.5