## Generar Claves

Si un firmante de código no tiene todavía una clave privada para firmar el código, primero debe generar la clave junto con una correspondiente clave pública que puede ser usada por el sistema de ejecución del receptor para verificar la firma.

Como esta lección asume que tu no tienes dichas claves, vas a crear un keystore llamado susanstore y ha crear una entrada con una pareja de clavex pública/privada recien creada (con la clave pública en un certificado).

Ahora imaginemos que somos Susan Jones y que trabajamos en la departamento de ventas de la compañia ABC. Tecleamos el siguiente comando para crear el keystore llamado susanstore y para generar las claves para Susan Jones:

    keytool -genkey -alias signFiles -keypass kpi135
     -keystore susanstore -storepass ab987c

(Nota: Debe teclearse como una sóla línea.)

## Subpartes del Comando keytool

> Echemos un vistazo a los que significan cada una de las subpartes de keytool.
> - El comando para generar claves es -genkey.
> - La subparte -alias signFiles indica el alias que se va usar en el futuro para referirse a la entrada del keystore que contiene las claves que se van a generar.
> - La subparte -keypass kpi135 especifica una password para la clave privada a generar. Esta password siempre en necesaria en cado de acceder a la entrada del keystore que contiene la clave. La entrada no tiene que tener su propia password ; si no incluimos una opción -keypass, se nos pedirá la password dela clave y nos ofrecerá la opción de permitir que sea la misma que la del keystore.
> - La subparte -keystore susanstore indica el nombre (y opcionalmente el path) del keystore que estamos creando o usando.
> - La subparte -storepass ab987c indica la password del keystore. Si no incluimos la opción -storepass, se nos pedirá la password para el keystore.

> Por razones de seguridad no deberías realmente suninistrar las password en la línea de comandos, porque podrían ser interceptadas fácilmente. en su lugar deberías desactivar las opciones -keypass y -storepass y teclear las password cuando te las pida.

## Información de Nombre-Distinguido

> Si usamos el comando anterior, nos preguntará por la información del nombre-distinguido. En las siguientes preguntas, la parte en negrita indica lo que deberíamos responder:

>     What is your first and last name?
>       [Unknown]:  Susan Jones
>     What is the name of your organizational unit?
>       [Unknown]:  Purchasing
>     What is the name of your organization?
>       [Unknown]:  ABC
>     What is the name of your City or Locality?
>       [Unknown]:  Cupertino
>     What is the name of your State or Province?
>       [Unknown]:  CA
>     What is the two-letter country code for this unit?
>       [Unknown]:  US
>     Is <CN=Susan Jones, OU=Purchasing, O=ABC,
>         L=Cupertino, ST=CA, C=US> correct?
>       [no]:  y

## Resultados del Comando

> El comando keytool crea el keystore llamado susanstore (si no existía anteriormente) en el mismo directorio en que se ejecuta el comando y le asigna la password ab987c. El comando genera una pareja de claves pública/privada para la entidad cuyo nombre distinguido tiene un nombre común de Susan Jones y la unidad organizativa de Purchasing.

> El comando crea un certificado auto-firmado que incluye la clave pública y la información del nombre distinguido. (El nombre distinguido que suministramos se usará en el campo "subject" en el certificado). Este certificado será válido durante 90 días, el periodo por defecto de validez si no especificamos una opción -validity. El certificado está asociado con la clave privada en una entrada del keystore referida por el alias signFiles. La clave privada tiene asignada la password kpi135.

> Nota: El comando podría ser más corto si aceptamos las opcione por defecto y si deseamos que se nos pidan varios valores. Siempre que ejecutemos el comando keytool, se usan las opciones no específicadas que tengan valores por defecto, y se nos pedirá cualquier valor necesario. Par el comando genkey, las opciones con valores por defecto incluida el alias (cuyo valor por defecto es mykey), validity (90 dias), y keystore (el fichero llamado .keystore en nuestro directorio home). Los valores requeridos son dname, storepass, y keypass.

> Ozito