2018/09/19
MewとTLS(STARTTLS)とSSL(SMTP over SSL)と
超どはまりした。
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* を表示させる。
# ちなみに元に戻るにはもう一度 C-x b したら "Switch to buffer (default %inbox):" と聞いてくるのでそのままリターンで Mew に戻れる。

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 で証明書を保存しているディレクトリを指定する。
# サーバー管理者は http://www.mew.org/Release/certs-*.tar.gz をダウンロードし、鯖の公開出来るようなディレクトリで公開すると良い。
例)
(setq mew-ssl-cert-directory "/usr/local/share/certs")
無い場合は ~/.certs/ にルート証明書を置く。
どの証明書を使うかは、鯖で使っている証明書の証明機関がどこかによって変わる。
例えば Let's Encrypt なら、Lets の証明書を見てみるとルート証明機関は "DST Root CA X3" なので、この証明機関の CRT 証明書を入手する。
# Windows 使いなら IE から "Base64 encoded X.509 (.CER)" で、Firefox なら "X.509 証明書 (PEM)" で証明書をエクスポートすると良い。

ファイル名に法則が有り、以下のようにファイル名を決める。
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)
としてもいいけどフェイクサイトかどうか判断出来ないのであまりよろしくはない。


最終:2018/09/20 01:37:13 カテゴリ:
タグ:鯖管理
  • 安田幸子:他に連絡先が見つかりませんでしたのでコメント欄から失礼いたします。以前イギリスのデジタルマーケティング会社の要請で記事コラボレーションのご依頼についてご連絡させていただきました。この度プロジェクト内容に変更があり、謝礼金も大幅に増額されましたので、貴サイトのように信頼あるサイトで再検討して頂きたくご連絡しております。当方クライアント指定のキーワードを使って、指定ウェブページにリンクする記事執筆或いは既存記事への追記というのがご依頼の内容でございます。こちらのサイトの主旨に背かない範囲でのお願いです。そのようなご依頼に対する対応は可能でしょうか。特定商品の宣伝ではない、一般的な文です。もしよろしければ弊社並びにクライアント情報、新しい謝礼金も含めまして詳細についてメールでご説明させて下さい。どうぞよろしくお願いいたします。sachikoyasuda1604@gmail.com
  • G兄:そのような案件はお受けしておりませんのでよろしくお願いします。
QRコード
携帯サイト試験運用
https://griffonworks.net/nikki/cgi-bin/k.cgi
1行板

備忘録
  • 無し
物欲リスト
  • Canon RF50mm F1.2L USM
  • SIGMA 20mm F1.4 EF Art
  • ニンバス チヌーク
  • OCB-1 ST II
ツーリング ドライブ兼野外撮影予定リスト