Utiliser un certificat SSL avec GlassFish
Après de nombreuses tentatives, c'est enfin fait ! Le certificat SSL de
Voici les différentes étapes de mon aventure :
Pour information, mon serveur GlassFish utilise JKS en tant que KeyStore. Il s'agit du KeyStore par défaut sur une installation basique de GlassFish.
La première étape est donc de générer une paire de clés. Ces clés seront utilisées pour chiffrer les données entre le client et le serveur.
Pour générer une paire de clés, la commande magique est :
Les options à fournir :
Avec les options :
Grâce à cette demande de certificat, nous allons pouvoir maintenant demander un certificat à une autorité de certification.
La demande du certificat dépend ensuite de l'autorité que vous avez choisi. Il se peut que l'autorité de certification vous demande de la rajouter dans en tant que telle dans votre navigateur. Une fois votre certificat créé, vous allez pouvoir le récupérer sois sous la forme d'un fichier
Les variables à remplacer :
Après exécution de ce morceau de code, voilà votre nouveau certificat entré dans la base de certificats de votre serveur d'applications. Il ne reste plus qu'à configurer GlassFish pour utiliser ce nouveau certificat !
Et voilà le résultat. Vous pouvez maintenant consulter mon blog en HTTPS avec un certificat valide, si le cœur vous en dit.
*.aperigeek.com est valide.Voici les différentes étapes de mon aventure :
Pour information, mon serveur GlassFish utilise JKS en tant que KeyStore. Il s'agit du KeyStore par défaut sur une installation basique de GlassFish.
Générer une paire de clés
Le JDK embarque un outil permettant de gérer les KeyStore de type JKS. Cet outil porte le doux nom dekeytool.La première étape est donc de générer une paire de clés. Ces clés seront utilisées pour chiffrer les données entre le client et le serveur.
Pour générer une paire de clés, la commande magique est :
$ keytool -genkeypair -keyalg <algorithm> -keystore <keystore> -validity <validity> -alias <alias>Petite note : Pour les utilisateurs du JDK 5, l'option
-genkeypair est à remplacer par -genkey.Les options à fournir :
- <algorithm> corresponds à l'algorithme utilisé pour générer les clés (RSA, par exemple).
- <keystore> corresponds au fichier contenant les clés du serveur. Par défault, ce fichier s'appelle
keystore.pkset est stocké dansdomains/domain/config. - <validity> corresponds au temps de validité du certificat, en jour (365 pour un an, par exemple).
- <alias> corresponds au nom que vous souhaitez donner au certificat. Ce nom sera réutilisé par la suite pour désigner ce certificat à l'intérieur du serveur d'application.
keytool vous posera plusieurs questions, notamment :
- Le mot de passe du KeyStore (par défaut, le mot de passe du KeyStore est
changeit). - Un CN (Common Name). Mettez le nom de domaine pour lequel vous souhaitez créer un certificat (il est possible d'utiliser un wildcard, comme par exemple
*.aperigeek.compour tous les sous domaines aperigeek.com). - Les autres informations n'influent pas sur le certificat en lui même.
Générer une demande de certificat (CSR : Certificate Signing Request)
Ce fichier CSR va permettre d'effectuer une demande de certificat auprès d'une autorité de certification. Ce certificat permettra de justifier de l'identité du serveur auprès du client (afin d'éviter certaines attaques de type Man in the Middle, par exemple).keytool permet de générer cette demande de certificat. La commande est :
keytool -certreq -alias <alias> -file <file> -keystore <keystore>
Avec les options :
- <alias> corresponds au nom de votre certificat, celui que vous avez choisi dans la première étape.
- <file> corresponds au fichier qui contiendra votre demande de certificat.
- <keystore> à votre KeyStore, le même que dans la première étape.
Grâce à cette demande de certificat, nous allons pouvoir maintenant demander un certificat à une autorité de certification.
Demander un certificat à une CA
Libre à vous de choisir une autorité de certification (CA). J'ai choisi CAcert.org, car il s'agit d'une des rares autorité de certifications fournissant des certificats gratuitement.La demande du certificat dépend ensuite de l'autorité que vous avez choisi. Il se peut que l'autorité de certification vous demande de la rajouter dans en tant que telle dans votre navigateur. Une fois votre certificat créé, vous allez pouvoir le récupérer sois sous la forme d'un fichier
.cert, sois sous sa forme textuelle. Dans le deuxième cas, nous allons devoir copier le texte du certificat (y compris les balises -----BEGIN CERTIFICATE----- et -----END CERTIFICATE-----).
Insérer le certificat dans le KeyStore du serveur
Cette étape est assez complexe à réaliser aveckeytool, j'ai donc pour ma part utilisé ce code Java :
public class InsertCert {
public static void main(String[] args) {
try {
String certFile = "aperigeek.cert";
String certName = "*.aperigeek.com";
String keyStoreFile = "keystore.pks";
String keyStorePassword = "changeit";
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
Certificate cert = certFactory.generateCertificate(new FileInputStream(certFile));
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(new FileInputStream(keyStoreFile), keyStorePassword.toCharArray());
Key key = keyStore.getKey(certName, keyStorePassword.toCharArray());
keyStore.setKeyEntry(certName, key, keyStorePassword.toCharArray(), new Certificate[]{cert});
keyStore.store(new FileOutputStream(keyStoreFile), keyStorePassword.toCharArray());
} catch (Exception ex) {
Logger.getLogger(InsertCert.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
(inspiré de Using SSL with GlassFish v2 : Enterprise Tech Tips)Les variables à remplacer :
certFile: le nom du fichier contenant le certificat, fourni par l'autorité de certification.certName: le nom du certificat, que vous lui avez donné à l'étape 1keyStoreFile: le nom du KeyStorekeyStorePassword: le mot de passe du KeyStore
Après exécution de ce morceau de code, voilà votre nouveau certificat entré dans la base de certificats de votre serveur d'applications. Il ne reste plus qu'à configurer GlassFish pour utiliser ce nouveau certificat !
Configuration du service HTTP
Dans la console d'administration de GlassFish :- Dans l'arbre : Configuration, Service HTTP, Listeners HTTP, nom-du-listeneur
- Onglet SSL :
- Certificate Nickname : nom du certificat (que vous lui avez donné à l'étape 1)
- Cocher SSL3 et TLS
- Onglet HTTP Listener :
- Cocher Security Enabled
- Redémarrer GlassFish
Et voilà le résultat. Vous pouvez maintenant consulter mon blog en HTTPS avec un certificat valide, si le cœur vous en dit.
Merci pour ce tutorial très complet, néamoins, serait il possible d'avoir de plus amples informations concernant la configuration http? telles que la cipher suite selectionnée, le contenu des champs network adress, le server name, etc...
Merci encore!
Posted by jonas on juin 10, 2008 at 04:48 PM CEST #