java - cacerts - keytool rsa
¿Cómo averiguo qué almacén de claves está utilizando mi JVM? (7)
Necesito importar un certificado en mi almacén de claves JVM. Estoy usando lo siguiente:
keytool -import -alias daldap -file somecert.cer
entonces necesitaría probablemente cambiar mi llamada a algo así como:
keytool -import -alias daldap -file somecert.cer -keystore cacerts –storepass changeit
Como se mencionó en DimtryB, de forma predeterminada, el almacén de claves se encuentra bajo el directorio de usuario. Pero si intenta actualizar el archivo cacerts
, para que la JVM pueda elegir las claves, deberá actualizar el archivo cacerts
en jre/lib/security
. También puede ver las teclas ejecutando el comando keytool -list -keystore cacerts
para ver si se agrega su certificado.
Encontramos este problema en un Tomcat que se ejecutaba desde un directorio jre que se eliminó (casi por completo) después de una actualización automática de jre, por lo que el jre en ejecución ya no pudo encontrar jre ... / lib / security / cacerts porque ya no existía.
Reiniciar Tomcat (después de cambiar la configuración para ejecutar desde la ubicación diferente jre) solucionó el problema.
Esto funciona para mí:
#! /bin/bash CACERTS=$(readlink -e $(dirname $(readlink -e $(which keytool)))/../lib/security/cacerts) if keytool -list -keystore $CACERTS -storepass changeit > /dev/null ; then echo $CACERTS else echo ''Can not find cacerts file.'' >&2 exit 1 fi
Solo para Linux. Mi Solaris no tiene readlink. Al final usé este Perl-Script:
#! /usr/bin/env perl use strict; use warnings; use Cwd qw(realpath); $_ = realpath((grep {-x && -f} map {"$_/keytool"} split('':'', $ENV{PATH}))[0]); die "Can not find keytool" unless defined $_; my $keytool = $_; print "Using ''$keytool''./n"; s/keytool$//; $_ = realpath($_ . ''../lib/security/cacerts''); die "Can not find cacerts" unless -f $_; my $cacerts = $_; print "Importing into ''$cacerts''./n"; `$keytool -list -keystore "$cacerts" -storepass changeit`; die "Can not read key container" unless $? == 0; exit if $ARGV[0] eq ''-d''; foreach (@ARGV) { my $cert = $_; s//.[^.]+$//; my $alias = $_; print "Importing ''$cert'' as ''$alias''./n"; `keytool -importcert -file "$cert" -alias "$alias" -keystore "$cacerts" -storepass changeit`; warn "Can not import certificate: $?" unless $? == 0; }
Mac OS X 10.12 con Java 1.8:
$ JAVA_HOME / jre / lib / security
cd $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home
A partir de ahí está en:
./jre/lib/security
Tengo un keystore de cacerts ahí.
Para especificar esto como una opción de VM:
-Djavax.net.ssl.trustStore=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre/lib/security/cacerts -Djavax.net.ssl.trustStorePassword=changeit
No digo que esta sea la forma correcta (¿Por qué java no sabe mirar dentro de JAVA_HOME?), Pero esto es lo que tenía que hacer para que funcione.
Puede encontrarlo en su directorio "Inicio":
En Windows 7:
C:/User/[YOUR ACCOUNT]/.keystore
En Linux (Ubuntu):
/home/[YOUR ACCOUNT]/.keystore
Su almacén de claves estará en su JAVA_HOME---> JRE -->lib---> security--> cacerts
. Debe verificar dónde está configurado su JAVA_HOME, posiblemente uno de estos lugares,
Computadora ---> Avanzada -> Variables de entorno ---> JAVA_HOME
Su servidor de inicio de archivos por lotes.
En su comando de importación -keystore cacerts (brinde la ruta completa al JRE anterior aquí en lugar de solo decir cacerts).
Keystore Ubicación
Cada comando keytool tiene una opción -keystore
para especificar el nombre y la ubicación del archivo de almacén de claves persistente para el almacén de claves administrado por keytool. El almacén de claves está almacenado por defecto en un archivo llamado .keystore
en el directorio de inicio del usuario, según lo determinado por la propiedad del sistema "usuario.almacenamiento". Dado el nombre de usuario uName, el valor de la propiedad "user.home" se establece por defecto en
C:/Users/uName on Windows 7 systems
C:/Winnt/Profiles/uName on multi-user Windows NT systems
C:/Windows/Profiles/uName on multi-user Windows 95 systems
C:/Windows on single-user Windows 95 systems
Por lo tanto, si el nombre de usuario es "cathy", "user.home" está predeterminado en
C:/Users/cathy on Windows 7 systems
C:/Winnt/Profiles/cathy on multi-user Windows NT systems
C:/Windows/Profiles/cathy on multi-user Windows 95 systems
http://docs.oracle.com/javase/1.5/docs/tooldocs/windows/keytool.html