mutt smtp 인증서 호스트 이름이 일치하지 않습니다

mutt smtp 인증서 호스트 이름이 일치하지 않습니다

나는 모든 TLS 인증서가 일치하고 모든 것이 가능한 한 완벽하게 실행되도록 메일 서버를 완벽하게 만들려고 노력하고 있습니다. 이메일은 잘 받을 수 있어요. 이메일도 보낼 수 있는데 mutt가 smtp 인증서를 확인하면 호스트 이름이 인증서와 일치하지 않는다고 나옵니다. 인증서 확인을 비활성화할 수 있지만 문제가 해결되기는커녕 증상만 가려지는 것 같습니다. 내 의도는 IMAP 수신과 SMTP 전송 모두 TLS를 사용하도록 하는 것입니다. 나는 POP 액세스를 전혀 할 계획이 없습니다.

내가 알 수 있는 한, 서버 호스트 이름은 올바르게 설정되었으며 커널과 postfix 구성 모두에서 이를 보고합니다.

내 서버 호스트 이름에는 올바른 IP를 가리키는 DNS의 A 레코드가 있습니다.

  • 서버 웹 메일은 다음을 사용하여 액세스할 수 있습니다.https://webmail.poindexter.farm/ 사용자 이름과 비밀번호는 다음과 같습니다
  • SMTP(접미사) 및 IMAP(비둘기장)은 모두 hwsrv690473.poindexter.farm에 있습니다.
  • 귀하를 돕기 위해 테스트 사용자 계정을 만들었습니다. 사용자 이름과 비밀번호는 모두 "test"입니다.

어떤 도움이라도 대단히 감사하겠습니다!

mutt가 인증서에 대해 불평합니다.

도메인 이름 확인 기록

매직 SSL 명령을 실행하라는 요청을 받았습니다. 어떻게 작동하는지 모르겠습니다.

brad@mini-odin:~ $ echo "" | openssl s_client -connect poindexter.farm:587 -starttls smtp | openssl x509 -noout -text | grep -1 'Alternative Name'
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify error:num=20:unable to get local issuer certificate
verify return:0
250 SMTPUTF8
DONE

            X509v3 Subject Alternative Name: 
                DNS:hwsrv-690473.poindexter.farm

클라이언트 시스템의 muttrc

brad@mini-odin:~ $ cat .muttrc
# vi ~/.muttrc
# About Me
set from = "[email protected]"
set realname = "test account"

# My credentials
set smtp_url = "smtp://[email protected]:587/"
set smtp_pass = "test"

set imap_user = "test" #-This allows login when opening mutt
set imap_pass = "test"
#set smtp_authenticators="login" 

set ssl_starttls = yes 
set ssl_force_tls = yes 

# My mailboxes
set folder = "imaps://hwsrv-690473.poindexter.farm:993"
set spoolfile = "+INBOX"


# Where to put the stuff
set header_cache = "~/.mutt/cache/headers"
set message_cachedir = "~/.mutt/cache/bodies"
set certificate_file = "~/.mutt/certificates"

# Etc
set mail_check = 30
set move = no
set imap_keepalive = 900
set sort = threads
set editor = "vim"

# GnuPG bootstrap
# source ~/.mutt/gpg.rc
brad@mini-odin:~ $ 


mutt 디버그 파일, 작성된 이메일을 보내기 위해 y를 클릭하는 것부터 시작합니다.

