Seguridad Informtica - PowerPoint PPT Presentation

1 / 37
About This Presentation
Title:

Seguridad Informtica

Description:

Cargar un keystore de disco. Seguridad en Java. KeyStore ks = KeyStore.getInstance('JCEKS' ... Cargar un memoria un certificado desde un fichero ... – PowerPoint PPT presentation

Number of Views:471
Avg rating:3.0/5.0
Slides: 38
Provided by: mic4152
Category:

less

Transcript and Presenter's Notes

Title: Seguridad Informtica


1
Seguridad Informática
Gestión de Claves Java SE Security Micael.Gallego
_at_urjc.es
Seguridad en Java
2
Índice
  • Introducción
  • Keytool
  • API de Gestión de Claves
  • Ejemplos

Seguridad en Java
3
Introducción
  • La gestión de claves es un aspecto difícil
  • El problema es que no existe una forma unificada
    y universal de gestionar claves
  • No hay un estándar multiplataforma para almacenar
    las claves y los certificados en el sistema
    operativo
  • Los navegadores web (FF, IE) utilizan su propio
    mecanismo de gestión de claves y certificados

Seguridad en Java
4
Introducción
  • Para realizar tareas criptográficas es necesario
    usar claves
  • Claves secretas
  • Claves privadas
  • Claves públicas en Certificados
  • Un sistema de gestión de claves (Key Management
    System) permite gestionar claves y certificados
  • Insertar, borrar, crear, listar claves,
    certificados

Seguridad en Java
5
Introducción
  • Keystore
  • El sistema de gestión de claves de Java se basa
    en la noción de Almacén de Claves (keystore)
  • Un keystore es un fichero que almacena claves y
    certificados
  • Gestión del Keystore
  • Herramienta de línea de comandos llamada keytool
  • Librería Java en la API estándar
  • Herramienta gráfica en el Panel de Control Java

Seguridad en Java
6
Introducción
  • Keystore

7
Introducción
  • Elementos de un keystore
  • Entrada de Clave (Key Entry)
  • Clave secreta
  • Par asimétrico
  • Clave privada y certificado de clave pública
  • Se pueden incluir varios certificados encadenados
    hasta llegar al certificado de una Autoridad de
    Certificación
  • Entrada de Certificado (Certificate Entry)
  • Certificados de confianza

Seguridad en Java
8
Introducción
  • Cómo nos referimos a una clave o certificado?
  • Alias
  • Un nombre corto para referirse a las claves y
    certificados dentro del keystore
  • Sólo se aplica dentro del keystore
  • Nombre para distinguir (Distinguised Name, DN)
  • Es el nombre incluido en un certificado que
    indica a quién corresponde la clave pública
  • Common name (CN), Organization unit (OU),
    Organization (O), Location (L), State (S),
    Country (C)

Seguridad en Java
9
Introducción
  • Formatos del un keystore
  • JCEKS
  • Formato sin restricciones
  • Encripta las claves privadas y las claves
    secretas fuertemente
  • Recomendado
  • PKCS12
  • Formato estándar para importar certificados en
    Java
  • Soportado en Internet Explorer, Firefox, OpenSSL

Seguridad en Java
10
Introducción
  • Formatos del un keystore
  • JKS
  • Formato restringido por antiguas limitaciones de
    EEUU para la exportación de software de
    encriptación
  • No puede almacenar claves secretas
  • Encripta las claves privadas débilmente
  • Usado por defecto por compatibilidad

11
Introducción
  • Certificados de las CA
  • Java incorpora algunos de los más importantes
  • Fichero JREHOME/lib/security/cacerts
  • Password changeit
  • No es recomendable modificar este fichero

Seguridad en Java
12
Índice
  • Introducción
  • Keytool
  • API de Gestión de Claves
  • Ejemplos

Seguridad en Java
13
Keytool
  • Herramienta de línea de comandos
  • JREHOME/bin/keytool.exe
  • Funciones
  • Crear claves asimétricas
  • Generar peticiones de Certificados
  • Importar certificados
  • Crear certificados
  • Modificar y borrar key entries
  • Listar el contenido del keystore

Seguridad en Java
14
Keytool
  • Opciones comunes a cualquier función
  • -alias alias
  • Nombre corto de la entrada a la que nos referimos
    en el comando
  • Por defecto mykey
  • -dname nombreParaDistinguir
  • Nombre largo del certificado
  • Si se omite se pregunta por pantalla
  • -keypass contraseña
  • Contraseña del keystore
  • Si se omite se pregunta por pantalla

Seguridad en Java
15
Keytool
  • Opciones comunes a cualquier función
  • -keystore nombreFichero
  • Localización del fichero de claves (keystore)
  • Por defecto HOME/.keystore
  • -storepass contraseña
  • Contraseña de la entrada particular
  • -storetype formatoKeystore
  • Formato del keystore
  • JKS (por defecto), JCEKS, PKCS12

Seguridad en Java
16
Keytool
  • Crear una clave asimétrica
  • Clave privada y certificado autofirmado de la
    clave pública
  • -genkey
  • Opciones
  • -keyalg Algoritmo Por defecto DSA, Puede ser RSA
  • -keysize TamañoClave Por defecto 1024
  • -sigalg AlgoritmoFirma Por defecto SHA1withDSA
  • -validity nDias Por defecto 90 días

Seguridad en Java
17
Keytool
  • Crear una clave asimétrica

C\Program Files\Java\jre1.6.0\bingtkeytool
-genkey -alias MiClave -storetype JCEKS -keyalg
RSA Escriba la contraseña del almacén de
claves Volver a escribir la contraseña
nueva Cuáles son su nombre y su apellido?
Unknown Micael Gallego Carrillo Cuál es el
nombre de su unidad de organización? Unknown
Departamento de Ciencias de la Computación Cuál
es el nombre de su organización? Unknown
Universidad Rey Juan Carlos Cuál es el nombre de
su ciudad o localidad? Unknown
Móstoles Cuál es el nombre de su estado o
provincia? Unknown Madrid Cuál es el
código de país de dos letras de la unidad?
Unknown ES Es correcto CNMicael Gallego
Carrillo, OUDepartamento de Ciencias de la
Compu tación, OUniversidad Rey Juan Carlos,
LMóstoles, STMadrid, CES? no si Escriba
la contraseña clave para ltMiClavegt (INTRO
si es la misma contraseña que la del almacén de
claves) C\Program Files\Java\jre1.6.0\bingt
Seguridad en Java
18
Keytool
  • Mostrar contenido del keystore
  • -list
  • Exportar un certificado a un fichero .cer
  • -export
  • Formato RFC 1421
  • Opciones
  • -file FicheroCertificado

Seguridad en Java
19
Ejercicio 1
  • Crear una clave asimétrica (clave pública en
    certificado y clave privada) en un nuevo keystore
    con la herramiente keytool
  • Nombre fichero
  • HOME/.keystoreUrjc
  • El certificado debe estar autofirmado
  • El formato será JCEKS
  • Exportar el nuevo certificado a un fichero .cer

Seguridad en Java
20
Índice
  • Introducción
  • Keytool
  • API de Gestión de Claves
  • Ejemplos

Seguridad en Java
21
API de Gestión de Claves
  • Existe una API para gestionar las claves y los
    keystores
  • Cuando se necesite crear una firma se buscará la
    clave privada en un keystore
  • Se pueden crear claves secretas (con keytool no
    se puede)
  • Cuando se necesite cifrar información en Java se
    selecciona la clave privada o secreta de un
    keystore

Seguridad en Java
22
API de Gestión de Claves
  • java.security.KeyStore
  • Es un objeto que mantiene en memoria la
    información de un keystore
  • No tiene constructor, se utilizan métodos
    estáticos para obtener una instancia
  • Al obtener una instancia, hay que especificar el
    formato del fichero (para que posteriormente se
    pueda leer y guardar en ese formato)

KeyStore ks KeyStore.getInstance("JCEKS")
KeyStore ks KeyStore.getInstance(KeyStore.g
etDefaultType())
Seguridad en Java
23
API de Gestión de Claves
  • Cargar un keystore de disco

KeyStore ks KeyStore.getInstance("JCEKS") char
password new char 'c','h','a','n','g','e',
'i','t' // File keystoreFile new
File(System.getProperty("user.home"), //
".keystore") File
keystoreFile new File(System.getProperty("java.h
ome") "/lib/security",
"cacerts") FileInputStream fis new
java.io.FileInputStream(keystoreFile) ks.load(fi
s, password) fis.close()
Seguridad en Java
24
API de Gestión de Claves
  • Crear un keystore vacío en memoria
  • Util para insertar nuevas claves y guardarle en
    disco

KeyStore ks KeyStore.getInstance("JCEKS") char
password new char 'p','a','s','s'
ks.load(null, password)
Seguridad en Java
25
API de Gestión de Claves
  • Entradas (entry) de un KeyStore
  • Representadas por instancias del interfaz
    KeyStore.Entry
  • Cada tipo concreto tiene su subclase
  • KeyStore.PrivateKeyEntry Clave privada
  • KeyStore.SecretKeyEntry Clave secreta
  • KeyStore.TrustedCertificateEntry Certificado de
    clave pública

Seguridad en Java
26
API de Gestión de Claves
  • Listar los Certificados de un keystore

EnumerationltStringgt aliases ks.aliases() while(
aliases.hasMoreElements()) String alias
aliases.nextElement() KeyStore.Entry entry
ks.getEntry(alias, null) System.out.println(en
try)
Para acceder a un certificado no se necesita
contraseña
Seguridad en Java
27
API de Gestión de Claves
  • Acceso a los Certificados
  • Acceso a una clave (privada, pública o secreta)

Certificate cert ks.getCertificate("alias") Cer
tificate certChain ks.getCertificateChain("ali
as")
Key key ks.getKey("alias", new
char'p','a','s','s')
Seguridad en Java
28
API de Gestión de Claves
  • Otras funcionalidades de la clase KeyStore
  • Insertar entradas
  • Certificados
  • Cadenas de Certificados
  • Claves (secretas y privadas)
  • Guardar de nuevo a fichero el contenido en
    memoria del keystore

Seguridad en Java
29
Ejercicio 2
  • Crea un programa que cargue un keystore y muestre
    su contenido por pantalla
  • Mostrar el contenido del keystore
  • HOME/.keystoreUrjc

Seguridad en Java
30
Índice
  • Introducción
  • Keytool
  • API de Gestión de Claves
  • Ejemplos

Seguridad en Java
31
Ejemplos
  • Existen casos de uso típicos en la gestión de
    claves y certificados
  • Crear un certificado desde Java
  • Cargar un memoria un certificado desde un fichero
  • Guardar en un fichero un certificado
  • Incluir un certificado en fichero en un keystore

32
Ejemplos
  • Crear un certificado desde Java (I)

import sun.security.x509.CertAndKeyGen //
Creación del par de claves // (clave pública y
clave privada) String sigAlgName
"SHA1WithRSA" String keyAlgName "RSA" int
keysize 1024 CertAndKeyGen keypair new
CertAndKeyGen(keyAlgName, sigAlgName,
null) keypair.generate(keysize)
33
Ejemplos
  • Crear un certificado desde Java (II)

import sun.security.x509.X500Name // Creación
del certificado String commonName "Micael
Gallego Carrillo" String organizationalUnit
"DCC" String organization "URJC" String city
"Móstoles" String state "Comunidad de
Madrid" String country "ES" X500Name
x500Name new X500Name(commonName,
organizationalUnit, organization, city,
state, country)
34
Ejemplos
  • Crear un certificado desde Java (III)

X509Certificate chain new X509Certificate1
int validity 90 chain0 keypair.getSelfCerti
ficate(x500Name, (long) validity 24 60
60) char keyPass 'p', 'a', 's', 's'
String alias "MyKeyAlias" PrivateKey
privKey keypair.getPrivateKey() // Añadir las
claves y el certificado al keystore ks.setKeyEntry
(alias, privKey, keyPass, chain)
35
Ejemplos
  • Cargar un memoria un certificado desde un fichero

FileInputStream fr new FileInputStream("C\\fil
es\\certificado.cer") CertificateFactory cf
CertificateFactory.getInstance("X509") X509Cert
ificate c (X509Certificate) cf.generateCertific
ate(fr)
36
Ejemplos
  • Guardar en un fichero un certificado

X509Certificate cert File file
FileOutputStream out new
FileOutputStream(file) out.write(cert.getEncoded(
)) out.close()
37
Ejemplos
  • Incluir un certificado en fichero en un keystore

KeyStore ks CertificateFactory cf
CertificateFactory.getInstance("X.509") Certifi
cate certificate cf.generateCertificate( new
FileInputStream("C/files/certificado.cer")) //
Añadir el certificado al keystore String alias
"demoCert" ks.setCertificateEntry(alias,
certificate)
Write a Comment
User Comments (0)
About PowerShow.com