Estoy tratando de configurar mi correo electrónico en Jenkins / Hudson, y constantemente recibo el error:
java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be
non-empty
He visto una buena cantidad de información en línea sobre el error, pero no he conseguido que funcione. Estoy usando Sun's JDK en Fedora Linux (no OpenJDK).
Aquí hay algunas cosas que he probado. Intenté seguir los consejos de esta publicación , pero copiar los cacerts de Windows a mi caja Fedora que alojaba a Jenkins no funcionó. Intenté seguir esta guía mientras intento configurar Gmail como mi servidor SMTP, pero tampoco funcionó. También intenté descargar y mover esos archivos cacert manualmente y moverlos a mi carpeta Java usando una variación de los comandos de esta guía .
Estoy abierto a cualquier sugerencia ya que actualmente estoy atrapado en este momento. Lo hice funcionar desde un servidor de Windows Hudson, pero estoy teniendo problemas con Linux.
${CATALINA_HOME}\conf
peroCATALINA_HOME
no me estaba configurando, así que Tomcat estaba buscando\conf
el almacén de confianza.En Ubuntu 18.04 , este error tiene una causa diferente (JEP 229, cambia del
jks
formato predeterminado del almacén de claves alpkcs12
formato y la generación de archivos Cacerts de Debian usa el predeterminado para los archivos nuevos) y solución alternativa :Estado (2018-08-07) , el error se ha corregido en Ubuntu Bionic LTS 18.04.1 y Ubuntu Cosmic 18.10.
🗹 Ubuntu 1770553: [SRU] backport ca-certificados-java de cosmic (20180413ubuntu1)
🗹 Ubuntu 1769013: Combine ca-certificados-java 20180413 (principal) de Debian inestable (principal)
🗹 Ubuntu 1739631: la instalación nueva con JDK 9 no puede usar el archivo de almacén de claves generado por PKCS12 generado
🗹 docker-library 145: la imagen 9-jdk tiene problemas de SSL
🗹 Debian 894979: ca-certificados-java: no funciona con OpenJDK 9, las aplicaciones fallan con InvalidAlgorithmParameterException: el parámetro trustAnchors no debe estar vacío
D JDK-8044445: JEP 229: Crear almacenes de claves PKCS12 de forma predeterminada
EP JEP 229: Crear almacenes de claves PKCS12 por defecto
Si el problema continúa después de esta solución alternativa, es posible que desee asegurarse de que realmente está ejecutando la distribución de Java que acaba de solucionar.
Puede configurar las alternativas de Java a 'auto' con:
Puede verificar la versión de Java que está ejecutando:
También existen soluciones alternativas, pero tienen sus propios efectos secundarios que requerirán un mantenimiento adicional futuro, sin ningún beneficio.
La siguiente mejor solución es agregar la fila
a los archivos
lo que exista
La tercera solución alternativa menos problemática es cambiar el valor de
a
en los archivos
lo que exista, y luego elimine el
cacerts
archivo y vuelva a generarlo de la manera descrita en la última fila del script de solución alternativa en la parte superior de la publicación.fuente
Esto solucionó el problema para mí en Ubuntu:
(encontrado aquí: https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1396760 )
ca-certificates-java
no es una dependencia en Oracle JDK / JRE, por lo que debe instalarse explícitamentefuente
En Ubuntu 18.04, la causa raíz es un conflicto entre openjdk-11-jdk (que es el valor predeterminado) y otros paquetes que dependen de él. Ya se ha solucionado en Debian y se incluirá en Ubuntu en breve. Mientras tanto, la solución más simple es degradar su Java a la versión 8. Otras soluciones empleadas
ca-certificates-java
son mucho más complicadas.Primero elimine los paquetes en conflicto:
Compruebe si eliminó con éxito todos los paquetes relacionados:
El sistema le indicará que no hay Java disponible para configurar , de lo contrario, esta solución falla .
Luego reinstale los paquetes requeridos:
fuente
openjdk-8-jdk
paquete, eliminar el/etc/ssl/certs/java/cacerts
archivo y ejecutar,sudo update-ca-certificates -f
que es la forma indirecta de cambiar de unpkcs12
archivo cacertsjks
formateado a uno formateado, como se describe en otra parte de este hilo.Básicamente, EJP respondió la pregunta (y me doy cuenta de que esta tiene una respuesta aceptada), pero acabo de lidiar con este problema de caso extremo y quería inmortalizar mi solución.
Tuve el
InvalidAlgorithmParameterException
error en un servidor Jira alojado que había configurado previamente para acceso solo SSL. El problema era que había configurado mi almacén de claves en el formato PKCS # 12, pero mi almacén de confianza estaba en el formato JKS.En mi caso, había editado mi
server.xml
archivo para especificar el keytoreType a PKCS, pero no especifiqué el truststoreType, por lo que el valor predeterminado es cualquiera que sea el keystoreType. Especificando el truststoreType explícitamente como JKS lo resolvió para mí.fuente
Me encontré con esta solución desde la publicación del blog Solucionando el problema trustAnchors al ejecutar OpenJDK 7 en OS X :
Solución del problema trustAnchors al ejecutar OpenJDK 7 en OS X. Si está ejecutando OpenJDK 7 en OS X y ha visto esta excepción:
Hay una solución simple. Simplemente enlace en el mismo archivo cacerts que utiliza JDK 1.6 de Apple:
Debe hacer esto para cada versión de OpenJDK que haya instalado. Simplemente cambie
-v 1.7
a la versión que desea arreglar. Ejecute/usr/libexec/java_home -V
para ver todos los JRE y JDK que ha instalado.Quizás los chicos de OpenJDK podrían agregar esto a sus scripts de instalación.
fuente
security
carpeta (blacklisted.certs
,local_policy.jar
yUS_export_policy.jar
) para Java para ser feliz.cacerts
bajojre
directorio?En Ubuntu 12.10 (Quantal Quetzal) o posterior, los certificados se encuentran en el paquete ca-certificados-java . El uso
-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts
los recogerá independientemente de qué JDK esté usando.fuente
update-ca-certificates -f
manualmente, para llenar el archivo cacertsMe encontré con este problema exacto en OS X, usando JDK 1.7, después de actualizar a OS X v10.9 (Mavericks). La solución que funcionó para mí fue simplemente reinstalar la versión de Apple de Java, disponible en http://support.apple.com/kb/DL1572 .
fuente
Yo corri
para crear un archivo de certificado y luego:
Estaba de vuelta en el negocio, gracias chicos. Es una pena que no esté incluido en la instalación, pero al final llegué allí.
fuente
sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure**
me salesudo: /var/lib/dpkg/info/ca-certificates-java.postinst: command not found
sudo update-ca-certificates -f
es suficiente en Debian jessie conopenjdk-8-jre-headless
jessie-backports, siempre queca-certificates-java
esté instalado. Creo que el orden de instalación es importante (JRE despuésca-certificates-java
puede causar esto, ya que este último no tiene ningún desencadenante para el Java 8 compatible).sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure
sin estrellas **update-ca-certificates -f
es lo que lo solucionó. No necesitaba el segundo comandoEl error indica que el sistema no puede encontrar el almacén de confianza en la ruta provista con el parámetro
javax.net.ssl.trustStore
.En Windows, copié el
cacerts
archivojre/lib/security
en el directorio de instalación de Eclipse (mismo lugar que eleclipse.ini
archivo) y agregué la siguiente configuración eneclipse.ini
:Tuve algunos problemas con la ruta a los cacerts (la variable de entorno% java_home% se sobrescribe de alguna manera), por lo que utilicé esta solución trivial.
La idea es proporcionar una ruta válida al archivo del almacén de confianza, idealmente sería usar uno relativo. También puede usar una ruta absoluta.
Para asegurarse de que el tipo de tienda es JKS, debe ejecutar el siguiente comando:
fuente
Eliminar el paquete ca-certificados-java e instalarlo nuevamente funcionó para mí ( Ubuntu MATE 17.10 (Artful Aardvark)).
Gracias, jdstrand: Comentario 1 para el error 983302, Re: ca-certificados-java no puede instalar los cacerts de Java en Oneiric Ocelot .
fuente
He tenido muchos problemas de seguridad después de actualizar a OS X v10.9 (Mavericks):
trustAnchors
el parámetro no debe estar vacíoApliqué esta actualización de Java y solucionó todos mis problemas: http://support.apple.com/kb/DL1572?viewlocale=en_US
fuente
Esperaba cosas como esta, ya que uso un JVM alternativo en mi Talend Open Studio (el soporte actualmente solo existe hasta JDK 1.7). Yo uso 8 por motivos de seguridad ... de todos modos
Actualice su tienda de certificados:
entonces
agregue un nuevo valor en sus parámetros de inicialización
Para mí, la segunda entrada funcionó. Creo que, dependiendo de la versión de Talend Open Studio / TEnt + JVM, tiene un nombre de parámetro diferente, pero busca el mismo archivo de almacén de claves.
fuente
javax.net.ssl.trustAnchors
? No se menciona en la documentación de JSSE.Para mí fue causado por la falta de un TrustedCertEntry en el almacén de confianza.
Para probar, use:
Me da:
Aunque mi PrivateKeyEntry contiene una CA, se debe importar por separado :
Importa el certificado y luego volver a ejecutarlo
keytool -list -keystore keystore.jks
ahora proporciona:Ahora tiene un TrustedCertEntry, y Tomcat comenzará con éxito.
fuente
Algunos lanzamientos de proveedores de OpenJDK causaron esto al tener un
cacerts
archivo vacío distribuido con el binario. El error se explica aquí: https://github.com/AdoptOpenJDK/openjdk-build/issues/555Puede copiar al
adoptOpenJdk8\jre\lib\security\cacerts
archivo desde una instalación antigua comoc:\Program Files\Java\jdk1.8.0_192\jre\lib\security\cacerts
.La versión con errores de AdoptOpenJDK es https://github.com/AdoptOpenJDK/openjdk8-releases/releases/download/jdk8u172-b11/OpenJDK8_x64_Win_jdk8u172-b11.zip
fuente
Si experimenta esto en Ubuntu con JDK9 y Maven, puede agregar esta opción JVM: primero verifique si la ruta existe:
Si falta el archivo, intente instalar ca-certificados-java como alguien señaló:
fuente
Recibí este mensaje de error en Java 9.0.1 en Linux. Fue debido a un error conocido del JDK, donde el archivo cacerts está vacío en el paquete binario .tar.gz (descargado de http://jdk.java.net/9/ ).
Consulte el párrafo "problemas conocidos" de las notas de la versión JDK 9.0.1 , que dice "TLS no funciona de manera predeterminada en OpenJDK 9".
En Debian / Ubuntu (y probablemente otras derivadas), una solución simple es reemplazar el archivo cacerts con el del paquete "ca-certificados-java":
En Red Hat Linux / CentOS, puede hacer lo mismo desde el paquete "ca-certificados":
fuente
Tuve este problema al intentar usar Maven 3, después de actualizar de Ubuntu 16.04 LTS (Xenial Xerus) a Ubuntu 18.04 LTS (Bionic Beaver).
Comprobar / usr / lib / jvm / java-8-oracle / jre / lib / security mostró que mi archivo cacerts era un enlace simbólico que apuntaba a
/etc/ssl/certs/java/cacerts
.También tenía un archivo sospechosamente nombrado
cacerts.original
.Cambié el nombre
cacerts.original
acacerts
, y eso solucionó el problema.fuente
cacerts.original
archivo tenía eljks
formato y se generó con Java 8 de Ubuntu 16.04, que usaba ese formato como predeterminado. Elcacerts
archivo estaba en elpkcs12
formato, generado por Java 10 de Ubuntu 18.04, que utiliza este formato como predeterminado. Como se explica en otra parte de este hilo, el nuevo formato requiere que pase la contraseña al ejecutable. Pero siempre que genere un nuevojks
cacerts
archivo vacío o copie uno antiguo, el siguiente proceso de generación de cacerts vaciará el archivo existente y lo rellenará con los certificados de CA del sistema de archivos.También encontré esto en OS X después de actualizar OS X v10.9 (Mavericks), cuando se usaba el antiguo Java 6 e intentaba acceder a una URL HTTPS. La solución fue la inversa de Peter Kriens; Necesitaba copiar
cacerts
desde el espacio 1.7 a la ubicación vinculada por la versión 1.6:fuente
En mi caso, el archivo JKS utilizado en la aplicación cliente estaba dañado. Creé uno nuevo e importé los certificados SSL del servidor de destino. Luego usé el nuevo archivo JKS en la aplicación cliente como un almacén de confianza, como:
Fuente: Java SSL y certificado de almacén de claves
Uso la herramienta (KeyStore Explorer) para crear el nuevo JKS. Puede descargarlo desde este enlace, KeyStore Explorer .
fuente
También puede encontrar este error después de actualizar a Spring Boot 1.4.1 (o más reciente) porque trae Tomcat 8.5.5 como parte de sus dependencias.
El problema se debe a la forma en que Tomcat trata con la tienda de confianza. Si ha especificado que la ubicación de su tienda de confianza es la misma que su almacén de claves en la configuración de Spring Boot, es probable que reciba el
trustAnchors parameter must be non-empty
mensaje al iniciar la aplicación.Simplemente elimine la
server.ssl.trust-store
configuración a menos que sepa que la necesita, en cuyo caso consulte los enlaces a continuación.Los siguientes problemas contienen más detalles sobre el problema:
fuente
Encontré este problema con el SDK de Android SDKmanager. Para mí esta solución funcionó:
/usr/lib/jvm/java-8-oracle/jre/lib/security/
cacert
concacert.original
El
cacert
archivo era pequeño (22B). He instaladooracle-java8-installer
desdeppa:webupd8team/java
(de acuerdo con este manual: https://docs.nativescript.org/start/ns-setup-linux ).fuente
Para el registro, ninguna de las respuestas aquí funcionó para mí. Mi compilación de Gradle comenzó a fallar misteriosamente con este error, incapaz de obtener HEAD desde Maven central para un archivo POM particular .
Resultó que tenía JAVA_HOME configurado en mi propia versión personal de OpenJDK, que había creado para depurar un problema de javac. Ajustándolo nuevamente al JDK instalado en mi sistema lo arregló.
fuente
En Red Hat Linux resolví este problema importando los certificados
/etc/pki/java/cacerts
.fuente
Debe agregar las dos líneas anteriores a su código. No puede encontrar el almacén de confianza.
fuente
java -Djavax.net.ssl.trustStore=/tmp/cacerts ...
o si desea establecerlas globalmente para todos los programas ejecutados con un JDK, agregue la fila almanagement.properties
archivo del JDK .Enfrenté este problema mientras ejecutaba un conjunto particular de Android para probar en Ubuntu 14.04 (Trusty Tahr). Dos cosas funcionaron para mí como lo sugirió shaheen:
fuente
Ninguna de las soluciones que encontré en Internet funcionó, pero una versión modificada de la respuesta de Peter Kriens parece hacer el trabajo.
Primero encuentre su carpeta Java ejecutando
/usr/libexec/java_home
. Para mí fue la1.6.0.jdk
versión. Luego ve a sulib/security
subcarpeta (para mí/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security
).Luego elimine el
cacerts
archivo si ya hay uno y busque uno en el sistema consudo find / -name "cacerts"
. Encontró varios elementos para mí, en versiones de Xcode u otras aplicaciones que había instalado, pero también en las/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts
que elegí.Use ese archivo y cree un enlace simbólico (dentro de la carpeta Java de antes)
sudo ln -fsh "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts"
, y debería funcionar.Tengo ambos: Java de la descarga 2017-001 de Apple ( https://support.apple.com/kb/dl1572 - Supongo que es de allí de donde provienen los certificados correctos) y uno de Oracle instalado en Mac OS X v10.12 (Sierra) .
fuente
en ubuntu 14.04 con openjdk 11 de ppa: openjdk-r / ppa esto funcionó para mí:
en java.security cambie el tipo de almacén de claves a
entonces:
cuando verifique si funcionó, asegúrese de no estar usando ningún demonio con Java antiguo aún ejecutándose (p. ej.
--no-daemon
opción para gradle)Este error describe todo muy bien y lo ayudará a comprender lo que está sucediendo https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1739631
fuente
En Ubuntu 18.04 necesitaba usar OpenJDK 1.7 para el mantenimiento de un proyecto antiguo. Descargué el paquete binario. Pero cuando ejecuté mi script en él, obtuve el mismo error.
La solución fue eliminar el
cacerts
archivo del JDK descargado en lajre/lib/security
carpeta y luego crearlo como enlace simbólico alcacerts
archivo del sistema en/etc/ssl/certs/java/
:sudo ln -s /etc/ssl/certs/java/cacerts /path/to/downloaded/java/jre/lib/security/cacerts
fuente
Es poco probable que esto ayude a cualquier persona, pero ... para cualquiera que ejecute Java 8 desde una imagen Docker en una Raspberry Pi (usando CPU AMD) Obtuve el siguiente Dockerfile para construir y ejecutar con éxito para mí
fuente