必要なときには忘れてるのでメモ。
SMTP AUTH というか SASL なので、SMTP じゃなくて IMAP でも同様だと思います。
ユーザー名: hoge@example.com
パスワード: abcdefg
テストのための環境準備
OS は Ubuntu。
パスワード登録:
# apt install sasl2-bin # saslpasswd2 -c hoge -u example.com Password: abcdefg Again (for verification): abcdefg
Postfix で SASL を使用:
# chmod 644 /etc/sasldb2 # postconf -F smtp/inet/chroot=n # postconf smtpd_sasl_auth_enable=yes # postfix reload
PLAIN認証
https://tools.ietf.org/html/rfc4616
平文。暗号化されていない。
サーバー側ではパスワードを平文で保存しておかなくてもいい。
% ruby -e 'puts [[ARGV[0], ARGV[0], ARGV[1]].join("\0")].pack("m0")'\
hoge@example.com abcdefg
aG9nZUBleGFtcGxlLmNvbQBob2dlQGV4YW1wbGUuY29tAGFiY2RlZmc=
C: AUTH PLAIN aG9nZUBleGFtcGxlLmNvbQBob2dlQGV4YW1wbGUuY29tAGFiY2RlZmc= S: 235 2.7.0 Authentication successful
または
C: AUTH PLAIN S: 334 C: aG9nZUBleGFtcGxlLmNvbQBob2dlQGV4YW1wbGUuY29tAGFiY2RlZmc= S: 235 2.7.0 Authentication successful
LOGIN認証
https://tools.ietf.org/html/draft-murchison-sasl-login-00
平文。暗号化されていない。
サーバー側ではパスワードを平文で保存しておかなくてもいい。
% ruby -e 'puts [ARGV[0]].pack("m0"), [ARGV[1]].pack("m0")'\ hoge@example.com abcdefg aG9nZUBleGFtcGxlLmNvbQ== YWJjZGVmZw==
C: AUTH LOGIN S: 334 VXNlcm5hbWU6 C: aG9nZUBleGFtcGxlLmNvbQ== S: 334 UGFzc3dvcmQ6 C: YWJjZGVmZw== S: 235 2.7.0 Authentication successful
サーバーから返される2つの文字列はプロンプト文字列:
% ruby -e 'puts "VXNlcm5hbWU6".unpack1("m")' Username: % ruby -e 'puts "UGFzc3dvcmQ6".unpack1("m")' Password:
CRAM-MD5認証
https://tools.ietf.org/html/rfc2195#section-2
ハッシュ化文字列。
サーバー側でパスワードを平文で保存しておく必要がある。
C: AUTH CRAM-MD5 S: 334 PDIyNTYzMjQ5MzIuMTA3Mjc5MzlAdDQ2MHM+
% ruby -ropenssl -e 'puts [[ARGV[0], OpenSSL::HMAC.hexdigest("MD5", ARGV[1], ARGV[2].unpack1("m"))].join(" ")].pack("m0")'\ hoge@example.com abcdefg PDIyNTYzMjQ5MzIuMTA3Mjc5MzlAdDQ2MHM+ aG9nZUBleGFtcGxlLmNvbSA3OGIxNWZiNDMyZGNiYWJjMmYyZDIxZDQ0OGI3ZmY2OQ==
C: aG9nZUBleGFtcGxlLmNvbSA3OGIxNWZiNDMyZGNiYWJjMmYyZDIxZDQ0OGI3ZmY2OQ== S: 235 2.7.0 Authentication successful