Importer des certificats au format .pem dans vCloud Director (MAJ)

vCloud Director étant développé en Java, il utilise assez logiquement les conteneurs « jks » pour stocker et exploiter ses certificats SSL et clefs privées associées. Malheureusement, l’outil de base fourni dans le framework JRE, Keytool, n’est pas le plus souple en matière d’importation/exportation.

Pour autant, on ne va pas se laisser faire. Voici donc une procédure relativement simple pour pouvoir importer des certificats et clefs privées au format standardisé « .PEM » issu, par exemple d’une PKI gérée via OpenSSL.

Le pré-requis est de disposer des deux certificats (fournis par votre PKI) et clefs privées nécessaire à VCD, à savoir celui du service http et celui du console-proxy, le tout au format PEM. Première opération, exporter tout cela en format PKCS12 (lisible par keytool) :
openssl pkcs12 -export -inkey http.key -in http.crt -out http.pkcs12
openssl pkcs12 -export -inkey consoleproxy.key -in consoleproxy.crt -out consoleproxy.pkcs12

A chaque fois, openssl va vous demander un mot de passe de sécurisation des fichiers PKCS12. Je le note <password_pkcs12> dans les commandes suivantes. Ensuite, on importe ces deux fichiers PKCS12 dans un nouveau conteneur JKS. De la même façon, le password de sécurisation du conteneur JKS s’appelle <password_conteneur>. Première commande, on crée en même temps le nouveau keystore en ajoutant le premier certificat (http ici) :
/opt/vmware/vcloud-director/jre/bin/keytool -importkeystore -deststorepass <password_conteneur> -destkeystore vcloud.ks -srckeystore http.pkcs12 -srcstoretype PKCS12 -srcstorepass <password_pkcs12>
Vous devez obtenir une output de ce type :

Entry for alias 1 successfully imported.
Import command completed:  1 entries successfully imported, 0 entries failed or cancelled

Par défaut, le premier certificat est enregistré sous l’alias « 1 », on va le renommer en http pour que vcloud retrouve ses petits ensuite :
/opt/vmware/vcloud-director/jre/bin/keytool -changealias -keystore vcloud.ks -srcalias 1 -destalias http

Le mot de passe du conteneur vous est demandé (évidemment). Enfin, on refait quasiment la même manipulation pour le second certificat « console proxy » :
/opt/vmware/vcloud-director/jre/bin/keytool -importkeystore -deststorepass <password_conteneur> -destkeystore vcloud.ks -srckeystore consoleproxy.pkcs12 -srcstoretype PKCS12 -srcstorepass <password_pkcs12>
puis
/opt/vmware/vcloud-director/jre/bin/keytool -changealias -keystore vcloud.ks -srcalias 1 -destalias consoleproxy

Enfin, pour controler que notre conteneur est parfait, une petite interrogation :
/opt/vmware/vcloud-director/jre/bin/keytool -list -keystore vcloud.ks
… doit donner un résultat de ce type :

Enter keystore password:  

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 2 entries

consoleproxy, Oct 7, 2013, PrivateKeyEntry, 
Certificate fingerprint (SHA1): 85:93:D6:6E:6C:17:BA:49:E2:5E:D9:5A:C0:59:D9:6E:E6:2D:9A:5D
http, Oct 7, 2013, PrivateKeyEntry, 
Certificate fingerprint (SHA1): EF:4B:22:6A:70:01:2E:AF:0B:AA:51:9D:9C:28:01:E4:A8:C0:F5:6C

Enfin, pour reconfigurer votre noeud pour prendre en compte ce nouveau keystore (en cas de changement de mots de passe par exemple), lancez la commande /opt/vmware/vcloud-director/bin/configure et répondez aux quelques questions posées :

root@laxmivcd-bas:/opt/vmware/vcloud-director# /opt/vmware/vcloud-director/bin/configure
Welcome to the vCloud Director configuration utility.

You will be prompted to enter a number of parameters that are necessary to
configure and start the vCloud Director service.

The HTTP service and remote console proxy IP addresses have already been set, skipping.

Please enter the path to the Java keystore containing your SSL certificates and
private keys: /opt/certs/certificates.ks
Please enter the password for the keystore:
keeping old UUID: 8b15942f-cdce-4421-aefb-6666dd777d
Connecting to the database: jdbc:oracle:thin:@172.27.204.xxx:1521/VCD
DB credentials read successfully from response file.
...\Database configuration complete.

vCloud Director configuration is now complete.

Once the vCloud Director server has been started you will be able to
access the first-time setup wizard at this URL:
        https://xxxx.xxxx.tld

Would you like to start the vCloud Director service now? If you choose not
to start it now, you can manually start it at any time using this command:
service vmware-vcd start

Start it now? [y/n] y

Starting vmware-vcd-watchdog:                              [  OK  ]
Starting vmware-vcd-cell                                   [  OK  ]

The vCD service will be started automatically on boot.  To disable this,
use the following command: chkconfig --del vmware-vcd

root@laxmivcd-bas:/opt/vmware/vcloud-director#

Avec ces commandes, vous êtes paré pour importer sans souci des certificats SSL standards dans votre VCD ;)