Comment importer un certificat. cer dans un keystore java?


Lors du développement d'un client webservice Java, j'ai rencontré un problème. L'authentification pour le webservice utilise un certificat client, un nom d'utilisateur et un mot de passe. Le certificat client que j'ai reçu de la société derrière le webservice est au format .cer. Lorsque j'inspecte le fichier à l'aide d'un éditeur de texte, il a le contenu suivant:

-----BEGIN CERTIFICATE-----
[Some base64 encoded data]
-----END CERTIFICATE-----

Je peux importer ce fichier en tant que certificat dans Internet Explorer (sans avoir à entrer de mot de passe!) et de l'utiliser pour s'authentifier auprès du webservice.

J'ai pu importer ce certificat dans un magasin de clés en supprimant d'abord la première et la dernière ligne, en convertissant les nouvelles lignes unix et en exécutant un décodage base64. Le fichier résultant peut être importé dans un magasin de clés (à l'aide de la commande keytool). Lorsque je liste les entrées dans le magasin de clés, cette entrée est du type trustedCertEntry. En raison de ce type d'entrée (?) Je ne peux pas utiliser ce certificat pour m'authentifier auprès du webservice. Je commence à penser que le certificat fourni est un public certificat qui est utilisé pour l'authentification...

Une solution de contournement que j'ai trouvée consiste à importer le certificat dans IE et à l'exporter en tant que fichier .pfx. Ce fichier peut être chargé en tant que magasin de clés et peut être utilisé pour s'authentifier auprès du webservice. Cependant, je ne peux pas m'attendre à ce que mes clients effectuent ces étapes chaque fois qu'ils reçoivent un nouveau certificat. Je voudrais donc charger le fichier .cer directement dans Java. Toutes les pensées?

Informations supplémentaires: la société derrière le webservice m'a dit que le certificat doit être demandé (en utilisant IE et le site Web) au PC et à l'utilisateur qui importerait le certificat plus tard.

Author: Steven Vascellaro, 2010-12-01

8 answers

  • Si vous souhaitez authentifier vous avez besoin de la clé privée. Il n'y a pas d'autre option.
  • Un certificat est une clé publique avec des propriétés supplémentaires (comme le nom de l'entreprise, le pays,...) qui est signé par une autorité de certification qui garantit que les propriétés attachées sont vraies.
  • .Les fichiers CER sont des certificats et n'ont pas de clé privée. La clé privée est fournie avec un .PFX fichier keystore normalement. Si vous vous authentifiez vraiment c'est parce que vous avez déjà importé le privé clé.
  • Vous pouvez normalement importer .Certificats CER sans aucun problème avec

    keytool -importcert -file certificate.cer -keystore keystore.jks -alias "Alias"
    
 238
Author: lujop, 2015-08-21 11:56:56

Importer .cer fichier de certificat téléchargé à partir du navigateur (ouvrez l'URL et creusez pour plus de détails) danscacerts keystore dans java_home\jre\lib\security a fonctionné pour moi, par opposition aux tentatives de générer et d'utiliser mon propre keystore.

  1. Allez à votre java_home\jre\lib\security
  2. (Windows) Ouvrez admin de la ligne de commande en utilisant cmd et CTRL+MAJ+SAISISSEZ
  3. Exécutez keytool pour importer le certificat:
    • (Remplacer yourAliasName et path\to\certificate.cer respectivement)

 ..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias yourAliasName -file path\to\certificate.cer

De cette façon, vous n'avez pas à spécifier d'options JVM supplémentaires et le certificat doit être reconnu par le JRE.

 49
Author: jediz, 2017-10-06 16:46:27

Voici le code que j'ai utilisé pour l'importation par programme .fichiers cer dans un nouveau magasin de clés.

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
//VERY IMPORTANT.  SOME OF THESE EXIST IN MORE THAN ONE PACKAGE!
import java.security.GeneralSecurityException;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;

//Put everything after here in your function.
KeyStore trustStore  = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null);//Make an empty store
InputStream fis = /* insert your file path here */;
BufferedInputStream bis = new BufferedInputStream(fis);

CertificateFactory cf = CertificateFactory.getInstance("X.509");

while (bis.available() > 0) {
    Certificate cert = cf.generateCertificate(bis);
    trustStore.setCertificateEntry("fiddler"+bis.available(), cert);
}
 42
Author: Patrick M, 2012-09-17 05:49:15

Vous ne devriez pas avoir à apporter de modifications au certificat. Êtes-vous sûr d'exécuter la bonne commande d'importation?

Ce qui suit fonctionne pour moi:

keytool -import -alias joe -file mycert.cer -keystore mycerts -storepass changeit

Où mycert.cer contient:

-----BEGIN CERTIFICATE-----
MIIFUTCCBDmgAwIBAgIHK4FgDiVqczANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
BhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAY
...
RLJKd+SjxhLMD2pznKxC/Ztkkcoxaw9u0zVPOPrUtsE/X68Vmv6AEHJ+lWnUaWlf
zLpfMEvelFPYH4NT9mV5wuQ1Pgurf/ydBhPizc0uOCvd6UddJS5rPfVWnuFkgQOk
WmD+yvuojwsL38LPbtrC8SZgPKT3grnLwKu18nm3UN2isuciKPF2spNEFnmCUWDc
MMicbud3twMSO6Zbm3lx6CToNFzP
-----END CERTIFICATE-----
 16
Author: dogbane, 2010-12-01 14:53:51

Le certificat que vous avez déjà est probablement le certificat du serveur, ou le certificat utilisé pour signer le certificat du serveur. Vous en aurez besoin pour que votre client de service Web puisse authentifier le serveur.

Mais si vous devez également effectuer une authentification client avec SSL, vous devez obtenir votre propre certificat pour authentifier votre client de service Web. Pour cela, vous devez créer une demande de certificat; le processus consiste à créer votre propre clé privée, et le clé publique correspondante et attacher cette clé publique avec certaines de vos informations (e-mail, nom, nom de domaine, etc.) à un fichier appelé demande de certificat. Ensuite, vous envoyez cette demande de certificat à la société qui vous l'a déjà demandée, et elle créera votre certificat, en signant votre clé publique avec leur clé privée, et elle vous renverra un fichier X509 avec votre certificat, que vous pouvez maintenant ajouter à votre magasin de clés, et vous serez prêt à vous connecter à un service Web en utilisant SSL nécessitant une authentification client.

Pour générer votre demande de certificat, utilisez "keytool -certreq -alias -fichier -keypass -keystore ". Envoyez le fichier résultant à la société qui va le signer.

Lorsque vous récupérez votre certificat, exécutez "keytool -importcert -alias -keypass -keystore ".

Vous devrez peut-être utiliser-storepass dans les deux cas si le magasin de clés est protégé (ce qui est une bonne idée).

 6
Author: Chochos, 2010-12-01 16:21:40

Un outil GUI open source est disponible à keystore-explorer.org

L'Explorateur De Fichier De Clés

KeyStore Explorer est un remplacement de l'interface graphique open source pour Java utilitaires de ligne de commande keytool et jarsigner. Explorateur de KeyStore présente leurs fonctionnalités, et plus encore, via un graphique intuitif interface utilisateur.

Les écrans suivants vous aideront (ils proviennent du site officiel)

Écran par défaut que vous obtenez en exécutant le commande:

shantha@shantha:~$./Downloads/kse-521/kse.sh

entrez la description de l'image ici

Et allez dans l'option Examine et Examine a URL, puis donnez l'URL Web que vous souhaitez importer.

La fenêtre de résultat sera comme ci-dessous si vous donnez le lien du site Google. entrez la description de l'image ici

C'est l'un des cas d'Utilisation et le reste est à l'utilisateur(tous les crédits vont à l' keystore-explorer.org)

 5
Author: Shantha Kumara, 2017-11-27 06:50:32

Voici un script que j'ai utilisé pour importer par lots un tas de fichiers crt dans le répertoire courant dans le magasin de clés java. Enregistrez-le simplement dans le même dossier que votre certificat et exécutez-le comme suit:

./import_all_certs.sh

Import_all_certs.sh

KEYSTORE="$(/usr/libexec/java_home)/jre/lib/security/cacerts";

function running_as_root()
{
  if [ "$EUID" -ne 0 ]
    then echo "NO"
    exit
  fi

  echo "YES"
}

function import_certs_to_java_keystore
{
  for crt in *.crt; do 
    echo prepping $crt 
    keytool -import -file $crt -storepass changeit -noprompt --alias alias__${crt} -keystore $KEYSTORE
    echo 
  done
}

if [ "$(running_as_root)" == "YES" ]
then
  import_certs_to_java_keystore
else
  echo "This script needs to be run as root!"
fi
 3
Author: Brad Parks, 2017-03-02 19:01:34

Voici comment cela a fonctionné pour moi:

  1. Enregistrer sous .txt les données de certificat dans le format suivant dans un éditeur de texte

    -----COMMENCER LE CERTIFICAT----- [données sérialisées par microsoft] ----- CERTIFICAT DE FIN - - - - -

  2. Ouvrez le navigateur Chrome (cette étape peut également fonctionner avec d'autres navigateurs) paramètres > afficher les paramètres avancés > HTTPS / SSL > gérer les certificats Importer le .txt à l'étape 1
  3. Sélectionnez et exportez ce certificat au format encodé en base 64. Enregistrer comme .rec
  4. Maintenant, vous pouvez utiliser keytool ou Portecle pour l'importer dans votre magasin de clés java
 2
Author: code4kix, 2015-09-25 19:40:23