brad@mini-odin:~ $ cat .muttdebug0
[2020-06-11 11:57:36] In mutt_reflow_windows
[2020-06-11 11:57:38] Sending message...
[2020-06-11 11:57:38] ../../sendlib.c:2782: mutt_mktemp returns "/tmp/mutt-mini-odin-1001-25828-368841125475337537".
[2020-06-11 11:57:38] mwoh: buf[Subject: test email] is short enough
[2020-06-11 11:57:38] ../../send.c:987: mutt_mktemp returns "/tmp/mutt-mini-odin-1001-25828-15718660201142318120".
[2020-06-11 11:57:38] mwoh: buf[Subject: test email] is short enough
[2020-06-11 11:57:38] Looking up poindexter.farm...
[2020-06-11 11:57:38] Connecting to poindexter.farm...
[2020-06-11 11:57:38] Connected to poindexter.farm:587 on fd=5
[2020-06-11 11:57:38] 5< 220 hwsrv-690473.poindexter.farm ESMTP Postfix (Debian/GNU)
[2020-06-11 11:57:38] 5> EHLO localhost
[2020-06-11 11:57:38] 5< 250-hwsrv-690473.poindexter.farm
[2020-06-11 11:57:38] 5< 250-PIPELINING
[2020-06-11 11:57:38] 5< 250-SIZE 10240000
[2020-06-11 11:57:38] 5< 250-VRFY
[2020-06-11 11:57:38] 5< 250-ETRN
[2020-06-11 11:57:38] 5< 250-STARTTLS
[2020-06-11 11:57:38] 5< 250-ENHANCEDSTATUSCODES
[2020-06-11 11:57:38] 5< 250-8BITMIME
[2020-06-11 11:57:38] 5< 250-DSN
[2020-06-11 11:57:38] 5< 250 SMTPUTF8
[2020-06-11 11:57:38] 5> STARTTLS
[2020-06-11 11:57:38] 5< 220 2.0.0 Ready to start TLS
[2020-06-11 11:57:57] SSL/TLS connection using TLS1.2 (ECDHE-RSA/AES-256-GCM/AEAD)
[2020-06-11 11:57:58] 5> EHLO localhost
[2020-06-11 11:57:58] 5< 250-hwsrv-690473.poindexter.farm
[2020-06-11 11:57:58] 5< 250-PIPELINING
[2020-06-11 11:57:58] 5< 250-SIZE 10240000
[2020-06-11 11:57:58] 5< 250-VRFY
[2020-06-11 11:57:58] 5< 250-ETRN
[2020-06-11 11:57:58] 5< 250-AUTH PLAIN LOGIN
[2020-06-11 11:57:58] 5< 250-ENHANCEDSTATUSCODES
[2020-06-11 11:57:58] 5< 250-8BITMIME
[2020-06-11 11:57:58] 5< 250-DSN
[2020-06-11 11:57:58] 5< 250 SMTPUTF8
[2020-06-11 11:57:58] SASL local ip: 192.168.1.10;55794, remote ip:192.119.74.117;587
[2020-06-11 11:57:58] External SSF: 256
[2020-06-11 11:57:58] External authentication name: test
[2020-06-11 11:57:58] Authenticating (LOGIN)...
[2020-06-11 11:57:58] 5> AUTH LOGIN
[2020-06-11 11:57:58] 5< 334 VXNlcm5hbWU6
[2020-06-11 11:57:58] mutt_sasl_cb_authname: getting authname for poindexter.farm:587
[2020-06-11 11:57:58] 5> dGVzdA==
[2020-06-11 11:57:58] 5< 334 UGFzc3dvcmQ6
[2020-06-11 11:57:58] mutt_sasl_cb_pass: getting password for [email protected]:587
[2020-06-11 11:57:58] 5> dGVzdA==
[2020-06-11 11:57:58] 5< 235 2.7.0 Authentication successful
[2020-06-11 11:57:58] SASL protection strength: 0
[2020-06-11 11:57:58] SASL protection buffer size: 65536
[2020-06-11 11:57:58] 5> MAIL FROM:<[email protected]>
[2020-06-11 11:57:58] 5< 250 2.1.0 Ok
[2020-06-11 11:57:58] 5> RCPT TO:<[email protected]>
[2020-06-11 11:57:58] 5< 250 2.1.5 Ok
[2020-06-11 11:57:58] 5> RCPT TO:<[email protected]>
[2020-06-11 11:57:58] 5< 250 2.1.5 Ok
[2020-06-11 11:57:58] updating progress: 0K
[2020-06-11 11:57:58] Sending message... 0K/0.4K (0%)
[2020-06-11 11:57:58] 5> DATA
[2020-06-11 11:57:58] 5< 354 End data with <CR><LF>.<CR><LF>
[2020-06-11 11:57:58] 5> Date: Thu, 11 Jun 2020 11:57:38 -0500
[2020-06-11 11:57:58] 5> From: test account <[email protected]>
[2020-06-11 11:57:58] 5> To: [email protected], [email protected]
[2020-06-11 11:57:58] 5> Subject: test email
[2020-06-11 11:57:58] 5> Message-ID: <20200611165738.GA25828@localhost>
[2020-06-11 11:57:58] 5> MIME-Version: 1.0
[2020-06-11 11:57:58] 5> Content-Type: text/plain; charset=us-ascii
[2020-06-11 11:57:58] 5> Content-Disposition: inline
[2020-06-11 11:57:58] 5> User-Agent: Mutt/1.10.1 (2018-07-13)
[2020-06-11 11:57:58] 5> 
[2020-06-11 11:57:58] 5> sending a test email to check smtp certificate
[2020-06-11 11:57:58] 5> .
[2020-06-11 11:57:59] 5< 250 2.0.0 Ok: queued as CE28F82380
[2020-06-11 11:57:59] 5> QUIT
[2020-06-11 11:57:59] Mail sent.
[2020-06-11 11:57:59] mutt_free_body: unlinking /tmp/mutt-mini-odin-1001-25828-1671701897145424224.
[2020-06-11 11:59:08] mutt_index_menu[729]: Got op 151
[2020-06-11 11:59:08] Mailbox is unchanged.
[2020-06-11 11:59:08] Closing connection to hwsrv-690473.poindexter.farm...
[2020-06-11 11:59:08] 4> a0005 CLOSE
a0006 LOGOUT
[2020-06-11 11:59:08] 4< a0005 OK Close completed (0.000 + 0.000 secs).
[2020-06-11 11:59:08] 4< * BYE Logging out
[2020-06-11 11:59:08] Handling BYE
[2020-06-11 11:59:08] 4< a0006 OK Logout completed (0.000 + 0.000 secs).
[2020-06-11 11:59:08] IMAP queue drained
brad@mini-odin:~ $ 

