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

オープン
#487 コメント 3 件 リアクション 1 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
38/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
ruby

調査の方向性

Net::IMAP::SASL::ScramSHA256Authenticator から始め、提案されている ScramSHA256PlusAuthenticator サブクラスと比較します。ssl_server_socket.peer_cert から証明書を取得できる仕組みを追跡し、拡張対象となる既存の SASL 認証テストまたはエントリーポイントを特定します。SCRAM-SHA-*-PLUS authenticator がピア証明書を使用したチャネルバインディングをサポートすれば完了です。

索引モデルが issue の本文から書いたものです。

説明

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

主要言語
Ruby
スター
121
フォーク
47
平均マージ
19時間 25分
マージ済み PR(30日)
3

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

ruby/net-imap のほかの issue

ruby/net-imap の issue をすべて見る

似ている issue

Ruby の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。