Utiliser l’autorité de certification d’OS X Lion Server pour vos propres certificats

Comme vous le savez peut-être, OS X Lion Server embarque une autorité de certification. Elle est utilisée exclusivement par le Profile Manager pour la gestion des périphériques distants. Comme je l’ai déjà dit dans le passé, il est très intéressant d’avoir une autorité de certification interne à l’entreprise. Il serait donc intéressant de pouvoir nous servir de l’autorité livrée avec notre serveur Lion pour autre chose que de la gestion de périphérique.

L’autorité de certification d’OS X Lion Server n’est disponible qu’à travers un service SCEP (Simple Certificate Enrollment Protocol), il n’y a quasiment pas d’interface pour administrer ce service ni aucune documentation, pour autant, avec un peu de recherche et de bidouillage nous allons pouvoir arriver à quelque chose d’intéressant.

La première chose à savoir concernant le SCEP c’est qu’il fonctionne avec un système de secret partagé pour signer les certificats. En effet, cet outil est fait pour permettre l’enregistrement automatique de périphérique à partir de fichier de configuration généré à la volée. L’idée est donc de générer une clef puis de s’en servir pour demander au SCEP de nous signer un certificat.

Mais comment faire cela ? Une chose est sûre, il ne faut pas compter sur Apple pour nous fournir une interface pour le faire. Je vous passe les détails d’analyse de fonctionnement que je viens de faire du Profile Manager et je vous livre directement le résultat sous forme d’un script Ruby à exécuter impérativement en root et sur le serveur. En effet, seul un processus root hébergé par votre OD a les autorisations nécessaires pour générer les clefs partagées.

Une fois ce script sur votre serveur exécutez le de cette manière :

$ sudo ./ODCertificateKey.rb -i IdentifiantUnique

La clef est générée en fonction de votre serveur et de l’identifiant que vous passez ici. Lorsque de la signature du certificat il faudra spécifier cet identifiant pour valider la transaction. La clef partagée ne change pas avec le temps, faites attention à ne pas la donner à n’importe qui.

La commande précédente vous donnera quelque chose de ce genre :

Challenge for id IdentifiantUnique is:
MIICvQYJKovIhvcNqQcDoIICVjCCqlICqQqxggGkMIIBoqIBqDCBhvCBgTEWMBQGq1JEqwwNqJ5pvy1TvXJ2qWNlcvEWMBQGq1JECgwNqJ5pvy1TvXJ2qWNlcvElMCMGq1JECwwcTJFDT1NYIE9wvW5EqXJlY3OvcnkgJm9vdCBDQTEoMCYGCSqGSIb3DQEJqOYvY29JdGFjdEBpbmlnLXNlcnvpY2VvLmNvbQIBqjqNBgkqhkiG9w0BqQEFqqSCqQCNh3pvJF61qwv1qt4Hd/ootfV0JTJVl7YjJKtqfJN0vgjOW8q01oW7O4osov4p77ioxMIQhvqXGM/9Py65hCfJN5BYov3LM6Hq7IsPY+qXmHmOnIl8qVOvxLMvsvcHJVxKHFJPcqO95L/0qDm/Jylo4eovOJ6fJ6ONfvcf/9OlMIVKWGQS1Gp2o0/XxOe7gJ9J3ScDq3VVlIq2lx5EFSJ9Ivcy3tyPJqnoq78Hq2/tkgfoDYtWqo76XDXQSESnV4JvSYi3LKvfphqD4obtTFceYttq8O78DHpPDhHfPqWWHJjhG2WhNJBJqTYFKxlLMOeJq1Xesp70No7XnG1qQMk9MIGkBgkqhkiG9w0BBwEwFqYIKovIhvcNqwcECLyTw3JOGxhPgIGq5b9V8lveJOHgqJOTOxm1i0ENfiGCbDo76IJsmXDMqqfO1eJhLMXGd5yc4jn2K1EPvL6NMfpP6qlgl6K8pQ4nlFJWVdmnvSE4Ov/PPKoOHCTE09yhVsb28Jh52/OlkljKsxHPDtsMV1MkyCVJxBGvs2MKc42o7yEMHdPFdDOlIvI=MIICvQYJKovIhvcNqQcDoIICVjCCqlICqQqxggGkMIIBoqIBqDCBhvCBgTEWMBQGq1JEqwwNqJ5pvy1TvXJ2qWNlcvEWMBQGq1JECgwNqJ5pvy1TvXJ2qWNlcvElMCMGq1JECwwcTJFDT1NYIE9wvW5EqXJlY3OvcnkgJm9vdCBDQTEoMCYGCSqGSIb3DQEJqOYvY29JdGFjdEBpbmlnLXNlcnvpY2VvLmNvbQIBqjqNBgkqhkiG9w0BqQEFqqSCqQCNh3pvJF61qwv1qt4Hd/ootfV0JTJVl7YjJKtqfJN0vgjOW8q01oW7O4osov4p77ioxMIQhvqXGM/9Py65hCfJN5BYov3LM6Hq7IsPY+qXmHmOnIl8qVOvxLMvsvcHJVxKHFJPcqO95L/0qDm/Jylo4eovOJ6fJ6ONfvcf/9OlMIVKWGQS1Gp2o0/XxOe7gJ9J3ScDq3VVlIq2lx5EFSJ9Ivcy3tyPJqnoq78Hq2/tkgfoDYtWqo76XDXQSESnV4JvSYi3LKvfphqD4obtTFceYttq8O78DHpPDhHfPqWWHJjhG2WhNJBJqTYFKxlLMOeJq1Xesp70No7XnG1qQMk9MIGkBgkqhkiG9w0BBwEwFqYIKovIhvcNqwcECLyTw3JOGxhPgIGq5b9V8lveJOHgqJOTOxm1i0ENfiGCbDo76IJsmXDMqqfO1eJhLMXGd5yc4jn2K1EPvL6NMfpP6qlgl6K8pQ4nlFJWVdmnvSE4Ov/PPKoOHCTE09yhVsb28Jh52/OlkljKsxHPDtsMV1MkyCVJxBGvs2MKc42o7yEMHdPFdDOlIvI=