postfix 호스트 이름 구성

brad@hwsrv-690473:/home/brad$ sudo postconf -d myhostname
[sudo] password for brad: 
myhostname = hwsrv-690473.poindexter.farm
brad@hwsrv-690473:/home/brad$ 

서버 호스트 이름

brad@hwsrv-690473:/home/brad$ hostname
hwsrv-690473.poindexter.farm
brad@hwsrv-690473:/home/brad$ hostnamectl
   Static hostname: hwsrv-690473.poindexter.farm
         Icon name: computer-vm
           Chassis: vm
        Machine ID: a945a3535aa8484399fd888f61e31e6d
           Boot ID: 4e25349837c340e280e1060eff314f7c
    Virtualization: kvm
  Operating System: Debian GNU/Linux 9 (stretch)
            Kernel: Linux 4.9.0-3-amd64
      Architecture: x86-64
brad@hwsrv-690473:/home/brad$ cat /proc/sys/kernel/hostname
hwsrv-690473.poindexter.farm
brad@hwsrv-690473:/home/brad$ 

서버/etx/postfix/main.cf

brad@hwsrv-690473:/home/brad$cat /etc/postfix/main.cf
# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
delay_warning_time = 1h

readme_directory = no

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2

# TLS parameters
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_cert_file=/etc/letsencrypt/live/hwsrv-690473.poindexter.farm/fullchain.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_key_file=/etc/letsencrypt/live/hwsrv-690473.poindexter.farm/privkey.pem
smtpd_use_tls=yes
smtp_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = hwsrv-690473.poindexter.farm
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, poindexter.farm, localhost.farm, , localhost
relayhost = 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all

