Skip to content

Add SASL EXTERNAL and certificate enrollment - #47

Merged
iconidentify merged 1 commit into
mainfrom
fix/sasl-external
Oct 2, 2026
Merged

iconidentify merged 1 commit into
mainfrom
fix/sasl-external

Conversation

@iconidentify

Copy link
Copy Markdown
Owner

Summary

  • IRC TLS optionally requests a client certificate and binds its SHA-256 fingerprint to the connection. HTTPS does not request one.
  • NickServ CERT LIST / CERT ADD / CERT DEL enroll and revoke those fingerprints on an existing account. CERT ADD uses the certificate on the current TLS session.
  • SASL EXTERNAL logs in as the account bound to that certificate. PLAIN stays available, including after a failed EXTERNAL attempt. Password changes and certificate removal do not affect the other credential, and neither drops a session that is already identified.

Fixes #45
Fixes #46

Test plan

  • cargo test -- --test-threads=1
  • TLS end-to-end: enroll, EXTERNAL, second certificate, wrong authzid, unknown certificate, no certificate, abort, malformed and oversized responses, password rotation, deletion leaves the other certificate and the password, existing session stays logged in
  • Plaintext CAP LS 302 advertises sasl=PLAIN only

The IRC TLS listener can ask for a client certificate without requiring
one, and NickServ binds that handshake fingerprint to an existing
account. PLAIN keeps working, password changes leave certificates in
place, and removing a certificate only affects the next login. HTTPS
does not request a client certificate.
@iconidentify
iconidentify merged commit 2d618e1 into main Oct 2, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Define SASL PLAIN/EXTERNAL migration, certificate rotation, and recovery Support SASL EXTERNAL with NickServ certificate enrollment and revocation

1 participant