Jak przetestować uwierzytelnianie SMTP i StartTLS

Jak przetestować uwierzytelnianie SMTP i StartTLS używając wiersza poleceń?

Podczas badania problemów z uwierzytelnianiem SMTP, szczególnie w połączeniach SMTP szyfrowanych TLS, zawsze przydaje się możliwość przetestowania uwierzytelniania SMTP i połączenia StartTLS. Najlepiej z linii poleceń. Ten post pokazuje jak testować serwery SMTP, weryfikować uwierzytelnianie SMTP i połączenia szyfrowane StartTLS z linii poleceń Linuksa i Windows.

Uwierzytelnianie SMTP#

Uwierzytelnianie SMTP jest mechanizmem, dzięki któremu klienci ISP identyfikują się z serwerem pocztowym, przez który zamierzają wysyłać pocztę.

Uwierzytelnianie SMTP, często określane skrótem SMTP AUTH, jest rozszerzeniem protokołu Simple Mail Transfer Protocol, dzięki któremu klient SMTP może zalogować się używając mechanizmu uwierzytelniania wybranego spośród obsługiwanych przez serwer SMTP.

Co to jest Transport Layer Security (TLS)?

Transport Layer Security (TLS) i jego poprzednik, Secure Sockets Layer (SSL), są protokołami kryptograficznymi, które zostały zaprojektowane w celu zapewnienia bezpieczeństwa komunikacji przez Internet. Wykorzystują one certyfikaty X.509 a więc kryptografii asymetrycznej do zapewnienia kontrahenta, z którym się komunikują, oraz do wymiany klucza symetrycznego.

Testuj połączenia TLS i SMTP AUTH z wiersza poleceń w Linuksie i Windows#

Większość problemów z SMTP i wysyłaniem poczty wynika z tego, że albo kombinacja nazwy użytkownika i hasła do logowania jest nieprawidłowa, serwer pocztowy nie obsługuje StartTLS, albo zastosowany mechanizm uwierzytelniania jest niewłaściwy.

Zajrzyjmy się, przetestujmy i zweryfikujmy je wszystkie.

Możliwość weryfikacji połączeń szyfrowanych (Start)TLS za pomocą OpenSSL i opcji SMTP AUTH jest idealnym rozwiązaniem w przypadku problemów z formularzami e-mail, które wysyłają wiadomości za pomocą uwierzytelnionego SMTP, przez połączenie szyfrowane TLS (ze strony internetowej).

Aby zweryfikować uwierzytelnianie SMTP przez TLS, potrzebujesz klienta OpenSSL:

sudo apt-get install opensslsudo yum install openssl
Code language: Bash (bash)

Tworzenie informacji logowania SMTP AUTH za pomocą Perl#

Zanim będziesz mógł przetestować uwierzytelnianie SMTP AUTH PLAIN przez TLS, musisz utworzyć informacje logowania. Informacje logowania to nazwa użytkownika (adres email) i hasło, oraz znak specjalny \0. Zazwyczaj jest to adres e-mail i jego hasło.

Aby utworzyć kombinację – która musi być zakodowana w base64 – możesz użyć Perla:

perl -MMIME::Base64 -e 'print encode_base64("\000username\@example.com\000password")'
Code language: Perl (perl)

Nie możesz zapomnieć uciec od znaku @ ukośnikiem (\), w przeciwnym razie zostanie on zinterpretowany jako tablica. Zakodowany w base64 ciąg znaków będzie wyglądał następująco:

AHVzZXJuYW1lQGV4YW1wbGUuY29tAG15X3Bhc3N3b3Jk
Code language: Bash (bash)

Informacja o logowaniu do SMTP AUTH za pomocą Bash#

Niekoniecznie potrzebujesz Perla do wygenerowania hasha logowania, możesz również użyć Basha:

echo -ne '\[email protected]\0password' | base64
Code language: Bash (bash)

Połącz się z serwerem SMTP za pomocą openssl w bash#

W bashu możesz teraz użyć polecenia openssl, jak wyjaśniono poniżej, aby skonfigurować szyfrowane połączenie TLS z serwerem SMTP:

openssl s_client -connect smtp.example.com:25 -starttls smtp
Code language: Bash (bash)

To daje dużo verbose output, nie martw się 🙂

Gdy połączenie zostanie nawiązane, zauważysz kod SMTP 250:

250 DSN

To oznacza, że możesz rozpocząć transakcję SMTP. Użyj EHLO aby pozwolić serwerowi SMTP na wypisanie obsługiwanych czasowników:

EHLO there250-smtp.example.com250-PIPELINING250-SIZE 52428800250-ETRN250-AUTH PLAIN LOGIN250-ENHANCEDSTATUSCODES250-8BITMIME250 DSN
Code language: YAML (yaml)

