Nous continuons notre préparation de mise en production de nos bricks XtremIO. Afin d’être conformes à notre politique de sécurité interne, nous essayons, dans la mesure du possible d’intégrer systématiquement des certificats SSL valides vis à vis de notre PKI Institutionnelle à chaque nouvelle application ou équipement. Les interfaces d’administration de nos différents composants de stockage ne dérogent pas à la règle et il a donc fallu s’atteler à intégrer des certificats corrects sur les consoles d’admin des XtremIO.
La chose n’est pas forcément facile, dans le sens ou la documentation fournie est plus que succincte à ce sujet. Donc après une petite demi-heure de tests et tâtonnements divers, nous sommes finalement arrivés à nos fins. Voici donc la procédure pour pouvoir installer un nouveau jeu de certificats à une console XtremIO. Je ne détaillerai pas ici la procédure permettant de générer un certificat depuis votre autorité de certification, ceci dépendant plus que largement de la solution que vous avez choisi au sein de votre organisation (et accessoirement, complètement hors-sujet ;) ).
Tout va se passer en ligne de commande, soit via l’interface “console” de l’outil Java de pilotage de la baie, où, mieux, de mon point de vue, via SSH (pour les copier/coller, c’est beaucoup plus simple). Logguez vous via un putty (ou équivalent) grace au compte “xmsadmin”. Ensuite, lorsque le deuxième login est présenté, rentrez sous “admin”. Vous arrivez sur le prompt de la console CLI XtremIO :
1 2 3 4 5 6 7 |
login as: xmsadmin xmsadmin@falconhn's password: ****** Last login: Fri Aug 29 16:14:33 2014 from *********.fr Username: admin Password: ********* Connect XMS on XXX.XXX.XXX.XXX:443: version 2.4.1 build 12 xmcli (admin)> |
Il vous faut d’abord générer votre CSR pour pouvoir ensuite le soumettre à votre autorité de certification. Pour se faire, lancez la commande “show-server-certificate-signing-request”, pour le récupérer :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
xmcli (admin)> show-server-certificate-signing-request -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCwOY+MiasSpCRf (.....) MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCwOY+MiasSpCRf -----END PRIVATE KEY----- Certificate Request: Data: Version: 0 (0x0) Subject: CN=falconhn.xxxxxxxxxxx.fr Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b0:39:8f:8c:89:ab:12:a4:24:5f:3a:01:78:64: (...) 9d:ce:0d:d7:9e:fb:c8:02:bd:cb:24:df:8a:75:bd: a6:77 Exponent: 65537 (0x10001) Attributes: Requested Extensions: X509v3 Subject Alternative Name: critical DNS:, DNS:falconhn.xxxxxxxxxx.fr Signature Algorithm: sha1WithRSAEncryption 18:0f:ce:c3:7c:33:4f:0c:61:21:d3:0f:1b:a4:d4:7f:12:e7: (...) 00:e1:5e:8f:ac:8c:88:67:ef:bd:f1:da:54:8f:fd:6a:8b:94: 23:24:7b:32 -----BEGIN CERTIFICATE REQUEST----- QmllbiBqb3VlcyBtZXNkYW1lcywgbWVzc2lldXJzLi4uIGJvbiBjZSBuJ2V0YWl0IHBhcyB0cmVz IGNvbXBsaXF1ZS4gSWwgZmFsbGFpdCBqdXN0ZSBmYWlyZSB1biBwZXRpdCBkZWNvZGFnZSBiYXNl NjQgZXZpZGVtbWVudCA7KQpNZXJjaSBkZSBtJ2Vudm95ZXIsIHNpIHZvdXMgbGUgc291aGFpdGV6 LCB1biBwZXRpdCBtYWlsIHBvdXIgbWUgY29uZmlybWVyIHF1J2F1IG1vaW5zIHVuIHRvcmR1IGEg cHJpcyBsZSB0ZW1wcyBkZSBjaGVyY2hlciAhCkJvbm5lIGNvbnRpbnVhdGlvbiBhIHRvdXMgZXQg cmVuZGV6LXZvdXMgc3VyIHZCbG9nLmlvICEgQ2VkcmljIChjZWRyaWNAdmJsb2cuaW8pCg== -----END CERTIFICATE REQUEST----- xmcli (admin)> |
Vous noterez ici que la commande vous renvoie le CERTIFICATE REQUEST, mais aussi la clef privée associée (histoire de la sauvegarder au cas où ;) ). Ensuite, soumettez comme d’habitude votre CSR à l’autorité de certification voulue. Demandez (ou convertissez) en retour votre certificat tamponné au format .PEM. Vous devez aussi récupérer l’ensemble de la chaîne de certification.
Une fois tout cela entre vos mains, vous allez devoir fournir la chaîne de certification et le certificat lui même sous la forme d’une chaîne de caractère formatté très précisément. En fait, traditionnellement, les fichiers .PEM sont représentés par des listes de codes hexadécimaux (encodage Base64) encadrés par des balises “—–XXX” et “XXXX—–” et, surtout, sur plusieurs lignes (LF ou CRLF). Pour obtenir la chaîne de caractère compatible avec la console CLI d’XtremIO, il faut remplacer tous les LF par les caractères “\n”. En résumé, vous partez d’un fichier de ce type :
1 2 3 4 5 |
-----BEGIN CERTIFICATE REQUEST----- MIIE5DCCAswCAQAwgZ4xCzAJBgNVBAYTAkZSMRYwFAYDVQQIEw1QZXRpdHMgTWFs (...) oHweLPT+wHT3rutaJFjMSY2xzvPumh1OyMGwTeiu3qkSwq+9CMvkQGnVhnnzwM3H -----END CERTIFICATE REQUEST----- |
… et vous devez le transformer en une chaîne de ce type :
1 |
-----BEGIN CERTIFICATE REQUEST-----\nMIIE5DCCAswCAQAwgZ4xCzAJBgNVBAYTAkZSMRYwFAYDVQQIEw1QZXRpdHMgTWFs\naW5zMQ8wDQYDVQQHEwZOYW50ZXMxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMg\nUHR5IEx0ZDEjMCEGA1UEAxMaamV2b3Vzdm9pcy5wZXRpdHNtYWxpbnMuaW8xHjAc\nBgkqhkiG9w0BCQEWD2NlZHJpY0B2YmxvZy5pbzCCAiI ... 2mHzw\njANcJaOUlvB4goDh+nJOOTe0D+DjYwLrfJTidVEftEt0vIUly3/CzXL3TgIjdSvG\noHweLPT+wHT3rutaJFjMSY2xzvPumh1OyMGwTeiu3qkSwq+9CMvkQGnVhnnzwM3H\nqcrQWy2APuQ=\n-----END CERTIFICATE REQUEST-----\n |
De mon coté, j’ai utilisé tout simplement une ligne de commande basé sur sed, mais vous pouvez aussi vous servir d’un banal éditeur de text type EditPadPro, Notepad++ etc. … Vous devez réaliser ces opérations à la fois pour le certificat, mais aussi pour la chaine de certification.
Enfin, quand vous avez ces deux chaînes correctement construites, utilisez la commande “modify-server-certificate” :
1 |
modify-server-certificate chain-certificate-string="-----BEGIN CERTIFICATE-----\nMIIEBjCCAu6gAwIBAgIQNQqMhngjoJhK.......ZRDMq+GfCgU=\n-----END CERTIFICATE-----" server-certificate-string="-----BEGIN CERTIFICATE-----\nMIIHLTC..........Qk=\n-----END CERTIFICATE-----\n" |
En retour, vous obtenez la nouvelle chaîne de certification X509 modifiée. Un petit test de connexion via le fqdn de la console XMS suffira à vérifier que tout est ok. Si vous obtenez une erreur du type “*** XMS Completion Code: missing_chain”, c’est sans doute que votre chaine de certification n’est pas complète, ou pas dans l’ordre. Commencez bien par le certificat RACINE, puis le ou les certificats subordonnés, et tout cela combiné dans la chaîne correspondant à l’argument “chain-certificate-string”.
Amusez-vous bien ;)
PS: qui va trouver le petit easter egg de ce billet ?