Quiero importar un certificado autofirmado en Java por lo que cualquier aplicación Java que se va a intentar establecer una conexión SSL va a confiar en este certificado.

Hasta ahora, me las arreglé para importar en

keytool -import -trustcacerts -noprompt -storepass changeit -alias $REMHOST -file $REMHOST.pem
keytool -import -trustcacerts -noprompt -keystore cacerts -storepass changeit -alias $REMHOST -file $REMHOST.pem

Aún, cuando intento ejecutar HTTPSClient.class todavía tengo:

javax.net.ssl.SSLHandshakeException: sol.de seguridad.validador.ValidatorException: PKIX ruta de la construcción de error: el sol.de seguridad.proveedor de.certpath.SunCertPathBuilderException: no se puede encontrar la ruta de certificación válida para el destino solicitado
  • Yo no se basa necesariamente en ese código. Cosas como Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()) son completamente innecesarios en la primera parte. La segunda no hace cert verificación. Pruebe con un simple URLConnection para empezar. Estás seguro de que has modificado cacerts en lib/security de su instalación de JRE? Has probado el trustmanager opción de depuración?
InformationsquelleAutor sorin | 2012-07-23

8 Comentarios

  1. 212

    En Windows la forma más sencilla es utilizar el programa de portecle.

    1. Descargar e instalar portecle.
    2. Primero hacer 100% seguro de que usted sabe que JRE o JDK está siendo utilizado para ejecutar el programa. En una de 64 bits de Windows 7 podría ser bastante un par de JREs. Process Explorer puede ayudar con esto o puede utilizar: System.out.println(System.getProperty("java.home"));
    3. Copiar el archivo de entorno JAVA_HOME\lib\security\cacerts a otra carpeta.
    4. En Portecle haga clic en Archivo > Abrir el Archivo de Almacén de claves
    5. Seleccione el archivo cacerts
    6. Introducir esta contraseña: changeit
    7. Haga clic en Herramientas > Importación de Certificados de Confianza
    8. En examinar para buscar el archivo mycertificate.pem
    9. Haga Clic En Importar
    10. Haga clic en OK para la advertencia acerca de la ruta de confianza.
    11. Haga clic en ACEPTAR cuando se muestra la información sobre el certificado.
    12. Haga clic en Sí para aceptar el certificado de confianza.
    13. Cuando se pide un alias, haga clic en ACEPTAR y haga clic en ACEPTAR de nuevo cuando se dice que se ha importado el certificado.
    14. Haga clic en guardar. No te olvides de esto o se descarta el cambio.
    15. Copiar el archivo cacerts parte de atrás, donde la encontró.

    En Linux:

    Puede descargar el certificado SSL de un servidor web que ya está utilizando como este:

    $ echo -n | openssl s_client -connect www.example.com:443 | \
       sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/examplecert.crt

    Opcionalmente verificar la información del certificado:

    $ openssl x509 -in /tmp/examplecert.crt -text

    Importar el certificado en Java en el archivo cacerts almacén de claves:

    $ keytool -import -trustcacerts -keystore /opt/java/jre/lib/security/cacerts \
       -storepass changeit -noprompt -alias mycert -file /tmp/examplecert.crt

    Edición:

    Estos días que no suelen tener para agregar un certificado al almacén de claves, porque usted puede conseguir un certificado de $5 por año a partir de ssls.com. Sólo en caso de que una opción para usted.

    • La idea principal de esto no es portecle pero la importación de certificados en el almacén de claves.
    • Esto funcionó, pero mi java fue en una ubicación diferente. Mi almacén de claves que se encuentra en /usr/lib/jvm/java-openjdk/jre/lib/security/cacerts que encontré por la ejecución de ps -ef | grep java que me dijo mi java se ejecuta de openjdk que se encuentra en /usr/lib/jvm/java-openjdk/bin/java. También, si para una webapp recuerde reiniciar. Gracias por la ayuda!!
    • No he utilizado portecle, pero me encontré con que Almacén de claves Explorer funciona bastante bien para Windows, Linux, (y se debe trabajar en OSX así)
    • Muy atento. 2 cosas muy importantes destacan aquí. Uno es acerca de la importación en el derecho de almacén de claves. Y en el otro es para asegurarse de que se reinicie en caso de un servidor web.
    • Sólo para completar, el uso de $ sudo keytool -list -keystore cacerts | grep mycert para comprobar si la importación fue exitoso. Agregar el parámetro-v a la lista de los certificados con más detallado.
    • En 2019, incluso podemos obtener certificados SSL para el libre uso de servicios como Permite cifrar
    • Sólo para su INFORMACIÓN, funciona igual de bien en MacOS siguiendo los pasos para Linux

  2. 34
        D:\Java\jdk1.5.0_10\bin\keytool -import -file "D:\Certificates\SDS services\Dev\dev-sdsservices-was8.infavig.com.cer" -keystore "D:\Java\jdk1.5.0_10\jre\lib\security\cacerts" -alias "sds certificate"
    • Se le pedirá la contraseña del almacén de claves, el valor predeterminado es «changeit»
  3. 32

    Terminé de escribir un pequeño script que agrega los certificados a los almacenes de claves, por lo que es mucho más fácil de usar.

    Usted puede conseguir la última versión de https://github.com/ssbarnea/keytool-trust

    #!/bin/bash
    # version 1.0
    # https://github.com/ssbarnea/keytool-trust
    REMHOST=$1
    REMPORT=${2:-443}
    KEYSTORE_PASS=changeit
    KEYTOOL="sudo keytool"
    # /etc/java-6-sun/security/cacerts
    for CACERTS in  /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts \
    /usr/lib/jvm/java-7-oracle/jre/lib/security/cacerts \
    "/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security/cacerts" \
    "/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/MacOS/itms/java/lib/security/cacerts"
    do
    if [ -e "$CACERTS" ]
    then
    echo --- Adding certs to $CACERTS
    # FYI: the default keystore is located in ~/.keystore
    if [ -z "$REMHOST" ]
    then
    echo "ERROR: Please specify the server name to import the certificatin from, eventually followed by the port number, if other than 443."
    exit 1
    fi
    set -e
    rm -f $REMHOST:$REMPORT.pem
    if openssl s_client -connect $REMHOST:$REMPORT 1>/tmp/keytool_stdout 2>/tmp/output </dev/null
    then
    :
    else
    cat /tmp/keytool_stdout
    cat /tmp/output
    exit 1
    fi
    if sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' </tmp/keytool_stdout > /tmp/$REMHOST:$REMPORT.pem
    then
    :
    else
    echo "ERROR: Unable to extract the certificate from $REMHOST:$REMPORT ($?)"
    cat /tmp/output
    fi
    if $KEYTOOL -list -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT >/dev/null
    then
    echo "Key of $REMHOST already found, skipping it."
    else
    $KEYTOOL -import -trustcacerts -noprompt -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT -file /tmp/$REMHOST:$REMPORT.pem
    fi
    if $KEYTOOL -list -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT -keystore "$CACERTS" >/dev/null
    then
    echo "Key of $REMHOST already found in cacerts, skipping it."
    else
    $KEYTOOL -import -trustcacerts -noprompt -keystore "$CACERTS" -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT -file /tmp/$REMHOST:$REMPORT.pem
    fi
    fi
    done

    «

  4. 15

    Esto funcionó para mí. 🙂

    sudo keytool-importcert de archivo nombre de archivo.cer-alias randomaliasname -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit 
    
  5. 4

    Si usted está usando un certificado firmado por una Autoridad de certificación que no está incluido en el Java archivo cacerts por defecto, es necesario para completar la siguiente configuración para las conexiones HTTPS.
    Para la importación de certificados en el archivo cacerts:

    1. Abra el Explorador de Windows y navegue hasta el archivo cacerts, que se encuentra en el jre\lib\security subcarpeta donde AX Núcleo está instalado el Cliente. La ubicación predeterminada es C:\Program Files\ACL Software\AX Core Client\jre\lib\security
    2. Crear una copia de seguridad del archivo antes de hacer cualquier cambio.
    3. Dependiendo de los certificados que reciba de la Autoridad de certificación que está utilizando, usted puede necesitar para importar un certificado intermedio y/o certificado raíz en el archivo cacerts. Utilice la siguiente sintaxis para la importación de certificados:
      keytool-import-alias -keystore -trustcacerts -archivo
    4. Si va a importar tanto los certificados de los alias especificado para cada certificado debe ser único.
    5. Escriba la contraseña del almacén de claves en la «Contraseña» símbolo del sistema y presione Entrar. Java predeterminado de la contraseña para el archivo cacerts es «changeit».
      Escriba ‘y’ en el «Confiar en este certificado?» símbolo del sistema y presione Entrar.
    • Utilice este comando :-> keytool-import-alias <alias> -almacén de claves <cacerts_file> -trustcacerts -archivo <certificate_filename>
  6. 1

    El simple comando «keytool» también funciona en Windows y/o con Cygwin.

    SI usted está usando Cygwin aquí es la modificación de los comandos que he usado desde la parte inferior de la «S. Botha de la» respuesta :

    1. asegúrese de identificar el JRE en el interior del JDK que va a utilizar
    2. Iniciar su pronta/cygwin como admin
    3. ir dentro del directorio bin del JDK que por ejemplo, cd /cygdrive/c/Programa\ Archivos/Java/jdk1.8.0_121/jre/bin
    4. Ejecutar el comando keytool de su interior, donde se proporcione la ruta de acceso a su nueva Cert al final, así:

      ./keytool.exe -import -trustcacerts -keystore ../lib/security/cacerts  -storepass changeit -noprompt -alias myownaliasformysystem -file "D:\Stuff\saved-certs\ca.cert"

    Aviso, porque si este es bajo Cygwin está dando una ruta de acceso a un no-Cygwin programa, por lo que la ruta de acceso es similar a DOS, y en las cotizaciones.

  7. 0

    Posible que desee para tratar

    keytool -import -trustcacerts -noprompt -keystore <full path to cacerts> -storepass changeit -alias $REMHOST -file $REMHOST.pem

    no tengo ni la menor idea de en donde pone su certificado si usted acaba de escribir cacerts acaba de darle una ruta de acceso completa

  8. 0

    instalar certificado en java linux

    /opt/jdk(versión)/bin/keytool-import-alias aliasname -archivo de certificado.cer-almacén de claves cacerts -storepass contraseña

Dejar respuesta

Please enter your comment!
Please enter your name here