Pendant des annees, l'identification sur IRC se faisait en envoyant son mot de passe en clair a NickServ apres la connexion. C'etait comme crier son mot de passe dans une salle bondee avant de prouver qui on est. SASL a change ca : l'identification se fait pendant la connexion, avant de rejoindre les canaux. CertFP va encore plus loin : pas de mot de passe du tout, juste un certificat cryptographique. Voici comment configurer les deux.
Le probleme de l'identification
Sans SASL, la sequence de connexion a un reseau IRC avec NickServ est :
# 1. Connexion au serveur (NICK + USER)
# 2. Le serveur vous enregistre avec votre nick
# 3. Vous rejoignez les canaux
# 4. Vous envoyez : /msg NickServ IDENTIFY motdepasse
# 5. NickServ vous identifie et applique le cloak
# Problemes :
# - Entre les etapes 2 et 5, votre hostname reel est visible
# - Vos joins sur les canaux montrent votre IP non cloakee
# - Si quelqu'un surveille, il voit votre IP
# - Le mot de passe transite en clair via PRIVMSG
# (chiffre par TLS si active, mais pas en clair)
# - Si le nick est protege (kill/enforce), vous etes
# deconnecte avant d'avoir pu vous identifier
SASL resout tout ca. L'identification se fait pendant le handshake de connexion, avant que le serveur ne vous rende visible sur le reseau. Votre cloak est applique immediatement. Personne ne voit votre IP reelle.
SASL : comment ca marche
# SASL (Simple Authentication and Security Layer)
# est un framework d'authentification standard.
# Sur IRC, il est negocie via les CAP (capabilities) d'IRCv3.
# Sequence SASL PLAIN :
# Client -> Serveur :
CAP LS 302
# Serveur -> Client :
:serveur CAP * LS :sasl multi-prefix ...
# Client demande SASL :
CAP REQ :sasl
# Serveur confirme :
:serveur CAP * ACK :sasl
# Client initie l'authentification PLAIN :
AUTHENTICATE PLAIN
# Serveur accepte :
AUTHENTICATE +
# Client envoie les credentials (base64) :
AUTHENTICATE dXNlcm5hbWUAdXNlcm5hbWUAcGFzc3dvcmQ=
# Le payload est : username\0username\0password en base64
# (\0 = null byte)
# Serveur repond :
:serveur 903 * :SASL authentication successful
# Ou en cas d'echec :
:serveur 904 * :SASL authentication failed
# Client termine la negociation CAP :
CAP END
# Puis envoie NICK et USER normalement
# Mecanismes SASL supportes :
# PLAIN : username + password en base64 (simple, courant)
# EXTERNAL : authentification par certificat TLS client
# SCRAM-SHA-256 : challenge-response (plus sur que PLAIN)
CertFP : certificats clients
CertFP (Certificate Fingerprint) utilise un certificat TLS client pour s'identifier. Pas de mot de passe — le certificat prouve votre identite cryptographiquement.
# Generer un certificat client :
openssl req -x509 -new -newkey ec \
-pkeyopt ec_paramgen_curve:prime256v1 \
-sha256 -days 3650 -nodes \
-keyout ~/irc-cert.key \
-out ~/irc-cert.crt \
-subj "/CN=VotreNick"
# Combiner cle + certificat (certains clients le demandent) :
cat ~/irc-cert.key ~/irc-cert.crt > ~/irc-cert.pem
chmod 600 ~/irc-cert.pem
# Voir le fingerprint SHA-256 :
openssl x509 -in ~/irc-cert.crt -noout -fingerprint -sha256
# SHA256 Fingerprint=AB:CD:EF:12:34:...
# Enregistrer le fingerprint dans NickServ :
# (apres identification classique)
/msg NickServ CERT ADD
# NickServ lit automatiquement le fingerprint de votre
# connexion TLS actuelle.
# Desormais, quand vous vous connectez avec ce certificat,
# vous etes automatiquement identifie via SASL EXTERNAL.
# Pas de mot de passe necessaire.
# Verifier les fingerprints enregistres :
/msg NickServ CERT LIST
# Retirer un fingerprint :
/msg NickServ CERT DEL fingerprint
L'avantage de CertFP sur SASL PLAIN est qu'aucun mot de passe ne transite sur le reseau. Le certificat prouve votre identite par challenge cryptographique. Meme si quelqu'un intercepte la connexion TLS (peu probable), il ne peut pas cloner votre identite sans la cle privee.
Configuration irssi
# SASL PLAIN :
/network add -sasl_username VotreNick \
-sasl_password VotreMotDePasse \
-sasl_mechanism PLAIN Libera
/server add -auto -tls -tls_verify \
-network Libera irc.libera.chat 6697
# SASL EXTERNAL (CertFP) :
/network add -sasl_mechanism EXTERNAL Libera
/server add -auto -tls -tls_verify \
-tls_cert ~/irc-cert.pem \
-tls_pkey ~/irc-cert.key \
-network Libera irc.libera.chat 6697
# Si le certificat et la cle sont dans le meme fichier :
/server add -auto -tls -tls_verify \
-tls_cert ~/irc-cert.pem \
-network Libera irc.libera.chat 6697
# Verifier que SASL fonctionne :
# Lors de la connexion, irssi affiche :
# "SASL authentication succeeded"
/save
Configuration WeeChat
# SASL PLAIN :
/set irc.server.libera.sasl_mechanism plain
/set irc.server.libera.sasl_username "VotreNick"
/set irc.server.libera.sasl_password "VotreMotDePasse"
# Securiser le mot de passe :
/secure passphrase VotrePassphrase
/secure set libera_pass VotreMotDePasse
/set irc.server.libera.sasl_password "${sec.data.libera_pass}"
# SASL EXTERNAL (CertFP) :
/set irc.server.libera.sasl_mechanism external
/set irc.server.libera.ssl_cert "~/irc-cert.pem"
# WeeChat utilise le meme fichier pour le cert et la cle.
# Verifier la connexion :
# WeeChat affiche dans le buffer serveur :
# "SASL authentication successful"
/save
Configuration HexChat et mIRC
# HexChat :
# Settings -> Network List -> Edit
# Onglet "Connect Commands" :
# (pas necessaire avec SASL)
# Onglet "Login method" :
# Choisir "SASL PLAIN (username + password)"
# Username : VotreNick
# Password : VotreMotDePasse
# Pour CertFP :
# Login method : "SASL EXTERNAL (cert)"
# Cocher "Use a TLS certificate file"
# Selectionner votre fichier .pem
# mIRC :
# Options -> Connect -> Options -> SSL
# Cocher "Use SSL for all servers on this network"
# Pour CertFP :
# SSL -> Private key file : votre .key
# SSL -> Certificate file : votre .crt
# Pour SASL PLAIN, utiliser un script :
# alias doauth {
# if ($network == Libera) {
# .raw CAP REQ :sasl
# .timer 1 3 .raw AUTHENTICATE PLAIN
# .timer 1 5 .raw AUTHENTICATE $encode(nick $+ $chr(0) $+ nick $+ $chr(0) $+ password,m)
# .timer 1 7 .raw CAP END
# }
# }
# on *:LOGON:*: { doauth }
# Note : mIRC 7.72+ supporte SASL nativement
# via Server Options -> Login Method
Cote serveur
# Les services (Anope ou Atheme) gerent SASL.
# L'IRCd relaie les requetes SASL aux services.
# UnrealIRCd — s'assurer que le module est charge :
# (inclus dans modules.default.conf)
# InspIRCd :
# Anope (services.conf) :
module {
name = "sasl"
# SASL est gere automatiquement par NickServ
}
# Atheme :
# SASL est integre dans atheme-services.
# Activer le module saslserv dans atheme.conf :
loadmodule "modules/saslserv/main";
loadmodule "modules/saslserv/authcookie";
loadmodule "modules/saslserv/plain";
loadmodule "modules/saslserv/external";
# external = CertFP
+R sur les canaux ou restriction au niveau serveur), assurez-vous que la documentation pour configurer SASL est facilement accessible. Beaucoup d'utilisateurs ne savent pas configurer SASL et seront bloques. Un lien vers un guide dans le MOTD est indispensable.Questions frequentes
SASL PLAIN ou CertFP ?
CertFP est plus sur (pas de mot de passe transmis). SASL PLAIN est plus simple a configurer. Si vous debutez, commencez par SASL PLAIN (avec TLS), puis migrez vers CertFP quand vous etes a l'aise. Les deux sont acceptables — l'important est d'utiliser au moins l'un des deux.
Mon certificat client expire-t-il ?
Oui, apres la duree specifiee lors de la creation (3650 jours = 10 ans dans l'exemple ci-dessus). Quand il expire, generez-en un nouveau et re-enregistrez le fingerprint avec /msg NickServ CERT ADD. L'ancien fingerprint doit etre supprime avec CERT DEL.
Puis-je utiliser le meme certificat sur plusieurs appareils ?
Techniquement oui — copiez le fichier .pem sur chaque appareil. Mais c'est deconseille : si un appareil est compromis, le certificat est compromis pour tous les appareils. Mieux vaut generer un certificat par appareil et enregistrer chaque fingerprint dans NickServ (CERT ADD supporte plusieurs fingerprints).