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

Aberta
#487 3 comentários 1 reação 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
38/100
Tipo de issue
Funcionalidade
Clareza
Razoavelmente clara
Status de atividade
Estagnada
Stack de tecnologia
ruby

Direção de pesquisa

Comece com Net::IMAP::SASL::ScramSHA256Authenticator e compare-o com a subclasse ScramSHA256PlusAuthenticator proposta. Verifique como ssl_server_socket.peer_cert poderia fornecer o certificado e, em seguida, identifique os testes de autenticação SASL ou pontos de entrada existentes a serem estendidos. Está concluído quando os autenticadores SCRAM-SHA-*-PLUS derem suporte a channel binding usando o certificado do peer.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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

Linguagem predominante
Ruby
Estrelas
121
Forks
47
Merge médio
19h 25min
PRs com merge (30d)
3

Preparar o ambiente

Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de ruby/net-imap

Todas as issues de ruby/net-imap

Issues semelhantes

Mais issues de Ruby

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.