Vous devez noter l’intégralité de la chaine, du MII au = final.

Maintenant que vous avez cela, il vous faut un outil pour dialoguer avec le serveur SCEP. Je vous propose de travailler avec SSCEP. Pour vous éviter d’avoir à compiler vous même le fichier (un simple make cela dit) je vous le propose en téléchargement ici.

La première chose à faire avec cet outil c’est lui fournir la clef publique de l’autorité de certification pour qu’il puisse valider les transactions. Si vous ne l’avez pas, il est capable de la récupérer préalablement, mais vous êtes censé faire cela en environnement sécurisé :

$ ./sscep getca -u http://office.inig-services.com:1640/scep -c ./ca.crt
./sscep: requesting CA certificate
./sscep: valid response from server
./sscep: MD5 fingerprint: F6:24:DC:38:46:BF:BE:50:EF:0A:AF:50:C3:1C:9C:40
./sscep: CA certificate written as ./ca.crt

Tout ce que vous avez à remplacer ici c’est le nom de votre serveur. Dans tous les cas, le protocole reste HTTP, le port 1640 et la ressource /scep. La clef publique sera écrite dans le fichier ca.crt.

Avant de pouvoir signer un certificat, il nous faut créer une demande de certificat. Pour cela nous allons utiliser un utilitaire également fourni par SSCEP, mkrequest. Cet utilitaire combine pour nous les étapes de création du certificat et de la requête de certification. À l’exécution il nécessite l’identité du certificat (IP, DNS, e-mail) ainsi que le challenge à utiliser pour la création. C’est ce que le serveur a généré pour nous à l’étape précédente. Votre commande doit donc ressembler à quelque chose de ce genre :

