ruby / net-pop

This library provides functionality for retrieving email via POP3, the Post Office Protocol version 3. For details of POP3
BSD 2-Clause "Simplified" License
20 stars 13 forks source link

RFC6331: Moving DIGEST-MD5 to Historic #9

Open Neustradamus opened 2 years ago

Neustradamus commented 2 years ago

Dear @ruby team,

In first, I wish you a Happy New Year!

20 November 2008: CRAM-MD5 to Historic:

29 June 2017: CRAM-MD5 to Historic:

July 2011: RFC6331: Moving DIGEST-MD5 to Historic:

August 2021: RFC9051: Internet Message Access Protocol (IMAP) - Version 4rev2: "Replaced DIGEST-MD5 SASL mechanism with SCRAM-SHA-256. DIGEST-MD5 was deprecated."

I add same about SCRAM-MD5.

There are now:

Soon:

hsbt commented 1 year ago

@nevans Should we remove MD5 authenticate and add SASL or other modern mechanism same as https://github.com/ruby/net-imap/pull/62? I don't have enough knowledge for POP3 protocol.

nevans commented 1 year ago

@hsbt I haven't had any experience with POP3 since the late 1990's. 😉 Quickly skimming the POP3 RFCs, it looks like APOP is part of the core POP3 specification, and APOP requires an MD5 digest. Because it's part of the core spec, we probably shouldn't remove it. Printing a warning like ruby/net-imap#62 is probably the right thing to do.

IMO, even more important is following RFC-7817 and RFC-8314 and 1) defaulting to use TLS (or STARTSSL), 2) ensure the server is verified correctly, and 3) print warnings or require a special allow_insecure_cleartext: true whenever a connection attempts to authenticate without using TLS (or STARTSSL).

POP3 does have a SASL extension RFC-5034, but it looks like net-pop doesn't support it yet? It looks like net-pop is also missing the CAPA command? But I think that should be a relatively easy addition. IMO, net-imap, net-pop, and net-smtp should all share a single SASL implementation. That's kind of the entire point of SASL! 😉 That could either mean adding dependencies from net-pop and net-smtp to net-imap, or extracting Net::IMAP::SASL/Net::IMAP::*Authenticator* to a new gem that all three depend on.