299 votes

Impossible de trouver un chemin de certification valide vers la cible demandée - erreur même après l'importation du certificat

J'ai un client Java qui essaie d'accéder à un serveur avec un certificat auto-signé.

Lorsque j'essaie de poster sur le serveur, je reçois l'erreur suivante:

unable to find valid certification path to requested target

Ayant fait quelques recherches sur le problème, j'ai ensuite fait ce qui suit.

  1. Enregistré le nom de domaine de mes serveurs sous forme de fichier root.cer.

  2. Dans le JRE de mon serveur Glassfish, j'ai exécuté ceci:

    keytool -import -alias example -keystore cacerts -file root.cer
  3. Pour vérifier que le certificat a bien été ajouté à mon cacert, j'ai fait ceci:

    keytool -list -v -keystore cacerts

    Je peux voir que le certificat est présent.

  4. J'ai ensuite redémarré Glassfish et réessayé le 'post'.

Je reçois toujours la même erreur.

J'ai l'impression que c'est parce que mon Glassfish ne lit pas réellement le fichier cacert que j'ai modifié mais peut-être un autre.

Avez-vous déjà rencontré ce problème et pouvez-vous me guider dans la bonne direction?

2 votes

Juste pour clarifier "J'ai un client Java qui essaie d'accéder à un serveur avec un certificat auto-signé.": vous parlez d'utiliser des certificats client qui sont auto-signés, n'est-ce pas? Y a-t-il une configuration spécifique pour les paramètres de votre connecteur sur Glassfish (paramètres du magasin de confiance, en particulier)?

0 votes

"J'ai un client Java essayant d'accéder à un serveur avec un certificat auto-signé." : tu parles d'utiliser des certificats de client qui sont auto-signés, n'est-ce pas ? - oui.

1 votes

J'ai trouvé 2 paramètres dans Glassfish JVM : -Djavax.net.ssl.keyStore=${com.sun.aas.instanceRoot}/config/‌​keystore.jks et -Djavax.net.ssl.trustStore=${com.sun.aas.instanceRoot}/confi‌​g/cacerts.jks. Maintenant, je dois ajouter mon certificat à l'un d'eux. Pouvez-vous confirmer que c'est le keystore auquel je dois l'ajouter ?

0voto

Sanjay Bharwani Points 1317

Dans mon cas, j'ai rencontré le problème car dans mon processus tomcat, un keystore spécifique était donné en utilisant

-Djavax.net.ssl.trustStore=/chemin/vers/un/entrepôt/auto-signé/truststore.jks

Cependant, j'importais le certificat dans le cacert de JRE/lib/security et les modifications n'étaient pas prises en compte. Ensuite, j'ai exécuté la commande suivante où /tmp/cert1.test contient le certificat du serveur cible

keytool -import -trustcacerts -keystore /chemin/vers/un/entrepôt/auto-signé/truststore.jks -storepass motdepasse123 -noprompt -alias rapidssl-myserver -file /tmp/cert1.test

Nous pouvons vérifier si l'importation du certificat a réussi

keytool -list -v -keystore /chemin/vers/un/entrepôt/auto-signé/truststore.jks

et voir si votre serveur cible est trouvé contre l'alias rapidssl-myserver

0voto

Rohit Tewari Points 11

Dans mon cas, j'obtenais une erreur de connexion à AWS Gov Postgres RDS. Il y a un lien séparé pour les certificats CA de GOV RDS - https://s3.us-gov-west-1.amazonaws.com/rds-downloads/rds-combined-ca-us-gov-bundle.pem

Ajoutez ces certificats pem à cacerts de java. Vous pouvez utiliser le script ci-dessous.

------ÉTAPES POUR WINDOWS-------

  1. Utilisez l'éditeur VSCODE et installez les plugins openssl, keytool
  2. créez un répertoire dans C:/rds-ca
  3. placez le fichier 'cacerts' et le fichier de script suivant - 'addCerts.sh' à l'intérieur du répertoire 'rd-ca'
  4. exécutez depuis vscode : 4.1 cd /c/rds-ca/ 4.2 ./addCerts.sh
  5. Copiez cacerts dans ${JAVA_HOME}/jre/lib/security

Code du script :

#!/usr/bin/env sh

OLDDIR="$PWD"

CACERTS_FILE=cacerts

cd /c/rds-ca

echo "Téléchargement des certificats RDS..."

curl  https://s3.us-gov-west-1.amazonaws.com/rds-downloads/rds-combined-ca-us-gov-bundle.pem > rds-combined-ca-bundle.pem

csplit -sk rds-combined-ca-bundle.pem "/-BEGIN CERTIFICATE-/" "{$(grep -c 'BEGIN CERTIFICATE' rds-combined-ca-bundle.pem | awk '{print $1 - 2}')}"

for CERT in xx*; do
    # extraire un alias lisible par l'homme du certificat
    ALIAS=$(openssl x509 -noout -text -in $CERT |
                   perl -ne 'next unless /Subject:/; s/.*CN=//; print')
    echo "importation de $ALIAS"

    keytool -import \
            -keystore  $CACERTS_FILE \
            -storepass changeit -noprompt \
            -alias "$ALIAS" -file $CERT
done

cd "$OLDDIR"
echo "$NEWDIR"

-1voto

Srishti Points 11

J'ai ajouté ceci dans mon fichier pom.xml et cela a fonctionné pour moi

                org.apache.maven.plugins
                maven-surefire-plugin
                3.0.0-M5

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X