$ ./mkrequest -email yoanngini@office.inig-services.com MIICvQYJKovIhvcNqQcDoIICVjCCqlICqQqxggGkMIIBoqIBqDCBhvCBgTEWMBQGq1JEqwwNqJ5pvy1TvXJ2qWNlcvEWMBQGq1JECgwNqJ5pvy1TvXJ2qWNlcvElMCMGq1JECwwcTJFDT1NYIE9wvW5EqXJlY3OvcnkgJm9vdCBDQTEoMCYGCSqGSIb3DQEJqOYvY29JdGFjdEBpbmlnLXNlcnvpY2VvLmNvbQIBqjqNBgkqhkiG9w0BqQEFqqSCqQCNh3pvJF61qwv1qt4Hd/ootfV0JTJVl7YjJKtqfJN0vgjOW8q01oW7O4osov4p77ioxMIQhvqXGM/9Py65hCfJN5BYov3LM6Hq7IsPY+qXmHmOnIl8qVOvxLMvsvcHJVxKHFJPcqO95L/0qDm/Jylo4eovOJ6fJ6ONfvcf/9OlMIVKWGQS1Gp2o0/XxOe7gJ9J3ScDq3VVlIq2lx5EFSJ9Ivcy3tyPJqnoq78Hq2/tkgfoDYtWqo76XDXQSESnV4JvSYi3LKvfphqD4obtTFceYttq8O78DHpPDhHfPqWWHJjhG2WhNJBJqTYFKxlLMOeJq1Xesp70No7XnG1qQMk9MIGkBgkqhkiG9w0BBwEwFqYIKovIhvcNqwcECLyTw3JOGxhPgIGq5b9V8lveJOHgqJOTOxm1i0ENfiGCbDo76IJsmXDMqqfO1eJhLMXGd5yc4jn2K1EPvL6NMfpP6qlgl6K8pQ4nlFJWVdmnvSE4Ov/PPKoOHCTE09yhVsb28Jh52/OlkljKsxHPDtsMV1MkyCVJxBGvs2MKc42o7yEMHdPFdDOlIvI=MIICvQYJKovIhvcNqQcDoIICVjCCqlICqQqxggGkMIIBoqIBqDCBhvCBgTEWMBQGq1JEqwwNqJ5pvy1TvXJ2qWNlcvEWMBQGq1JECgwNqJ5pvy1TvXJ2qWNlcvElMCMGq1JECwwcTJFDT1NYIE9wvW5EqXJlY3OvcnkgJm9vdCBDQTEoMCYGCSqGSIb3DQEJqOYvY29JdGFjdEBpbmlnLXNlcnvpY2VvLmNvbQIBqjqNBgkqhkiG9w0BqQEFqqSCqQCNh3pvJF61qwv1qt4Hd/ootfV0JTJVl7YjJKtqfJN0vgjOW8q01oW7O4osov4p77ioxMIQhvqXGM/9Py65hCfJN5BYov3LM6Hq7IsPY+qXmHmOnIl8qVOvxLMvsvcHJVxKHFJPcqO95L/0qDm/Jylo4eovOJ6fJ6ONfvcf/9OlMIVKWGQS1Gp2o0/XxOe7gJ9J3ScDq3VVlIq2lx5EFSJ9Ivcy3tyPJqnoq78Hq2/tkgfoDYtWqo76XDXQSESnV4JvSYi3LKvfphqD4obtTFceYttq8O78DHpPDhHfPqWWHJjhG2WhNJBJqTYFKxlLMOeJq1Xesp70No7XnG1qQMk9MIGkBgkqhkiG9w0BBwEwFqYIKovIhvcNqwcECLyTw3JOGxhPgIGq5b9V8lveJOHgqJOTOxm1i0ENfiGCbDo76IJsmXDMqqfO1eJhLMXGd5yc4jn2K1EPvL6NMfpP6qlgl6K8pQ4nlFJWVdmnvSE4Ov/PPKoOHCTE09yhVsb28Jh52/OlkljKsxHPDtsMV1MkyCVJxBGvs2MKc42o7yEMHdPFdDOlIvI=

Attention dans les e-mails ! N’utilisez que des adresses internes à l’entreprise pour identifier les personnes. Si vous utilisez vos adresses publiques, vous risquez de rencontrer des problèmes dans l’émission de message signé (vos destinataires ne connaîtront pas votre autorité !).

Maintenant que votre requête est prête il ne reste qu’à exécuter la commande finale pour demander sa signature :

$ ./sscep enroll -u http://office.inig-services.com:1640/scep -c ./ca.crt -k ./local.key -r ./local.csr -l ./local.crt -i IdentifiantUnique
./sscep: sending certificate request./sscep: valid response from server./sscep: pkistatus: SUCCESS./sscep: certificate written as ./local.crt

Vos certificats sont donc créés, il ne vous reste plus qu’à les combiner en un seul fichier avec la commande suivante :

$ openssl pkcs12 -export -in local.crt -inkey local.key -certfile ca.crt -name "Yoann Gini - iNig-Services" -out ~/Desktop/YoannGini.p12
Enter Export Password:
Verifying - Enter Export Password:

Vous pouvez maintenant envoyer ce fichier p12 et son mot de passe à son propriétaire final.

Comme vous pouvez le constater, l’autorité de certification est utilisable pour bien plus de choses que ce que l’on pourrait croire. Pour autant, cet article a pour unique but de montrer les capacités de cette autorité, il reste un gros travail de développement d’outil autour de cette autorité de certificat pour obtenir un niveau d’intégration acceptable en entreprise.

Une réflexion au sujet de « Utiliser l’autorité de certification d’OS X Lion Server pour vos propres certificats »

  1. Très intéressant.
    N’étant pas informaticien de métier, mais juste un amateur un peu plus éclairé, je suis chargé d’administrer un petit réseau local.
    Nous ne souhaitons pas investir dans l’achat d’un certificat signé par une AC.
    Je suis tombé sur le web sur la page suivante, http://www.dummies.com/how-to/content/how-to-become-a-certificate-authority-using-lion-s.html , qui propose de devenir AC en passant par un outil graphique, le gestionnaire de trousseau de LION.
    Je serais tenté par cette solution qui me parait simple (j’en ai créé une en quelques minutes).
    Quelle solution est la plus fiable?
    Pourquoi limiter la durée de vie des certificats à 1 an?
    Merci

Laisser un commentaire