超どはまりした。
6、7時間くらいは失ったんじゃないかな?orz
先に結論を書くと、ちゃんと Mew のマニュアルには書いてあるのだが TLS/SSL という用語がプロトコルの違いだと勘違いしていたのがそもそもの始まりでして。
TLS = STARTTLS
SSL = SMTP over SSL
ということに気がついたのが深夜 3時。
こういうややこしいのは TLS/SSL とか書かないで欲しいんだけど!
→
9.4 Secure Socket Layer
→
9.5 Transport Layer Security
→
SSL と TLS と STARTTLS の違い
事の始まりは .mew.el を触って SMTP 送信しようとしたら "Creating an SSL/TLS connection..." で刺さって帰ってこなくなったので調査開始。
.mew.el に
(setq mew-debug t)
を書いてメールを送信する。
すると "Creating an SSL/TLS connection..." で刺さるので C-g で中止してから C-x b で *Mew debug* を表示させる。
stunnel を使っているので stunnel が利用する一時設定ファイルは /tmp/ に作られる。
こっちもちょっと確認する。
[ (smtp-port . 587) ]
<SSL/TLS: >
2018.09.19 03:29:39 LOG3[0]: s_connect: connect 153.126.183.190:465: Connection refused (61)
% cat /tmp/griffon22650KWU/mew226506hM
client=yes
pid=
verify=0
foreground=yes
debug=debug
libwrap=no
syslog=no
CApath=/home/griffon/Mail/#imap/griffon@mail.griffonworks.net#imap/inbox/
CAfile=/usr/local/share/certs/ca-root-nss.crt
[11337]
accept=127.0.0.1:11337
connect=mail.griffonworks.net:465
"Creating an SSL/TLS connection..." で刺さる。
んんん?TCP-465?SMTP over SSL?TCP-587を指定してるのに?
一旦 Mew を終了。
なお、送信失敗したメールは +queue に溜まるので C-u C-c C-c で再送できるので、刺さり続けるならば新規メールを作る必要は無い。
[ (smtp-ssl-port . 587) ]
<SSL/TLS: >
2018.09.19 03:34:14 LOG5[0]: s_connect: connected 153.126.183.190:587
<SSL/TLS: >
2018.09.19 03:34:14 LOG3[0]: SSL_connect: 140770FC: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
<SSL/TLS: >
2018.09.19 03:34:14 LOG5[0]: Connection reset: 0 byte(s) sent to TLS, 0 byte(s) sent to socket
2018.09.19 03:34:14 LOG7[0]: Deallocating application specific data for session connect address
2018.09.19 03:34:14 LOG7[0]: Remote descriptor (FD=7) closed
2018.09.19 03:34:14 LOG7[0]: Local descriptor (FD=3) closed
2018.09.19 03:34:14 LOG7[0]: Service [11065] finished (0 left)
% cat /tmp/griffon22698wWU/mew22698giM
client=yes
pid=
verify=0
foreground=yes
debug=debug
libwrap=no
syslog=no
CApath=/home/griffon/Mail/#imap/griffon@mail.griffonworks.net#imap/inbox/
CAfile=/usr/local/share/certs/ca-root-nss.crt
[11385]
accept=127.0.0.1:11385
connect=mail.griffonworks.net:587
"Creating an SSL/TLS connection..." で刺さる。
今度はちゃんと TCP-587 で繋がってるけど "unknown protocol" で接続出来ん。
というか SSLv2/SSLv3?TLSv1 じゃなくて?
一旦 Mew を終了。
らちが明かないのでバックアップの .mew.el を書き戻すと繋がった。
何がおかしいのかと比較してみたら smtp-port と smtp-ssl-port が両方指定されていたので疑問に思いつつ。
[ (smtp-port . 587) と (smtp-ssl-port . 587) ]
<SSL/TLS: >
2018.09.19 03:37:20 LOG5[0]: s_connect: connected 153.126.183.190:587
<SSL/TLS: >
2018.09.19 03:37:20 LOG5[0]: Service [11442] connected remote server from 192.168.1.10:62152
2018.09.19 03:37:20 LOG7[0]: Setting remote socket options (FD=7)
2018.09.19 03:37:20 LOG7[0]: Option TCP_NODELAY set on remote socket
2018.09.19 03:37:20 LOG7[0]: Remote descriptor (FD=7) initialized
<SSL/TLS: >
2018.09.19 03:37:20 LOG7[0]: <- 220 sakura.griffonworks.net ESMTP Postfix
2018.09.19 03:37:20 LOG7[0]: -> 220 sakura.griffonworks.net ESMTP Postfix
% cat /tmp/griffon22755fXU/mew22755PjM
client=yes
pid=
verify=0
foreground=yes
debug=debug
libwrap=no
syslog=no
CApath=/home/griffon/Mail/#imap/griffon@mail.griffonworks.net#imap/inbox/
CAfile=/usr/local/share/certs/ca-root-nss.crt
[11442]
accept=127.0.0.1:11442
connect=mail.griffonworks.net:587
protocol=smtp
お、"SMTP LOGIN password (griffon):" でパスワード聞いてきた。
"protocol=smtp" が増えてるって事は…… smtp-ssl-port だけの時の動作不良は opens s_client で -starttls したときにプロトコルを指定しなかったときの動作を同じか。
というわけで冒頭の結果に至る。
STARTTLS を使用するときは smtp-ssl-port と smtp-port の両方を指定しましょう。
Mew でサーバ証明書 (CRT) の検証をする場合。
必要な証明書はルート証明書であり中間証明書 (Let's Encrypt は中間証明機関) は不要。
証明書が Mew を使うサーバーに有る場合は mew-ssl-cert-directory で証明書を保存しているディレクトリを指定する。
例)
(setq mew-ssl-cert-directory "/usr/local/share/certs")
無い場合は ~/.certs/ にルート証明書を置く。
どの証明書を使うかは、鯖で使っている証明書の証明機関がどこかによって変わる。
例えば Let's Encrypt なら、Lets の証明書を見てみるとルート証明機関は "DST Root CA X3" なので、この証明機関の CRT 証明書を入手する。
ファイル名に法則が有り、以下のようにファイル名を決める。
openssl x509 -hash で出てきた文字列+".0" をファイル名とする。
% openssl x509 -hash -noout -in ./.certs/cafile.crt
2e5ac55d.0
% mv cafile.crt 2e5ac55d.0.0
面倒臭かったら mew-config-alist の中で
; 証明書を検証しない
(ssl-verify-level . 0)
としてもいいけどフェイクサイトかどうか判断出来ないのであまりよろしくはない。
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ 山銀
└ G兄