💾 Archived View for dryusdan.space › heberger-son-propre-serveur-de-cle captured on 2024-12-17 at 11:50:51. Gemini links have been rewritten to link to archived content
-=-=-=-=-=-=-
2024-03-29
Quand je vous parle de PGP, pour certains d'entre vous cela vous rappel "le truc de geek" pour chiffrer les mails, pour d'autres c'est un outil pour chiffrer et/ou signer une action (un commit, un paquet, un email...). Vous seriez pas contre un petit rafraichissement de la mémoire ? (De toute façon vous avez pas le choix)
Un verre de soda remplit de glaçon
PGP pour Pretty Good Privacy est, en réalité... Un logiciel privateur développé par Philip Zimmermann. Publié en 1991, il a pour but de chiffrer et signer les communications. L'entreprise fondée par Philip Zimmermann fût racheter plusieurs fois. Actuellement c'est Symantec qui commercialise PGP
PGP donne aux gens le pouvoir de prendre en main leur intimité. Il y a un besoin social croissant pour cela. C'est pourquoi je l'ai créé
Soucieux de la vie privée, Philip Zimmermann développe et open source une norme nommée OpenPGP, proposée à l'IETF dans la RFC 2440, cette dernière fût remplacée en 2007 par la RFC 4880.
GnuPG, ou GPG pour GNU Privacy Guard est un logiciel libre se basant sur la norme OpenPGP. Développé en 1990 par Werner Koch pour remplacer PGP par une alternative libre. La première version stable est publié en décembre 1999. Il s'agit du logiciel qu'on retrouve sur Linux/MacOS (gnupg).
Pour parler des alternatives à GnuPG il y a Sequoi-PGP qui se veut plus sécurisé par design.
Un petit peu d'explication quand au fonctionnement d'OpenPGP. La cryptographie asymétrique est la base d'OpenPGP. Il s'agit d'un algorithme basé sur des fonctions à sens unique auquel on ajoute une trappe secrète. (Merci Wikipédia). EN GROS, il s'agit d'un procédé visant à chiffrer un message de manière à rendre impossible le déchiffrement sans une clé. Il faut une clé privée (la votre par exemple) pour chiffrer, et une clé publique (partagée par votre correspondant) pour créer cette "trappe secrète" qu'il est possible de déchiffrer quand même qu'avec la clé privé du correspondant. Vous pouvez ainsi envoyer un message à votre correspondant sans qu'un intermédiaire puisse le lire.
« Si nous voulons résister à cette tendance perturbante du gouvernement de rendre illégale la cryptographie, une mesure que nous pouvons adopter est d'utiliser la cryptographie autant que nous le pouvons actuellement pendant que c'est encore légal. Quand l'utilisation de cryptographie sûre devient populaire, il est plus difficile pour le gouvernement de la criminaliser. Par conséquent, utiliser PGP est un bon moyen pour préserver la démocratie. »
« Que se passerait-il si tout le monde estimait que les citoyens honnêtes devraient utiliser des cartes postales pour leur courrier ? Si un non-conformiste s'avisait alors d'imposer le respect de son intimité en utilisant une enveloppe, cela attirerait la suspicion. Peut-être que les autorités ouvriraient son courrier pour voir ce que cette personne cache. »
« De la même manière, ce serait excellent si tout le monde utilisait la cryptographie de manière systématique pour tous ses courriels, qu'ils soient innocents ou non, de telle sorte que personne n'attirerait la suspicion en protégeant l'intimité de ses courriels par la cryptographie. Pensez à le faire comme une forme de solidarité. »
(extraits de "Pourquoi j'ai écrit PGP" de Philip Zimmermann)
Un chat devant un livre "lisant"
C'est bien gentil, j'ai parlé que du chiffrement d'une communication, mais une clé OpenPGP permet aussi de certifier qu'une action est bien de vous. Avec une clé vous pouvez certifier que vous avez écrit un commit, vous pouvez également certifier que le paquet que vous publiez a bien été construit par vous. Les autres utilisateurs peuvent ainsi, s'ils ont votre clé OpenPGP, valider que c'est bien votre signature. Si ce n'est pas le cas, c'est tout de suite visible.
Comme vous avez du comprendre, le principe élémentaire d'OpenPGP est qu'il faut avoir la clé publique du correspondant. Et pour ça, soit le correspondant vous l'envoie et dans certains cas c'est compliqué (au hasard dans les pays bâillonnant très fort la liberté d'expression), soit l'émetteur vous la met à disposition comme par exemple NodeJS qui vous dit de récupérer leurs clés sur leur site, soit vous la récupérer sur un serveur de clé. Cette dernière partie va nous intéresser.
Logiciel libre oblige, il y a plusieurs implémentations des serveurs de clés. L'une des plus vieilles implémentations qui n'est actuellement plus utilisé est celle de sks-keyservers (l'outil a été arrêté suite à une attaque de type "certificat poisoning", reportez-vous à l'article/gist publié par Robert J. Hansen ou l'article de Daniel Kahn Gillmor pour en savoir plus). Le réseau existe encore, mais tend à se renfermer sur lui même. A l'instar de keyserver.ubuntu.com qui tourne sur hockeypuck mais qui ne partage aucune clé avec un un tier. Le soucis de ne pas s'ouvrir aux autres serveurs, c'est que cela créer un silo permettant à n'importe quelle puissance (étatique ou non) de bloquer (ou de rendre indisponible) un serveur de clé dans l'optique d'empêcher des gens de communiquer confidentiellement avec d'autres personnes. (Ou si simplement le service est indisponible pour quelques raisons que ce soit et rend impossible la validation de signatures.
Dans les différents serveurs de clé, il y a keys.openpgp.org qui se base sur Hagrid (dans Harry Potter il est le gardien des clés de Poudlard) développé spécialement pour. L'outil héberge des clés mais n'en partage aucune avec d'autres serveurs.
keyserver.ubuntu.com (que j'ai déjà cité plus haut) qui tourne sur hockeypuck. L'outil permet de rejoindre un réseau de serveur SKS, mais Canonical ne semble pas partager les clés sur ce réseau. Ce qui est dommage.
keys.mailvelope.com qui tourne sur mailvelope. Un serveur en NodeJS qui pareil ne communique pas avec les autres serveurs.
fr.pgpkeys.eu qui tourne sur hockeypuck. Ils proposent différents outil pour voir l'étendu du réseau SKS car eux partagent les clés.
Du coup, qu'est ce qui permet de décentraliser la localisation des clés, réduisant ainsi le SPOF et les risques cités si dessus ? Hockeypuck ! On va voir pour le mettre en place.
Pour que cela fonctionne il vous faut 40Go d'espace disque minimum, 150-200Mo de RAM (pour HAProxy et Hockeypucks), git, Golang 18 (je n'ai pas testé d'autre version) et PostgreSQL. Il est aussi possible de déployer Hockeypuck avec Docker mais je ne l'ai pas testé. Il est également possible de récupérer mon package Debian compatible amd64 et arm64 le tout basé sur le paquet Ubuntu mais tout pareil, ça fonctionne mais ce n'est pas drôle 😃
Un ouvrier du bâtiment dansant
Créez votre utilisateur, nommé hockeypuck, et accédez y. Ensuite clonez le dépôt en utilisant la branche de la dernière release
#useradd -s /bin/bash -d /opt/hockeypuck -m hockeypuck $ su - hockeypuck $ tag=$(curl -s https://api.github.com/repos/hockeypuck/hockeypuck/releases/latest | jq -r '.tag_name') git clone -b "${tag}" https://github.com/hockeypuck/hockeypuck.git $ cd hockeypuck
Maintenant, on build les binaires go :
$ make build
Ça va générer 4 binaires dans un nouveau dossier bin/ qui vient d'être créé
$ ls bin/ hockeypuck hockeypuck-dump hockeypuck-load hockeypuck-pbuild
Maintenant soit vous copiez les binaires dans /usr/local/bin pour les rendres accessible pour tous, soit vous les copiez dans votre répertoire utilisateur ${HOME}/.local/bin.
Nous allons maintenant créer un dossier pour les logs et un dossier pour le fonctionnement d'Hockeypuck contenant une petite base SQLite et des templates HTML.
# mkdir /var/log/hockeypuck # chown hockeypuck:hockeypuck /var/log/hockeypuck # mkdir /var/lib/hockeypuck/ # chown hockeypuck:hockeypuck /var/lib/hockeypuck
On copie les dossiers templates et webroot présents dans le dossier contrib du projet dans /var/lib/hockeypuck
# su - hockeypuck $ cp -R /opt/hockeypuck/contrib/webroot /var/lib/hockeypuck $ cp -R /opt/hockeypuck/contrib/templates /var/lib/hockeypuck
Pour que hockeypuck fonctionne, il faut une base de donnée PostgreSQL ainsi qu'un utilisteur.
# apt-get install postgresql postgresql-client # su - postgres $ psql postgres=# CREATE USER hockeypuck WITH PASSWORD 'sup3rs3cr3t'; postgres=# CREATE DATABASE hockeypuck WITH OWNER = hockeypuck;
Il ne reste plus qu'à configurer Hockeypuck. Pour ça, créer un dossier nommé hockeypuck dans /etc, puis créez un fichier nommé hockeypuck.conf (quelle surprise) dans ce dossier et éditez le.
Pour la configuration, la documentation existe mais on va l'écrire ensemble. Il y a 4 sections dans ce fichier de configuration. Une section "générale" à l'instance qui va contenir le nom de domaine, le chemin d'accès aux logs, aux templates html, copié plus haut ainsi qu'à l'identifiant de votre clé publique PGP. Jusqu'à là pas de mystère. La seconde partie [hockeypuck.hkp] gère le port d'écoute du serveur HTTP / HKP (pour HTTP Keyserver Protocol). On la laisse tel quel pour le moment, on y reviendra plus tard. La troisième partie est consacré à la configuration du serveur "recon", c'est le serveur qui communique avec les autres serveurs de clé. httpAddr envoie le port sur lequel ce serveur répond en http/hkp. Cet argument est uniquement à titre informatif pour recon. reconAddr est le port d'écoute du serveur recon. allowCIDRS est utilisé pour autoriser les connexions de reconnaissance entrantes à partir d'adresses distantes autres que les pairs définis. Ceci est particulièrement utile lorsque les connexions entrantes vers Hockeypuck sont soumises à la NAT. filters indique le type de traitement appliqué aux clés. Les versions récentes de SKS requièrent généralement filters=["yminsky.dedup"] . La quatrième et dernière partie (pour le moment) est la configuration à la base de donnée. Bien entendu ici j'ai mis les données qu'on a entrée plus haut. Remplacez les par celle que vous avez défini.
[hockeypuck] hostname="gpg.4n0ny.me" loglevel="INFO" contact="0x87d8c67ee79958e6" logfile="/var/log/hockeypuck/hockeypuck.log" indexTemplate="/var/lib/hockeypuck/templates/index.html.tmpl" vindexTemplate="/var/lib/hockeypuck/templates/index.html.tmpl" statsTemplate="/var/lib/hockeypuck/templates/stats.html.tmpl" webroot="/var/lib/hockeypuck/www" [hockeypuck.hkp] bind=":11371" [hockeypuck.conflux.recon] httpAddr=":11371" reconAddr=":11370" allowCIDRs=[] filters=["yminsky.dedup"] [hockeypuck.openpgp.db] driver="postgres-jsonb" dsn="database=hockeypuck host=127.0.0.1 user=hockeypuck password=sup3rs3cr3t port=5432 sslmode=disable"
Hockeypuck est maintenant prêt à être utilisé. En soit il est fonctionnel en l'état, mais ce qui nous intéresse c'est le peering (et les clés aussi), et donc pour pouvoir espérer se connecter à d'autres nœuds. Pour ça, il va falloir importer des clés. D'ailleurs le processus prend plusieurs heures, d'où le fait que je vous en parle maintenant histoire de le lancer et en parallèle de continuer la configuration de noeud.
Un chariot élévateur qui lève un poil trop haut le contenu et le renverse sur le conducteur
Pour importer les clés, il faut les récupérer chez quelqu'un qui a la gentillesse de dump sa base et de la rendre accessible. Les gens derrières le repository sks-keyserver ont créé une page répertoriant les sites qui effectuent régulièrement ces dumps et nous les partages.
une page répertoriant les sites
Utilisez le compte créé précédement, et lancez un rsync pour récupérer tous les dumps de clé.
# su - hockeypuck $ mkdir /tmp/gpgkeys $ rsync -cazvP --update rsync://rsync.cyberbits.eu/sks/dump/*.pgp /tmp/gpgkeys
Ensuite on lance la commande pour importer les clés dans la base de donnée.
$ tmux new -s importgpg $ hockeypuck-load -config /etc/hockeypuck/hockeypuck.conf /tmp/gpgkeys/*.pgp
Pour finir on lance une dernière commande qui permet de processer les données en base cette fois ci en dehors du tmux.
$ hockeypuck-pbuild -config /etc/hockeypuck/hockeypuck.conf
Attention, ces actions durent chacunes plusieurs heures, et génère un paquet de wal côté PostgreSQL. Pour exemple ma dernière sauvegarde avec ses 30Go de WAL
ssh-mul-15 20240329T013010 - Fri Mar 29 04:51:28 2024 - Size: 45.3 GiB - WAL Size: 29.8 GiB
Pendant ce temps, il vous faut configurer votre firewall et votre reverse proxy. Dans votre firewall préféré, ouvrez les ports 11370 et 11371 pour le protocole TCP.
--------------------------------------------------------------------------------
Petite pause, il s'avère que la configuration HAProxy fourni est "hardené" (c'est à dire sécurisé), il est donc demandé de l'utiliser. Cela peut être derrière votre reverse proxy habituel ou non. Du coup je vais en profiter pour dégager,dans un futur plus ou moins proche, Nginx et migrer tout ça sur HAProxy de mon côté. Mais ici on va partir du principe que vous avez Nginx en frontal
--------------------------------------------------------------------------------
Tout d'abord, on va installer HAProxy. Rien de bien sorcier, un coup d'apt et c'est parti
apt-get install haproxy
HAProxy va écouter sur le port 1396 pour l'administration (je vous invite à restreindre l'accès à ce port). Les fichiers de configuration sont présents sur le repository du projet contrib/docker-compose/standalone/haproxy . Récupérez le contenu du dossier etc/ et mettez le dans /etc/haproxy/haproxy.d . Récupérez également le fichier haproxy-internal.cfg et mettez le dans /etc/haproxy . Maintenant renommez le fichier 20_LOCAL_peers.cfg.tmpl en 20_LOCAL_peers.cfg et le fichier 90_LOCAL_be_hockeypuck.cfg.tmpl en 90_LOCAL_be_hockeypuck.cfg .
contrib/docker-compose/standalone/haproxy
Une fois cela fait, éditez le fichier /etc/default/haproxy . Il va contenir les variables d'environnement géré par la configuration. Je l'ai commenté pour l'expliquer
# Chemin de la configuration de HAProxy, peut être un fichier ou un dossier (ici un dossier) CONFIG="/etc/haproxy/haproxy.d" # Ajout d'une configuration à charger en plus du dossier dessus EXTRAOPS="-f /etc/haproxy/haproxy-internal.cfg" # On désacvtive la gestion SSL/TLS de HAProxy (vu qu'on est derrière un nginx) HAP_DISABLE_SSL=true # Chemin vers le dossier de confiuguration de HAProxy HAP_CONF_DIR=/etc/haproxy # Chemin pour un fichier de cache qui contiendra tor_exit_relays.list HAP_CACHE_DIR=/var/lib/haproxy/cache # Chemin d'accès à certbot (non utilisé mais obligatoire) CERTBOT_HOST_PORT=127.0.0.1:80 # Chemin d'accès à l'exportateur prometheus (non utilisé mais obligatoire) PROMETHEUS_HOST_PORT=127.0.0.1:9890 # Log format (oblgiatoire, je l'ai récupéré sur internet) HAP_LOG_FORMAT="%ci:%cp [%tr] %ft %b/%s %TR/%Tw/%Tc/%Tr/%Ta %ST %B %CC %CS %tsc %ac/%fc/%bc/%sc/%rc %sq/%bq %hr %hs %{+Q}r" # URL vers votre serveur de clé KEYSERVER_HOST_PORT=127.0.0.1:11371 # Nom de domaine utilisé par hockeypuck FQDN=keys.dryusdan.net # On prévient HAProxy qu'il est derrière un reverse proxy. HAP_BEHIND_PROXY=true # Le nom complet de votre machine. Doit être dans votre fichier host attribué à la valeur HOST_IP. HOSTNAME=keys.lxc.mul.srv.dryusdan.net # L'IP de votre machine (peut être 127.0.0.1). HOST_IP=127.0.0.1
Dans le fichier 50_fe_http_handler.cfg j'ai supprimé la ligne 11 qui bind *:11371 et bloque le démarrage de hockeypuck en 127.0.0.1:11371. J'ai également modifié les valeurs bind :80 et bind :::80 par bind :8888 et bind :::8888 pour le reverse proxy. Après, si vous ne souhaitez pas modifier le binding, vous pouvez utilisez des containers LXC pour compartimenter 😉
https://dryusdan.space/lxc-ou-comment-avoir-un-petit-lab-leger/
Créez le dossier /var/lib/haproxy/cache et ajouter un fichier nommé tor_exit_relays.list vide
touch /var/lib/haproxy/cache/tor_exit_relays.list
Dans le dossier de configuration on va créer un dossier list avec 4 fichiers dedans
mkdir /etc/haproxy/lists touch /etc/haproxy/lists/{aliases.map,blacklist.list,prometheus_whitelist.list,whitelist.list}
Maintenant on peut démarrer HAProxy et s'attaquer à Nginx
Votre Nginx doit pouvoir écouter sur le port 11371 sans être relié à un nom de domaine. Il est préférable que les accès ne soit pas loggué (en tout cas n'étant pas hébergeur, et n'ayant aucun droit de traiter les données, je ne peux que les supprimer). Pour résumer ça fait 3 server dans Nginx. Je vous le copie colle directement, c'est expliqué sur la page de documentation transmis plus haut, c'est aussi relativement simple, il faut écouter sur un port, mettre en place un certificat SSL pour un port.
server { listen 0.0.0.0:11371 default_server ; listen [::]:11371 default_server ; server_name "" _; #To catch request without host and requests with bad host https://serverfault.com/questions/914906/what-is-the-difference-between-server-name-and-server-name-in-nginx client_max_body_size 2M; include /etc/nginx/conf.d/headers.conf; access_log off; error_log off; # include /etc/nginx/conf.d/proxy.conf; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Remote-Port $remote_port; proxy_set_header Proxy ""; proxy_pass_header Server; proxy_redirect off; proxy_intercept_errors on; # end include add_header X-Robots-Tag 'noindex, nofollow' always; proxy_ignore_client_abort on; rewrite ^/stats /pks/lookup?op=stats; rewrite ^/s/(.*) /pks/lookup?search=$1; rewrite ^/search/(.*) /pks/lookup?search=$1; rewrite ^/g/(.*) /pks/lookup?op=get&search=$1; rewrite ^/get/(.*) /pks/lookup?op=get&search=$1; rewrite ^/d/(.*) /pks/lookup?op=get&options=mr&search=$1; rewrite ^/download/(.*) /pks/lookup?op=get&options=mr&search=$1; location / { proxy_pass http://127.0.0.1:8888; } location /pks { proxy_pass http://127.0.0.1:8888; proxy_pass_header Server; } } server { listen 0.0.0.0:443 ssl http2 ; listen [::]:443 ssl http2 ; server_name keys.dryusdan.net ; client_max_body_size 2M; # include /etc/nginx/conf.d/headers.conf; more_clear_headers x-powered-by; more_clear_headers server; more_clear_headers referrer-policy; more_clear_headers x-xss-protection; more_clear_headers referrer-policy; more_clear_headers x-content-type-options; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header X-Frame-Options "SAMEORIGIN" always; add_header Permissions-Policy interest-cohort=(); add_header Referrer-Policy no-referrer; # end include access_log off; error_log off; # include /etc/nginx/conf.d/proxy.conf; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Remote-Port $remote_port; proxy_set_header Proxy ""; proxy_pass_header Server; proxy_redirect off; proxy_intercept_errors on; # end include ssl_certificate /etc/letsencrypt/live/keys.dryusdan.net/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/keys.dryusdan.net/privkey.pem; ssl_dhparam /etc/nginx/ssl/private/dhparam.pem; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_ecdh_curve X25519:P-521:P-384:P-256; ssl_ciphers "EECDH+CHACHA20:EECDH+AESGCM"; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:20m; ssl_session_timeout 15m; ssl_session_tickets off; add_header X-Robots-Tag 'noindex, nofollow' always; proxy_ignore_client_abort on; rewrite ^/stats /pks/lookup?op=stats; rewrite ^/s/(.*) /pks/lookup?search=$1; rewrite ^/search/(.*) /pks/lookup?search=$1; rewrite ^/g/(.*) /pks/lookup?op=get&search=$1; rewrite ^/get/(.*) /pks/lookup?op=get&search=$1; rewrite ^/d/(.*) /pks/lookup?op=get&options=mr&search=$1;rewrite ^/download/(.*) /pks/lookup?op=get&options=mr&search=$1; location / { proxy_pass http://127.0.0.1:8888; } location /pks { proxy_pass http://127.0.0.1:8888; proxy_pass_header Server; } } server { listen 0.0.0.0:80; listen 0.0.0.0:11371; listen [::]:80; listen [::]:11371; server_name keys.dryusdan.net ; client_max_body_size 2M; # include /etc/nginx/conf.d/headers.conf; more_clear_headers x-powered-by; more_clear_headers server; more_clear_headers referrer-policy; more_clear_headers x-xss-protection; more_clear_headers referrer-policy; more_clear_headers x-content-type-options; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header X-Frame-Options "SAMEORIGIN" always; add_header Permissions-Policy interest-cohort=(); add_header Referrer-Policy no-referrer; # end include access_log off; error_log off; # include /etc/nginx/conf.d/proxy.conf; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Remote-Port $remote_port; proxy_set_header Proxy ""; proxy_pass_header Server; proxy_redirect off; proxy_intercept_errors on; # end include add_header X-Robots-Tag 'noindex, nofollow' always; proxy_ignore_client_abort on; rewrite ^/stats /pks/lookup?op=stats; rewrite ^/s/(.*) /pks/lookup?search=$1; rewrite ^/search/(.*) /pks/lookup?search=$1; rewrite ^/g/(.*) /pks/lookup?op=get&search=$1; rewrite ^/get/(.*) /pks/lookup?op=get&search=$1; rewrite ^/d/(.*) /pks/lookup?op=get&options=mr&search=$1; rewrite ^/download/(.*) /pks/lookup?op=get&options=mr&search=$1; location / { proxy_pass http://127.0.0.1:8888; } location /pks { proxy_pass http://127.0.0.1:8888; proxy_pass_header Server; } }
Bien entendu vous remplacez keys.dryusdan.net par votre nom de domaine 😉.
Avant de lancer Hockeypuck, il nous faut modifier la configuration de ce dernier. Une ligne plus particulièrement, celle du port d'écoute de Hockeypuck pour éviter d'entrer en conflit avec le port d'écoute de Nginx. Reprennez votre fichier de configuration, et à la ligne bind remplacer :11371 par 127.0.0.1:11371 comme suit :
[hockeypuck.hkp] bind="127.0.0.1:11371"
Si votre import de clés est terminé, vous pouvez lancer votre serveur de clé
# systemctl stat hockeypuck.service
/content/images/2024/03/toy-car-little-girl.gif
Et voilà un serveur prêt et fonctionnel !
/content/images/2023/02/cependant-jdg.gif
(Ouai, deux GIF d'affilés, qu'est-tu vas faire ? Activer le mode lecture de Firefox ? Oui, si tu veux...)
Mais vous l'avez surement constaté, votre serveur ne communique avec personne. Et, malheureusement, ce n'est pas automatique comme Mastodon par exemple. Pour communiquer avec un serveur, il faut demander au mainteneur du serveur de devenir pairs afin d'intégrer le réseau SKS. Pour le coup soit vous demandez à quelqu'un qui est connecté à ce réseau de devenir partenaire, et dans ce cas vous êtes lié à un serveur mais en cas de coupure de ce serveur vous êtes isolé, soit vous demandez sur la mailing list que vous cherchez des pairs. C'est décris sur cette page "Ask for peer". Une fois que vous avez trouvé au moins une personne avec qui devenir partenaire, vous devrez modifier votre configuration Hockeypuck et rajouter 3 lignes :
[hockeypuck.conflux.recon.partner.keys_dryusdan_net] httpAddr="keys.dryusdan.net:11371" reconAddr="keys.dryusdan.net:11370"
Dans le nom de la configuration, après partner. vous donnez un nom unique à votre partenaire. Ici c'est keys_dryusdan_net. Ensuite vous définissez le port HTTP/HKP du partenaire ainsi que le port d'accès au serveur recon. Et si vous avez plusieurs partenaires, vous avez plusieurs lignes
[hockeypuck.conflux.recon.partner.4n0nyme] httpAddr="gpg.4n0ny.me:11371" reconAddr="gpg.4n0ny.me:11370" [hockeypuck.conflux.recon.partner.keys_dryusdan_net] httpAddr="keys.dryusdan.net:11371" reconAddr="keys.dryusdan.net:11370"
Et voilà, votre serveur est prêt, vous parlez à des gens et vous participez à agrandir le réseau de serveurs de clé, et ça peut aider tout un tas de personnes 😉
De mon côté, vous pouvez accéder à ces serveurs de clés avec : - gpg.4n0ny.me (en http sur le port 80, https sur le port 443 et http sur le port 11371) - keys.dryusdan.net (en http sur le port 80, https sur le port 443 et http/https sur le port 11371 (oui les deux :p ))
Sur ce, portez-vous bien.
Source : Cryptographie asymétrique PGP OpenPGP GnuPG sks-keyservers gone. What to use instead?
sks-keyservers gone. What to use instead?
Photo de Dynamic Wang
--------------------------------------------------------------------------------