0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

STARTTLS を openssl で試す

Last updated at Posted at 2023-07-12

「Azure にインストールした postfix に SMTP-Auth の設定を追加する」
https://qiita.com/nanbuwks/items/85e63ec9b129138bfd18

では、TELNET で SMTP-Auth のテストをしましたが、 AUTH PLAIN で送るフレーズは ユーザ名\0ユーザ名\0パスワード を BASE64 エンコードしたものなので、経路盗聴を行うと簡単にユーザ名、パスワードが入手できてしまいます。

これを防ぐためには暗号接続を用いることをまず考えることができますが、postfix では 自前で経路暗号を行うことについては否定的な立場を取っています。
「Postfix TLSサポート」
https://www.postfix-jp.info/trans-2.3/jhtml/TLS_README.html

しかしながら、Ubuntu22.04 のディストリビューションパッケージでは以下のように TLS 関係が設定されていて、

smtp_tls_CApath = /etc/ssl/certs
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level = may

smtpd_tls_security_level = may

ということで有効になっています。

先程の記事での EHLO 応答においても、

250-STARTTLS

が含まれており、今までの設定で STARTTLS がつかえるみたいです。
今回は、STARTTLS の応答をテストしてみます。

環境

で設定したものです。

telnet で STARTTLS コマンドエラー


$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 test-azure-gen.ugx1l5hl2pbu5oitg4vrqao0jd.phxx.internal.cloudapp.net ESMTP Postfix (Ubuntu)
EHLO
501 Syntax: EHLO hostname
EHLO localhost
250-test-azure-gen.ugx1l5hl2pbu5oitg4vrqao0jd.phxx.internal.cloudapp.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN
250-AUTH=PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING

ここで、

STARTTLS

と打ち込むと

220 2.0.0 Ready to start TLS

となります。しかしながらその後の

AHTH PLAIN

と打ち込むと

Connection closed by foreign host.

のようにクローズしてしまいます。

openssl で STARTTLS

「Azre + Ubuntu 環境での dovecot に SSL/TLS で POP3 アクセスする」
https://qiita.com/nanbuwks/items/46dfe58d90f7b19d891f

で行ったように -quiet オプションをつけて接続してみます。

$ openssl s_client -connect localhost:25 -quiet --starttls smtp

2023/09/07 追記

--starttls smtp の記述が抜けてました。修正しました。

接続すると、以下のようにずらっと返答が表示されます。

CONNECTED(00000003)
Can't use SSL_get_servername
depth=0 CN = test-azure-gen
verify error:num=18:self signed certificate
verify return:1
.
.
.
    Start Time: 1689141539
    Timeout   : 7200 (sec)
    Verify return code: 18 (self signed certificate)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK

EHLO コマンドを送ってみます。

EHLO localhost
250-test-azure-gen.ugx1l5hl2pbu5oitg4vrqao0jd.phxx.internal.cloudapp.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN
250-AUTH=PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING

おや? STARTTLS がありませんね。
試しに STARTTLS を送ると・・・

STARTTLS
554 5.5.1 Error: TLS already active

既にTLS接続になっているとエラーが出ます。
調べてみると、接続した時点でEHLOとSTARTTLSがなされているということでした。

改めて接続し直して、そのまま AUTH コマンドを送ってみます。

AUTH PLAIN
334 
ZXhhbXBsZQBleGFtcGxlAGhvZ2Vob2dlZnVnYWZ1Z2E=
235 2.7.0 Authentication successful

問題なく認証できたようです。
ここで送ったフレーズがわかってしまえば、


ZXhhbXBsZQBleGFtcGxlAGhvZ2Vob2dlZnVnYWZ1Z2E=

は簡単に以下のように復元できます。

example\0example\0hogehogefugafuga

しかしながら TLS 上でやりとりを行っていることで、経路盗聴を行ったとしてもフレーズ自体を解読することができず、それで安全を担保しています。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?