Afin d’organiser une certaine intendance autour de la diffusion du code des applications, un certain nombre d’entités sont nécessaires.
Le modèle utilisé est assez classique est simple, la chaîne d’autorité est un schéma de parenté.
La structure du graphe reconnue est la suivant :
- Le maître du tout (puppetmaster)
- Les autorités de la sécurité
- Les autorités du code
- Les autorités du temps
- Les autorités de l’annuaire
Les différentes entités autorités du projet nebule :
- Le maître du tout : puppetmaster
- Autorité de la sécurité : cerberus
- Autorité du code : bachue
- Autorité du temps : kronos
- Autorité de l’annuaire : asabiyya
Chaque entité ici considérée doit être un objet entité EID (Entity ID) valide avec lien de type, un lien de nommage et un lien de localisation (URL web).
Références
Le puppetmaster est un RID qui peut être remplacé. Il va faire référence par des liens dédiés vers les différents d’autorités au moyen de RID dédiés :
- Autorités de la sécurité
a4b210d4fb820a5b715509e501e36873eb9e27dca1dd591a98a5fc264fd2238adf4b489d.none.288
- Autorités du code
2b9dd679451eaca14a50e7a65352f959fc3ad55efc572dcd009c526bc01ab3fe304d8e69.none.288
- Autorités du temps
bab7966fd5b483f9556ac34e4fac9f778d0014149f196236064931378785d81cae5e7a6e.none.288
- Autorités de l’annuaire
50e1d0348892e7b8a555301983bccdb8a07871843ed8f392d539d3d90f37ea8c2a54d72a.none.288
C’est à dire que tout EID désigné par un de ces RID (l>RID>EID), et signé par le puppetmaster, devient une autorité dans le groupe considéré.
Génération
La génération d’une nouvelle chaîne d’autorité se fait en deux étapes.
Génération des entités
Définir un mot de passe pour le puppetmaster.
Générer le puppetmaster :
openssl genrsa -aes256 -out puppetmaster.key.pem 4096
openssl rsa -in puppetmaster.develop.key.pem -outform PEM -pubout -out puppetmaster.develop.pub.pem
Définir les mots de passe pour les autres autorités.
Générer les autres autorités :
for I in security code time directory
do
openssl genrsa -aes256 -out $I.authority.key.pem 1024
openssl rsa -in $I.authority.key.pem -outform PEM -pubout -out $I.authority.pub.pem
done
Préparer les variables :
puppetmaster_key_hash=$(sha256sum puppetmaster.key.pem | cut -d' ' -f1)'.sha.256'
puppetmaster_pem_hash=$(sha256sum puppetmaster.pub.pem | cut -d' ' -f1)'.sha.256'
security_authority_key_hash=$(sha256sum security.authority.key.pem | cut -d' ' -f1)'.sha.256'
security_authority_pem_hash=$(sha256sum security.authority.pub.pem | cut -d' ' -f1)'.sha.256'
code_authority_key_hash=$(sha256sum code.authority.key.pem | cut -d' ' -f1)'.sha.256'
code_authority_pem_hash=$(sha256sum code.authority.pub.pem | cut -d' ' -f1)'.sha.256'
time_authority_key_hash=$(sha256sum time.authority.key.pem | cut -d' ' -f1)'.sha.256'
time_authority_pem_hash=$(sha256sum time.authority.pub.pem | cut -d' ' -f1)'.sha.256'
directory_authority_key_hash=$(sha256sum directory.authority.key.pem | cut -d' ' -f1)'.sha.256'
directory_authority_pem_hash=$(sha256sum directory.authority.pub.pem | cut -d' ' -f1)'.sha.256'
Écrire les objets :
mkdir o
cp puppetmaster.key.pem "o/$puppetmaster_key_hash"
cp puppetmaster.pub.pem "o/$puppetmaster_pem_hash"
cp security_authority.key.pem "o/$security_authority_key_hash"
cp security_authority.pub.pem "o/$security_authority_pem_hash"
cp code_authority.key.pem "o/$code_authority_key_hash"
cp code_authority.pub.pem "o/$code_authority_pem_hash"
cp time_authority.key.pem "o/$time_authority_key_hash"
cp time_authority.pub.pem "o/$time_authority_pem_hash"
cp directory_authority.key.pem "o/$directory_authority_key_hash"
cp directory_authority.pub.pem "o/$directory_authority_pem_hash"
Génération des liens
Préparer les variables :
mkdir l
function get_nid() {
echo -n $(echo -n "$1" \
| sha256sum \
| cut -d' ' -f1)'.sha2.256'
}
current_date='0>0'$(date "+%Y%m%d%H%M%S")
link_prefix='nebule:link/2:0'
nid_typmime=$(get_nid 'nebule/objet/type')
nid_name=$(get_nid 'nebule/objet/nom')
nid_rsa=$(get_nid 'application/x-pem-file')
nid_location=$(get_nid 'nebule/objet/entite/localisation')
rid_sec='a4b210d4fb820a5b715509e501e36873eb9e27dca1dd591a98a5fc264fd2238adf4b489d.none.288
'
rid_cod='2b9dd679451eaca14a50e7a65352f959fc3ad55efc572dcd009c526bc01ab3fe304d8e69.none.288
'
rid_tim='bab7966fd5b483f9556ac34e4fac9f778d0014149f196236064931378785d81cae5e7a6e.none.288
'
rid_dir='50e1d0348892e7b8a555301983bccdb8a07871843ed8f392d539d3d90f37ea8c2a54d72a.none.288
'
eid_pup=$puppetmaster_pem_hash
eid_sec=$security_authority_pem_hash
eid_cod=$code_authority_pem_hash
eid_tim=$time_authority_pem_hash
eid_dir=$directory_authority_pem_hash
function clink()
{
sign=$(echo -n "$1" \
| openssl dgst -hex -"sha$3" -sign "o/$2" \
| cut -d ' ' -f2)
link="$1_$2>$sign.sha2.$3"
nid1=$(echo "$1" | cut -d_ -f2 | cut -d/ -f2 | cut -d '>' -f2)
nid2=$(echo "$1" | cut -d_ -f2 | cut -d/ -f2 | cut -d '>' -f3)
nid3=$(echo "$1" | cut -d_ -f2 | cut -d/ -f2 | cut -d '>' -f4)
[ "$nid1" != '' ] && echo "$link" >> "l/$nid1"
[ "$nid2" != '' ] && echo "$link" >> "l/$nid2"
[ "$nid3" != '' ] && echo "$link" >> "l/$nid3"
}
Génération des liens :
clink "$link_prefix_$current_date/l>$eid_pup>nid_rsa>$nid_typemime" $eid_pup 512
...
Évolutions
Une évolution est en cours d’intégration avec la nouvelle version des liens. Si l’entité qui chapeaute toutes les autres est unique, chaque groupe d’autorités n’est plus seulement une entité mais devient un groupe d’entités à pouvoir identique.
Il est à prévoir que le maître du tout deviendra aussi, un jour, des autorités globales. Mais la forme n’est pas encore défini.
D’un point de vue sémantique, on quitte progressivement la notion de maître historique pour aller vers la notion d’autorité. Outre le rapport à l’esclavage, on est soumis au maître, on se soumet à l’autorité.