# Mail will be stored in users' ~/Maildir directories
#
# NB: make sure to enforce this setting as well in the `mail_location`
# of /etc/dovecot/conf.d/10-mail.conf (thanks to Markus Hoffmann for
# pointing this out):
#
#     mail_location = maildir:~/Maildir
#
home_mailbox = Maildir/
mailbox_command =

# From http://wiki2.dovecot.org/HowTo/PostfixAndDovecotSASL
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
# SPF stuff

smtpd_recipient_restrictions =
    permit_sasl_authenticated,
    reject_invalid_hostname,
    reject_unknown_recipient_domain,
    reject_unauth_destination,
    reject_rbl_client sbl.spamhaus.org,
    check_policy_service unix:private/policy-spf,
    check_sender_access hash:/etc/postfix/sender_access,
    check_recipient_access hash:/etc/postfix/recipient_access,
    permit
policy-spf_time_limit = 3600s
#
# DKIM
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

brad@hwsrv-690473:/home/brad$ 

답변1

나는 garethTheRed가 올바른 길을 가고 있다는 것을 알고 있습니다. 그것은 논리적입니다.어딘가에호스트 이름이 다릅니다.

서버에서 다른 서비스가 실행 중이므로 서버의 호스트 이름을 변경하는 것은 옵션이 아닙니다.

그러나 나는 .muttrc를 사용하여 더 많은 실험을 하기로 결정하고 해결책을 찾았습니다!

.muttrc 라인

#set smtp_url = "smtp://[email protected]:587/" # this did not work
set smtp_url = "smtp://[email protected]:587/" # this works

첫 번째 줄은 기본적으로 username@입니다.도메인 이름: 포트가 작동하지 않습니다.

두 번째 줄, 사용자 이름 @서버 호스트 이름:port는 정말 매력적이에요!

고마워요, 가레스 레드!

답변2

mutt 클라이언트가 에 있는 SMTP 서버에 연결 중이므로 호스트 이름은 입니다. 그러나 Lets Encrypt 인증서에는 dnsName이 포함된 SAN(주체 대체 이름) 확장이 있습니다. 다음을 통해 볼 수 있습니다:smtp://[email protected]:587/poidexter.farmhwsrv-690473.poindexter.farm

echo "" | openssl s_client -connect poindexter.farm:587 -starttls smtp | openssl x509 -noout -text | grep -1 'Alternative Name'

위 명령은 OpenSSL을 사용하여 클라이언트( openssl s_client -connect poindexter.farm:587 -starttls smtp) 역할을 하고 서버에 연결하는 동시에 poindexter.farm:587SMTPS 클라이언트( -starttls smtp)인 것처럼 가장합니다. 핸드셰이크의 일부로 서버는 명령이 여러 정보와 함께 출력하는 인증서를 반환합니다. 이 데이터는 |다른 OpenSSL 명령( openssl x509 -noout -text)으로 파이프( )되어 인증서(편리하게 이전 명령의 PEM 형식 출력)를 수락하고 디코딩한 후 사람이 읽을 수 있는 텍스트로 출력합니다. 마지막으로 이 텍스트 출력은 구문을 필터링하는 |grep( )으로 파이프( )됩니다.grep -1 'Alternative Name'대체 이름그 줄과 다음 줄을 출력합니다 ( 로 인해 -1). 마지막 파이프를 제거하고 그레이핑하면 전체 인증서를 볼 수 있습니다.

보시다시피, 액세스 중인 호스트 이름이 인증서의 이름과 일치하지 않으므로 메시지 가 나타납니다 hostname does not match.

mutt가 SAN을 사용하여 서버에 액세스 hwsrv-690473.poindexter.farm하거나 SAN에 대한 새 인증서를 얻도록 DNS를 구성해야 합니다 poidexter.farm. 즉, 일치해야 합니다.

관련 정보