فنی · پاسخ مستند

STARTTLS چیست؟ ارتباط امن SMTP با TLS فرصت‌طلبانه

STARTTLS افزونه‌ای برای سرویس SMTP است که اجازه می‌دهد یک اتصال ناامن با استفاده از TLS به اتصال امن ارتقا یابد. این افزونه به کلاینت و سرور امکان می‌دهد روی یک پورت واحد درباره یک کانال امن توافق کنند تا محتوای ایمیل و اعتبارنامه‌های احراز هویت در حین انتقال رمزگذاری شوند.

سازوکار عملکرد

فرایند با یک SMTP handshake استاندارد به‌صورت متن ساده آغاز می‌شود. سرور قابلیت STARTTLS را در پاسخ EHLO خود اعلام می‌کند. سپس کلاینت دستور STARTTLS را صادر می‌کند. اگر سرور بپذیرد، دو طرف یک TLS handshake انجام می‌دهند تا رمزگذاری برقرار شود. پس از فعال شدن لایه امن، نشست با دستورهای استاندارد SMTP ادامه می‌یابد، اما همه داده‌های بعدی رمزگذاری می‌شوند.

اهمیت برای فرستندگان

STARTTLS با رمزگذاری مسیر ارتباطی بین سرورهای ایمیل، از شنود و حملات مرد میانی جلوگیری می‌کند. بدون آن، ترافیک SMTP به‌صورت متن آشکار منتقل می‌شود و بدنه‌های حساس پیام و اعتبارنامه‌های ورود در معرض دید هر کسی قرار می‌گیرند که مسیر شبکه را پایش می‌کند. بیشتر سرورهای گیرنده مدرن برای پذیرش ایمیل، اتصال‌های رمزگذاری‌شده را در اولویت قرار می‌دهند یا الزامی می‌کنند.

ملاحظات عملیاتی

یک ریسک جدی، حمله downgrade است که در آن مهاجم دستور STARTTLS را از پاسخ سرور حذف می‌کند و کلاینت را وادار می‌کند ایمیل را به‌صورت متن ساده بفرستد. برای جلوگیری از این کار، مدیران می‌توانند MTA-STS را پیاده کنند یا TLS اجباری را پیکربندی کنند. ابزارهای رایگان SendHQ (https://sendhq.cc/tools) کمک می‌کنند برای تحویل بهتر، پیکربندی کلی دامنه خود را بررسی کنید.

اشتباهات رایج در پیاده‌سازی

خطای رایج، یکی دانستن STARTTLS و TLS ضمنی (Implicit TLS) است. STARTTLS روی یک پورت متن ساده (مانند 587) شروع می‌شود و ارتقا می‌یابد، در حالی که TLS ضمنی (پورت 465) پیش از ارسال هر دستور SMTP به یک handshake امن نیاز دارد. پیکربندی نادرست پورت یا ارائه نکردن گواهی SSL معتبر باعث شکست اتصال یا بازگشت به انتقال ناامن می‌شود.

نمونه عملی

کلاینت به پورت 587 وصل می‌شود و EHLO می‌فرستد. سرور با 250-STARTTLS پاسخ می‌دهد. کلاینت STARTTLS می‌فرستد. سرور با 220 Ready to start TLS پاسخ می‌دهد. کلاینت و سرور بر سر کلیدها توافق می‌کنند و نشست را رمزگذاری می‌کنند. سپس کلاینت AUTH LOGIN را می‌فرستد تا اعتبارنامه‌ها را بدون افشا در شبکه، به‌طور امن ارائه دهد.

پرسش‌هایی که تیم‌ها می‌پرسند

آیا STARTTLS همان SSL/TLS است؟

STARTTLS دستوری است که برای آغاز یک نشست TLS روی یک اتصال متن ساده موجود استفاده می‌شود، در حالی که SSL/TLS به خود پروتکل‌های رمزگذاری زیربنایی اشاره دارد.

اگر STARTTLS شکست بخورد چه می‌شود؟

به‌طور پیش‌فرض، بیشتر سرورها از TLS فرصت‌طلبانه (opportunistic TLS) استفاده می‌کنند؛ یعنی اگر handshake شکست بخورد، به متن ساده برمی‌گردند، مگر اینکه TLS اجباری صراحتاً پیکربندی شده باشد.

معمولاً از کدام پورت برای STARTTLS استفاده می‌شود؟

پورت 587 پورت استاندارد submission برای STARTTLS است، هرچند STARTTLS روی پورت 25 هم برای relay سرور به سرور زیاد استفاده می‌شود.

منابع اصلی