🔒 Support `SCRAM-*-PLUS` with channel binding

Offen
#487 3 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
38/100
Issue-Typ
Feature
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
ruby

Rechercherichtung

Beginne mit Net::IMAP::SASL::ScramSHA256Authenticator und vergleiche es mit der vorgeschlagenen ScramSHA256PlusAuthenticator-Unterklasse. Verfolge, wie ssl_server_socket.peer_cert das Zertifikat bereitstellen könnte, und identifiziere die vorhandenen SASL-Authentifizierungstests oder Einstiegspunkte, die erweitert werden sollen. Als abgeschlossen gilt die Aufgabe, wenn SCRAM-SHA-*-PLUS-Authentifikatoren Channel Binding mithilfe des Peer-Zertifikats unterstützen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

SASL :lock:

To use channel binding and SCRAM-SHA-256-PLUS, I just made the following subclass. Sharing in case helpful for a broader implementation of -PLUS authenticators.

class ScramSHA256PlusAuthenticator < Net::IMAP::SASL::ScramSHA256Authenticator
  def initialize(*args, **options)
    super(*args, **options)
    @ssl_cert = options[:ssl_cert]
  end

  def gs2_cb_flag
    "p=tls-server-end-point"
  end

  def cbind_input
    cert_algo_raw = @ssl_cert.signature_algorithm
    cert_algo = OpenSSL::Digest.new(cert_algo_raw).name # standardize e.g. sha256WithRSAEncryption to SHA256
    sasl_algo = cert_algo == "MD5" || cert_algo == "SHA1" ? "SHA256" : cert_algo
    hash = OpenSSL::Digest.digest(sasl_algo, @ssl_cert.to_der)
    "#{gs2_header}#{hash}"
  end
end

The ssl_cert option to ScramSHA256PlusAuthenticator.new should be passed ssl_server_socket.peer_cert.

Originally posted by @jawj in #54

Vorherrschende Sprache
Ruby
Sterne
121
Forks
47
Ø Merge
19 Std. 25 Min.
Gemergte PRs (30 T.)
3

Entwicklungsumgebung

Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus ruby/net-imap

Alle Issues in ruby/net-imap

Ähnliche Issues

Weitere Issues zu Ruby

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.