گواهی TLS در CDN ستون، ارتباط بازدیدکننده تا لبه را رمزنگاری میکند. مرورگر نام دامنه را با گواهی که لبه ارایه میکند تطبیق میدهد. گواهی لبه جدا از گواهی سرور آپاستریم است.
صفحه گواهی SSL/TLS در پنل فقط همین ارتباط را تنظیم میکند. سه حالت دارد:
| حالت | چه کسی گواهی را میسازد | چه زمانی مناسب است |
|---|---|---|
| TLS خودکار | ستون، از Let’s Encrypt | وقتی تمدید و پوشش زیردامنه یکسطحی را ستون انجام دهد |
| TLS شخصی | خود ما، با بارگذاری Secret | وقتی به گواهی تجاری، صادرکننده مشخص، یا کلاینت قدیمی نیاز داریم |
| عدم استفاده از TLS | گواهی ارایه نمیشود | وقتی سایت باید فقط روی HTTP بماند |
مراحل پنل در فعالسازی TLS خودکار و فعالسازی TLS با گواهی شخصی است. فیلدها در مرجع تنظیمات TLS آمده است.
TLS لبه و TLS آپاستریم
دو اتصال جدا هستند:
flowchart LR client(["بازدیدکننده"]) edge(["لبه CDN"]) origin(["آپاستریم"]) client -->|"HTTP یا HTTPS"| edge edge -->|"HTTP یا HTTPS"| origin
| اتصال | گواهی | تنظیم |
|---|---|---|
| بازدیدکننده تا لبه | گواهی خودکار یا شخصی همین صفحه | گواهی SSL/TLS |
| لبه تا آپاستریم | گواهی روی خود مبدا، در صورت انتخاب HTTPS | پروتکل آپاستریم |
لبه میتواند به بازدیدکننده HTTPS بدهد و تا مبدا با HTTP برود. ستون برای آپاستریم گواهی صادر نمیکند و گواهی مبدا را Verify نمیکند؛ گواهی Self-signed هم پذیرفته میشود. این رفتار در پنل قابل تغییر نیست. جزییات پروتکل مبدا در آپاستریم است.
صدور خودکار
در TLS خودکار، ستون گواهی Let’s Encrypt را میسازد و تمدید میکند. پنل همیشه درخواست وایلدکارد (Wildcard) ثبت میکند. نتیجه به محل DNS بستگی دارد:
- اگر نامسرور دامنه، و هر نام اضافهای که وارد کردهایم، متعلق به ستون باشد و زون در همان فضای کاری باشد، صدور با چالش DNS انجام میشود. گواهی شامل خود دامنه و
*.example.comاست و لازم نیست ترافیک از قبل روی CDN باشد. - اگر DNS روی ستون نباشد، صدور به چالش HTTP برمیگردد و فقط همان hostname را پوشش میدهد. سایت باید از مسیر CDN در دسترس باشد تا چالش تمام شود. تا آمادهشدن گواهی، دسترسی میتواند موقتا قطع شود.
اعمال گواهی روی لبه ممکن است تا ۳۰ دقیقه طول بکشد.
چالش از نامهای _acme-challenge استفاده میکند و رکورد CNAME روی آنها را دنبال نمیکند. وجود چنین CNAMEای صدور و تمدید را مختل میکند.
در قطع دسترسی به Let’s Encrypt، مثلا هنگام اختلال اینترنت بینالملل، تمدید خودکار ممکن است انجام نشود. گواهی شخصی به صادرکننده ستون وابسته نیست و تمدیدش با ماست.
پوشش وایلدکارد (Wildcard)
گواهی *.example.com فقط یک سطح را پوشش میدهد:
| نام | با *.example.com |
|---|---|
example.com | روی خود گواهی هست |
www.example.com | پوشش داده میشود |
api.v2.example.com | پوشش داده نمیشود |
برای سطح بعدی، در TLS خودکار آن زیردامنه را بدون ستاره اضافه میکنیم. مثلا v2.example.com باعث میشود *.v2.example.com هم در گواهی بیاید و api.v2.example.com پوشش داده شود. حداکثر ۱۰ نام اضافه مجاز است و هر کدام باید زیردامنه همان hostname باشد.
گواهی شخصی هر نامی را پوشش میدهد که موقع خرید داخل آن بوده باشد؛ وایلدکارد (Wildcard)بودن آن به صادرکننده گواهی بستگی دارد.
هدایت HTTP و HSTS
گزینه همه درخواستهای HTTP بهطور خودکار به HTTPS هدایت شوند. دو اثر دارد:
- درخواست HTTP با
301به همان مسیر روی HTTPS میرود. - پاسخ HTTPS هدر
Strict-Transport-Security: max-age=31536000میگیرد؛ مرورگر تا یک سال آن میزبان را مستقیم با HTTPS باز میکند.
اگر این گزینه خاموش باشد، HTTP به HTTPS هدایت نمیشود و روی پاسخ HTTPS مقدار max-age=0 فرستاده میشود.
اگر مبدا هم HTTP را به HTTPS هدایت کند و پروتکل آپاستریم HTTP باشد، این هدایت با ریدایرکت مبدا حلقه میسازد.
حداقل نسخه TLS
لبه دستدهیای را که از حداقل ورژن TLS پایینتر باشد رد میکند. مقدارهای قابل انتخاب TLSv1، TLSv1.1، TLSv1.2 و TLSv1.3 هستند. هنگام ساخت وبسایت، پیشفرض TLSv1.2 است.
نسخه پروتکل با اعتماد به صادرکننده فرق دارد. اندروید قدیمیتر از ۷.۱.۱ ریشه Let’s Encrypt را نمیشناسد، حتی اگر TLSv1.2 را پشتیبانی کند. برای آن کلاینتها گواهی تجاری را در فعالسازی TLS با گواهی شخصی میگذاریم؛ به شرطی که مرجع آن گواهی در اعتماد همان دستگاه باشد.