Zauważ AUTH PLAIN LOGIN jako metodę logowania. Serwer pocztowy SMTP obsługuje wybrany przez Ciebie mechanizm uwierzytelniania. Twoje kompletne informacje o logowaniu do nazwy użytkownika i hasła są zawinięte w zakodowany ciąg znaków base64. Użyj tego do uwierzytelnienia:

AUTH PLAIN AHVzZXJuYW1lQGV4YW1wbGUuY29tAG15X3Bhc3N3b3Jk
Code language: Nginx (nginx)

Jeśli wszystko pójdzie dobrze, serwer SMTP zgłosi pomyślne uwierzytelnienie:

235 2.7.0 Authentication successful
Code language: YAML (yaml)

Ponieważ kombinacja nazwy użytkownika i hasła jest zakodowana w base64 i jest wysyłana w postaci zwykłego tekstu, potrzebujesz szyfrowania StartTLS/TLS, aby zabezpieczyć połączenie SMTP.

Protip: Oto jak wysyłać uwierzytelnione wiadomości SMTP przez TLS z WordPressa! I jak wysyłać uwierzytelniony SMTP przez połączenie szyfrowane TLS, w PHP, ASP i ASP.NET. Neat! 🙂

Jak zainstalować OpenSSL i Perla na Windows#

Aby wykonać wszystkie powyższe kroki na Windows Server lub Windows 8.1 lub 10, należy pobrać i zainstalować klienta OpenSSL oraz Perl (ja używam Strawberry Perl):

  • Win32 OpenSSL Installation Project (wybierz odpowiedni smak)
  • Strawberry Perl Releases (ja używam edycji ZIP, która nie wymaga instalacji)
  • Zainstaluj OpenSSL na c:\OpenSSL-Win32 lub c:\OpenSSL-Win64, w zależności od bitowości
  • Urozpakuj strawberry-perl-5.18.2.2-32bit.zip lub strawberry-perl-5.18.2.2-64bit.zip i skopiuj folder do c:\Perl na przykład

Konfiguracja środowiska OpenSSL w systemie Windows#

Teraz skonfiguruj środowisko OpenSSL w systemie Windows, aby zapobiec openssl.cnf ostrzeżeniom:

  1. w cmd.exe w wierszu poleceń wpisz set OPENSSL_CONF=c:\OpenSSL-Win64\bin\openssl.cfg. Pozwoli to uniknąć komunikatu o błędzie: WARNING: can't open config file: /usr/local/ssl/openssl.cnf

Tworzenie informacji logowania SMTP AUTH i connecto do serwera SMTP za pomocą Perla/openssl w Windows#

Użyj następującego polecenia Perla, aby wygenerować zakodowany w base64 ciąg logowania. Zwróć uwagę na cudzysłów:

perl.exe -MMIME::Base64 -e "print encode_base64(\"\000username\@example.com\000password\")
Code language: Perl (perl)

W tym przykładzie dane wyjściowe to

AHVzZXJuYW1lQGV4YW1wbGUuY29tAHBhc3N3b3Jk

Połącz się ze swoim serwerem SMTP za pomocą openssl.exe, i powtórz wcześniej wymienione kroki z EHLO i AUTH PLAIN:

c:\OpenSSL-Win64\bin>openssl.exe s_client -connect smtp.example.com:25 -starttls smtp
Code language: PowerShell (powershell)

Bonus: zweryfikuj StartTLS dla serwerów SMTP-, POP3- lub IMAP – Sprawdź certyfikaty HTTPS TLS/SSL#

Aby sprawdzić, czy Twój serwer pocztowy (SMTP-, POP3- lub IMAP) obsługuje StartTLS, użyj następującego polecenia OpenSSL:

openssl s_client -connect imap.example.com:143 -starttls imapopenssl s_client -connect pop.example.com:110 -starttls pop3openssl s_client -connect smtp.example.com:25 -starttls smtp
Code language: Bash (bash)

Sprawdź certyfikat HTTPS TLS/SSL
Użyj openssl do sprawdzenia i weryfikacji połączeń HTTPS:

openssl s_client -tls1_2 -servername host -connect 203.0.113.15:443
Code language: Bash (bash)

Zastąp host swoim nagłówkiem hosta lub nazwą domeny, a 203.0.113.15 adresem IP Twojego serwera WWW.

Protip: sprawdź datę wygaśnięcia certyfikatu SSL.
Ten one-liner sprawdza datę wygaśnięcia certyfikatu SSL, z linii poleceń Linuksa używając openssl:

echo | openssl s_client -connect mx.example.com:25 -starttls smtp | openssl x509 -noout -datesecho | openssl s_client -connect ftp.example.com:21 -starttls ftp | openssl x509 -noout -dates
Code language: Bash (bash)

HTH! 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *