web-dev-qa-db-fra.com

Erreur lors de l'importation du certificat SSL: il ne s'agit pas d'un certificat X.509

J'essaie de mettre à jour le certificat SSL conformément à cet article

Je suis noob en certificats, alors j'ai suivi ce guide . Mais quand j'entre 

keytool -keystore mycacerts -storepass changeit -importcert -file "C:\Users\Noks\Desktop\cacerts.pem" -v

Je reçois l'erreur:

keytool error: Java.lang.Exception: Input not an X.509 certificate
Java.lang.Exception: Input not an X.509 certificate
        at Sun.security.tools.KeyTool.addTrustedCert(KeyTool.Java:1913)
        at Sun.security.tools.KeyTool.doCommands(KeyTool.Java:818)
        at Sun.security.tools.KeyTool.run(KeyTool.Java:172)
        at Sun.security.tools.KeyTool.main(KeyTool.Java:166)

Comment puis-je réparer ça?

31
nikel

Votre fichier cacerts.pem contient-il un seul certificat? Comme il s’agit d’un PEM, regardez-le, il faut commencer par 

-----BEGIN CERTIFICATE-----

et se termine par

-----END CERTIFICATE-----

Enfin, pour vérifier qu’il n’est pas corrompu, procurez-vous openssl et imprimez ses détails à l’aide de

openssl x509 -in cacerts.pem -text

32
Bruno Grieder

De nombreuses autorités de certification fourniront un certificat au format PKCS7.

Selon documentation Oracle , la commande keytool peut gérer PKCS # 7 mais parfois elle échoue

La commande keytool peut importer des certificats X.509 v1, v2 et v3, ainsi que des fichiers Chaînes de certificats au format PKCS # 7 consistant en certificats de cette type. Les données à importer doivent être fournies en binaire format de codage ou au format de codage imprimable (également appelé codage Base64 ) défini par la norme Internet RFC 1421. Dans ce dernier Dans ce cas, le codage doit être limité au début par une chaîne qui commence par ----- BEGIN et est limité à la fin par une chaîne de caractères commençant par avec ----- FIN.

Si le fichier PKCS7 ne peut pas être importé, essayez de le transformer de PKCS7 à X.509:

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
29
superlazy

Cela semble être un vieux fil, mais je vais ajouter mon expérience ici. J'ai essayé d'installer un cert aussi et j'ai eu cette erreur. J'ai ensuite ouvert le fichier cer avec un éditeur de texte et ai remarqué qu'il y avait un espace supplémentaire (caractère) à la fin de chaque ligne. Supprimer ces lignes m'a permis d'importer le certificat.

J'espère que cela vaut quelque chose à quelqu'un d'autre.

4
XDanny322

J'ajouterai également mon expérience ici au cas où cela aiderait quelqu'un:

Au travail, nous utilisons couramment les deux commandes suivantes pour permettre à IntelliJ IDEA de communiquer avec différents serveurs, par exemple nos référentiels maven internes:

[Elevated]C:\Program Files\JetBrains\IntelliJ IDEA {version}\jre64>bin\keytool 
    -printcert -rfc -sslserver maven.services.{our-company}.com:443 > public.crt

[Elevated]C:\Program Files\JetBrains\IntelliJ IDEA {version}\jre64>bin\keytool
    -import -storepass changeit -noprompt -trustcacerts -alias services.{our-company}.com 
    -keystore lib\security\cacerts -file public.crt

Or, il arrive parfois que la commande keytool -printcert ne puisse pas communiquer avec le monde extérieur en raison de problèmes de connectivité temporaires, tels que le pare-feu qui l’empêche, l’utilisateur a oublié de démarrer son VPN, peu importe. C'est un fait de la vie que cela puisse arriver. Ce n'est pas vraiment le problème.

Le problème est que lorsque l'outil stupide rencontre une telle erreur, il n'émet pas le message d'erreur sur le périphérique d'erreur standard, mais sur le périphérique de sortie standard!

Alors voici ce qui finit par arriver:

  • Lorsque vous exécutez la première commande, aucun message d'erreur ne s'affiche. Par conséquent, vous n'avez aucune idée de son échec. Cependant, au lieu d'une clé, le fichier public.crt contient désormais un message d'erreur disant keytool error: Java.lang.Exception: No certificate from the SSL server.
  • Lorsque vous exécutez la deuxième commande, il trouve un message d'erreur au lieu d'une clé dans public.crt. Il échoue donc en indiquant keytool error: Java.lang.Exception: Input not an X.509 certificate.

La ligne du bas est: après keytool -printcert ... > public.crt toujours vider le contenu de public.crt pour s’assurer qu’il s’agit bien d’une clé et non d’un message d’erreur avant de continuer à exécuter keytool -import ... -file public.crt

1
Mike Nakis