GnuPG Web Key Directory : partage de clés gpg par le web

De Linux Server Wiki
Aller à la navigation Aller à la recherche


Côté client

#$ gpg --with-wkd-hash -k me@domain1.tld

Devrait vous retourner quelque chose ressemblant à ça :

pub   rsa2048 2017-05-26 [SC]
      7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951
uid           [ultimate] you <me@domain1.tld>
              s8y7oh5xrdpu9psba3i5ntk64ohouhga@domain1.tld
uid           [ultimate] you2 <me@domain2.tld>
              s8y7oh5xrdpu9psba3i5ntk64ohouhga@domain2.tld
sub   rsa2048 2017-05-26 [E]
sub   rsa2048 2017-05-26 [S]
sub   rsa2048 2017-05-26 [A]

Le but est de récupérer l'ID de 32 caractères issu de l'empreinte SHA1 encodé en Z-base32 de la partie locale de l'email (avant le @).
Ici l'ID est s8y7oh5xrdpu9psba3i5ntk64ohouhga (c'est le même dans les deux cas uniquement parce que les deux emails sont me@).

Côté serveur

Ce wiki ne couvre que la mise a disposition de clé en WKD en direct-mode, qui nécessitera que vos clés soient accessibles à l'url http://domain1.tld/.well-known/openpgpkey/hu/ (et réciproque avec domain2.tld).
Le advanced-mode est un peu plus complexe et nécessite un certificat SSL trusted (letsencrypt par exemple) pour un sous-domaine openpgpkey.domain1.tld (et réciproque avec domain2.tld).
Notez que pour le direct-mode, assurez-vous que le sous-domaine openpgpkey.domain1.tld n'existe pas et que votre dns ne répond pas aux wildcards. Si vous utilisez les wildcards, il faut insérer dans la zone dns un champt TXT RR vide pour le sous-domaine openpgpkey.
Note : vous pouvez aussi utiliser un serveur externe en mode advanced : openpgpkey.domain1.tld. 300 IN CNAME wkd.keys.openpgp.org.

Sur la racine de votre serveur web, créez le chemin de répertoire suivant : .well-known/openpgpkey/hu/
Placez ensuite un fichier vide dans .well-known/openpgpkey/policy

Essayez d'accéder au fichier policy via http://domain1.tld/.well-known/openpgpkey/policy.
Si cela fonctionne, modifiez la configuration de votre serveur afin de configurer le dossier .well-known/openpgpkey/hu/ (nécessite les mods apache2 mod_mime et mod_headers):

<Directory "/path/to/.well-known/openpgpkey/hu/">
    ForceType application/octet-stream
    Header always set Access-Control-Allow-Origin "*"
</Directory>


Il ne vous reste plus qu'à exporter votre clé publique sur votre site web de manière qu'elle soit accessible à l'URL https://domain.tld/.well-known/openpgpkey/hu/s8y7oh5xrdpu9psba3i5ntk64ohouhga et https://domain2.tld/.well-known/openpgpkey/hu/s8y7oh5xrdpu9psba3i5ntk64ohouhga
Notez que la clé doit être sous le format binaire et non pas ASCII armored.

Le plus simple est d'exporter votre clé sous le bon nom de fichier, puis de le transférer par exemple avec scp :

gpg --export me@domain1.tld > s8y7oh5xrdpu9psba3i5ntk64ohouhga
scp s8y7oh5xrdpu9psba3i5ntk64ohouhga webuser@domain1:/path/to/.well-known/openpgpkey/hu/

Assurez-vous évidemment que les permissions permettent bien au serveur web de lire le fichier.

Pour plus d'informations :