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:
Code language: Bash (bash)sudo apt-get install opensslsudo yum install openssl
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:
Code language: Perl (perl)perl -MMIME::Base64 -e 'print encode_base64("\000username\@example.com\000password")'
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:
Code language: Bash (bash)AHVzZXJuYW1lQGV4YW1wbGUuY29tAG15X3Bhc3N3b3Jk
Informacja o logowaniu do SMTP AUTH za pomocą Bash#
Niekoniecznie potrzebujesz Perla do wygenerowania hasha logowania, możesz również użyć Basha:
Code language: Bash (bash)echo -ne '\[email protected]\0password' | base64
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:
Code language: Bash (bash)openssl s_client -connect smtp.example.com:25 -starttls smtp
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:
Code language: YAML (yaml)EHLO there250-smtp.example.com250-PIPELINING250-SIZE 52428800250-ETRN250-AUTH PLAIN LOGIN250-ENHANCEDSTATUSCODES250-8BITMIME250 DSN
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:
Code language: Nginx (nginx)AUTH PLAIN AHVzZXJuYW1lQGV4YW1wbGUuY29tAG15X3Bhc3N3b3Jk
Jeśli wszystko pójdzie dobrze, serwer SMTP zgłosi pomyślne uwierzytelnienie:
Code language: YAML (yaml)235 2.7.0 Authentication successful
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
lubc:\OpenSSL-Win64
, w zależności od bitowości - Urozpakuj
strawberry-perl-5.18.2.2-32bit.zip
lubstrawberry-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:
- 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:
Code language: Perl (perl)perl.exe -MMIME::Base64 -e "print encode_base64(\"\000username\@example.com\000password\")
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
:
Code language: PowerShell (powershell)c:\OpenSSL-Win64\bin>openssl.exe s_client -connect smtp.example.com:25 -starttls smtp
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:
Code language: Bash (bash)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
Sprawdź certyfikat HTTPS TLS/SSL
Użyj openssl
do sprawdzenia i weryfikacji połączeń HTTPS:
Code language: Bash (bash)openssl s_client -tls1_2 -servername host -connect 203.0.113.15:443
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
:
Code language: Bash (bash)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
HTH! 🙂