آموزشآموزش‌های تکی

آموزش تکی، حدود ۳۲ دقیقه خواندن

SSL چیه

جواب کوتاه

SSL (کوتاه‌شده‌ی Secure Sockets Layer، یعنی «لایه‌ی امن ارتباط») اسم قدیمی روشیه که ارتباط مرورگر و سایت رو رمز می‌کنه؛ اسم امروزیش TLS‌ئه. «گواهی SSL» یه کارت شناسایی دیجیتاله که یه صادرکننده‌ی مورد اعتماد مهرش کرده، و می‌گه این سایت واقعا همون دامنه‌ایه که ادعا می‌کنه. مرورگر مهر رو می‌سنجه، و اگه درست بود، قفل کنار آدرس رو نشون می‌ده و ارتباط رمز می‌شه.

اسم

SSL کوتاه‌شده‌ی Secure Sockets Layer هست. Secure یعنی «امن». Socket توی شبکه یعنی «دو سر یه ارتباط»، مثل دو سر یه لوله. Layer هم یعنی «لایه». پس SSL یعنی «یه لایه‌ی امن روی ارتباط».

یه نکته‌ی مهم: SSL واقعی سال‌هاست کنار گذاشته شده، و جاش TLS اومده، کوتاه‌شده‌ی Transport Layer Security، یعنی «امنیت لایه‌ی جابه‌جایی». ولی اسم SSL اون‌قدر جاافتاده بود که هنوز همه، حتی شرکت‌هایی که گواهی می‌فروشن، می‌گن «گواهی SSL». پس هر جا «SSL» شنیدید، منظور امروز همون TLS‌ئه. اینکه TLS قدم به قدم چطور ارتباط رو رمز می‌کنه، توی درس HTTPS هست؛ این درس بیشتر درباره‌ی خود گواهیه.

دو تا کار

وقتی آدرس یه سایت رو می‌زنید، درخواست شما از کلی جا رد می‌شه؛ مودم خونه، شرکت اینترنت، چند تا مسیر بین شهرها و کشورها. بی رمز، هر کدوم از این جاها می‌تونه ببینه چی می‌فرستید، مثلا رمز عبور، و حتی جواب رو عوض کنه.

SSL دو تا کار می‌کنه. اول، ثابت می‌کنه سایتی که بهش وصل شدید، واقعا همون سایته، نه یکی که خودش رو جاش جا زده. دوم، ارتباط رو رمز می‌کنه، تا هیچ‌کس وسط راه نتونه بخونه یا عوض کنه. اولی کار گواهیه، دومی کار رمزنگاری‌ای که بعد از گواهی شروع می‌شه. بی کار اول، کار دوم بی‌فایده‌ست؛ رمز کردن ارتباط با یه سایت جعلی، فقط یعنی رمزتون رو امن به دزد دادید.

کارت شناسایی

مثلا فرض کنید یه نفر میاد در خونه‌تون و می‌گه «مامور شرکت گازم». از کجا بدونید راست می‌گه؟ یه کارت نشون می‌ده. ولی کارت رو هر کسی می‌تونه چاپ کنه؛ چیزی که مهمه، مهر اداره‌ایه که بهش اعتماد دارید.

گواهی SSL همین کارته. سایت، موقع وصل شدن، کارتش رو نشون می‌ده؛ روش اسم دامنه، تاریخ اعتبار و یه کلید نوشته شده، و یه صادرکننده‌ی مورد اعتماد مهرش کرده. مرورگر مهر رو می‌سنجه. اگه مهر درست بود، اسم روی کارت با آدرسی که زدید یکی بود، و تاریخ نگذشته بود، قفل رو نشون می‌ده. اگه هر کدوم مشکل داشت، یه صفحه‌ی هشدار بزرگ.

دو تا کلید

برای فهمیدن SSL باید یه ایده‌ی جالب رو بدونید: کلیدهای جفتی. هر سایت دو تا کلید داره که به هم وابسته‌ان. یکی «عمومی»، که روی کارت نوشته و هر کسی می‌تونه داشته باشه. یکی «خصوصی»، که فقط روی سرور سایته و هیچ‌وقت به کسی داده نمی‌شه.

کلید عمومی: روی کارت، دست همه.
کلید خصوصی: فقط روی سرور، دست هیچ‌کس دیگه.

جادوی این جفت اینه که چیزی که با کلید عمومی قفل بشه، فقط با کلید خصوصی باز می‌شه. مثل یه صندوق نامه با یه شکاف؛ هر کسی می‌تونه نامه بندازه توش، ولی فقط صاحب کلید می‌تونه بازش کنه. برعکسش هم کار می‌کنه؛ چیزی که با کلید خصوصی «امضا» بشه، هر کسی با کلید عمومی می‌تونه بسنجه که واقعا صاحب همون کلید امضاش کرده.

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

روی کارت چی نوشته

یه گواهی SSL یه فایل کوچیکه، معمولا چند کیلوبایت، با یه قالب استاندارد. مهم‌ترین چیزهایی که توشه، اسم یا اسم‌های دامنه‌ایه که کارت براشون معتبره، مثل example.com و www.example.com. بعد کلید عمومی سایت. بعد تاریخ شروع و تاریخ پایان اعتبار. بعد اسم صادرکننده. و آخر، امضای صادرکننده روی همه‌ی این‌ها.

اون امضا، همون مهره. اگه کسی حتی یه حرف از اسم دامنه رو عوض کنه، امضا دیگه نمی‌خونه و مرورگر می‌فهمه کارت دستکاری شده. برای همین نمی‌شه یه گواهی رو برداشت و اسمش رو عوض کرد.

کی مهر می‌زنه

کسی که گواهی رو مهر می‌کنه، بهش می‌گن CA، کوتاه‌شده‌ی Certificate Authority، یعنی «مرجع صدور گواهی». این‌ها سازمان‌هایی‌ان که سازنده‌های مرورگر و سیستم‌عامل‌ها بررسیشون کردن و قبولشون دارن. هر مرورگر و سیستم‌عامل یه فهرست از این مرجع‌ها با خودش داره، که بهش می‌گن «انبار ریشه».

برای موندن توی این فهرست، مرجع‌ها باید قانون‌های سفتی رو رعایت کنن، که یه گروه مشترک از مرجع‌ها و سازنده‌های مرورگر می‌نویسه، و هر سال بازرسی بشن. اگه یه مرجع اشتباه بزرگی بکنه، مثلا برای دامنه‌ای که مال کسی نیست گواهی بده، مرورگرها از فهرستشون بیرونش می‌کنن، و همه‌ی گواهی‌هاش یه‌شبه بی‌اعتبار می‌شن. این اتفاق چند بار افتاده.

زنجیره‌ی اعتماد

مرجع‌ها کلید اصلیشون، یعنی کلید «ریشه»، رو خیلی کم استفاده می‌کنن و توی جاهای خیلی امن، معمولا خاموش و جدا از اینترنت، نگه می‌دارن. با این کلید، یه گواهی «میانی» مهر می‌کنن، و روزانه با کلید میانی برای سایت‌ها گواهی می‌دن.

مرورگر وقتی کارت سایت رو می‌بینه، از پایین بالا می‌ره؛ کارت سایت رو میانی مهر کرده، میانی رو ریشه، و ریشه توی فهرست خود مرورگره. اگه زنجیره کامل باشه، اعتماد می‌کنه. اگه یه حلقه‌ش نباشه، اعتماد نمی‌کنه.

یه اشتباه خیلی رایج روی سرورها اینه که فقط کارت سایت نصب می‌شه و گواهی میانی جا می‌مونه. بعضی مرورگرها خودشون میانی رو پیدا می‌کنن یا از قبل دارن، و سایت براشون کار می‌کنه؛ ولی روی بعضی گوشی‌ها و برنامه‌ها خطا می‌ده. برای همین موقع نصب، همیشه فایل «زنجیره‌ی کامل» (fullchain) رو بذارید، نه فقط کارت سایت.

سه جور بررسی

مرجع پیش از مهر زدن، یه چیزی رو بررسی می‌کنه، و بسته به اینکه چی رو بررسی کرده، گواهی سه جوره. DV، کوتاه‌شده‌ی Domain Validation، یعنی «بررسی دامنه»؛ مرجع فقط بررسی می‌کنه که درخواست‌دهنده واقعا دامنه رو در دست داره، مثلا با یه فایل روی سایت یا یه رکورد توی DNS. چند دقیقه طول می‌کشه و بیشتر گواهی‌های دنیا همینه.

OV، کوتاه‌شده‌ی Organization Validation، یعنی «بررسی سازمان»؛ مرجع علاوه بر دامنه، بررسی می‌کنه که سازمانی که اسمش روی گواهیه، واقعا وجود داره. EV، کوتاه‌شده‌ی Extended Validation، یعنی «بررسی گسترده»؛ بررسی سفت‌تر سازمان، با مدرک و تماس. چند سال پیش، مرورگرها برای EV اسم شرکت رو سبز کنار آدرس نشون می‌دادن، ولی از حدود ۲۰۱۹ این رو برداشتن، چون آزمایش‌ها نشون داد مردم بهش توجه نمی‌کنن.

نکته‌ی مهم اینه که رمزنگاری هر سه دقیقا یکیه. EV ارتباط رو امن‌تر نمی‌کنه؛ فقط مرجع بیشتر گشته. امروز برای تقریبا همه‌ی سایت‌ها، DV کافیه.

یه اسم یا چند تا

یه گواهی می‌تونه برای یه اسم باشه یا برای چند تا:

  • تک‌دامنه
  • چند دامنه (SAN)
  • وایلدکارت (*.)

گواهی تک‌دامنه فقط برای یه اسمه. گواهی چنددامنه یه فهرست اسم داره که همه روی یه کارت نوشته شدن؛ به این فهرست می‌گن SAN، کوتاه‌شده‌ی Subject Alternative Name، یعنی «اسم‌های دیگه‌ی صاحب کارت». امروز تقریبا همه‌ی گواهی‌ها، حتی تک‌دامنه‌ها، دست‌کم دو تا اسم دارن؛ با www و بی www.

گواهی وایلدکارت با یه ستاره نوشته می‌شه، مثل *.example.com، و برای هر اسمی که یه سطح زیر example.com باشه معتبره؛ shop.example.com، blog.example.com و بقیه. ولی دو تا نکته داره. اول اینکه فقط یه سطح؛ a.b.example.com رو پوشش نمی‌ده. دوم اینکه خود example.com رو هم پوشش نمی‌ده، و باید جدا به فهرست اضافه بشه. برای گرفتن وایلدکارت، معمولا باید با رکورد DNS ثابت کنید دامنه مال شماست.

رایگان یا پولی

تا حدود ده سال پیش، گواهی SSL پولی بود و نصبش دردسر داشت؛ برای همین خیلی از سایت‌ها اصلا نداشتن. از ۲۰۱۵ و ۲۰۱۶، یه سازمان غیرانتفاعی شروع کرد به دادن گواهی DV رایگان و خودکار، و چند تا مرجع دیگه هم همین کار رو کردن. امروز بیشتر گواهی‌های دنیا رایگان‌ان.

پس گواهی پولی به چه دردی می‌خوره؟ برای OV و EV، که بررسی سازمان لازم دارن و هیچ‌وقت رایگان نیستن. برای پشتیبانی و تضمین مالی که بعضی مرجع‌ها می‌دن. و برای جاهایی که قانون یا قرارداد یه مرجع خاص رو می‌خواد. ولی برای امنیت ارتباط، گواهی رایگان دقیقا هم‌اندازه‌ی پولی امنه.

گواهی رایگان چطور داده می‌شه

گواهی‌های رایگان و خودکار با یه زبان استاندارد به اسم ACME داده می‌شن، کوتاه‌شده‌ی Automatic Certificate Management Environment، یعنی «محیط مدیریت خودکار گواهی». یه برنامه روی سرور شما با مرجع حرف می‌زنه، و همه‌چیز بی دخالت آدم انجام می‌شه:

  1. برنامه روی سرور یه جفت کلید می‌سازه و به مرجع می‌گه «برای example.com گواهی می‌خوام».
  2. مرجع یه معما می‌ده؛ مثلا «این متن رو توی این آدرس روی سایتت بذار» یا «این رکورد رو توی DNS دامنه‌ت بذار».
  3. برنامه معما رو حل می‌کنه، یعنی فایل یا رکورد رو می‌ذاره.
  4. مرجع از چند جای اینترنت سر می‌زنه و می‌بینه فایل یا رکورد هست؛ پس شما دامنه رو در دست دارید.
  5. مرجع گواهی رو مهر می‌کنه، و برنامه نصبش می‌کنه و وب‌سرور رو دوباره بار می‌کنه.

کل این کار معمولا کمتر از یه دقیقه‌ست، و برنامه خودش یادش می‌مونه پیش از تموم شدن اعتبار، دوباره همین کار رو بکنه.

عمر گواهی

هر گواهی یه تاریخ پایان داره. سال‌ها پیش گواهی‌ها چند سال اعتبار داشتن؛ کم‌کم کوتاه شدن. آوریل ۲۰۲۵، گروه مشترک مرجع‌ها و سازنده‌های مرورگر تصویب کردن که این عمر، قدم به قدم، خیلی کوتاه‌تر بشه:

  1. تا مارس ۲۰۲۶۳۹۸ روز
  2. از مارس ۲۰۲۶۲۰۰ روز
  3. از مارس ۲۰۲۷۱۰۰ روز
  4. از مارس ۲۰۲۹۴۷ روز

یعنی الان، پاییز ۲۰۲۶، هیچ گواهی‌ای نمی‌تونه بیشتر از ۲۰۰ روز اعتبار داشته باشه، و از مارس ۲۰۲۹، بیشتر از ۴۷ روز. مدتی که مرجع می‌تونه از بررسی قبلی دامنه دوباره استفاده کنه هم کوتاه می‌شه، تا جایی که آخرش فقط ۱۰ روزه.

چرا؟ چون گواهی کوتاه‌عمر، اگه دزدیده بشه یا اشتباهی داده بشه، زودتر خودش بی‌اعتبار می‌شه. و چون راه‌های باطل کردن گواهی پیش از تاریخش، که جلوتر می‌بینیم، هیچ‌وقت خوب کار نکردن. نتیجه‌ی عملیش برای شما یه جمله‌ست: تمدید دستی گواهی دیگه شدنی نیست. هر سایتی باید تمدید خودکار داشته باشه.

تمدید خودکار

روی سرور خودتون، برنامه‌ی ACME معمولا یه کار زمان‌بندی‌شده می‌سازه که روزی یکی دو بار نگاه می‌کنه گواهی‌ها چقدر عمر دارن. وقتی حدود یک‌سوم عمر مونده بود، تمدید می‌کنه. این فاصله مهمه؛ اگه یه بار تمدید شکست بخوره، مثلا مرجع یه لحظه در دسترس نبود، هنوز چند روز وقت هست تا دوباره امتحان کنه.

تمدید خودکار یه دشمن رایج داره؛ تغییرهایی که کسی یادش نیست. مثلا دیوار آتشی که درگاه ۸۰ رو بسته و مرجع دیگه نمی‌تونه فایل معما رو ببینه، یا DNS که به یه سرور دیگه اشاره می‌کنه. برای همین خوبه یه نظارت جدا هم باشه که اگه یه گواهی کمتر از دو هفته عمر داشت، خبر بده. روی هاست‌ها و CDNها معمولا خودشون تمدید می‌کنن و شما کاری ندارید.

فایل‌های گواهی

اگه یه بار گواهی رو دستی گرفته باشید، با چند تا فایل با پسوندهای عجیب روبه‌رو شدید. اولش یه فایل CSR می‌سازید، کوتاه‌شده‌ی Certificate Signing Request، یعنی «درخواست امضای گواهی»؛ یه فایل که کلید عمومی و اسم دامنه توشه، و برای مرجع می‌فرستید. کلید خصوصی همون موقع روی سرور ساخته می‌شه و همون‌جا می‌مونه؛ مرجع هیچ‌وقت لازمش نداره.

مرجع در جواب، گواهی و زنجیره رو می‌ده. رایج‌ترین قالب این فایل‌ها PEM‌ئه؛ یه فایل متنی که با خط «BEGIN CERTIFICATE» شروع می‌شه، با پسوندهایی مثل crt یا pem. کلید خصوصی هم یه فایل PEM جداست، معمولا با پسوند key. بعضی سرورها، مخصوصا روی ویندوز، یه قالب دیگه می‌خوان به اسم PFX، که گواهی و زنجیره و کلید خصوصی رو با هم، با یه رمز، توی یه فایل می‌ذاره. با ACME، هیچ‌کدوم از این کارها رو دستی انجام نمی‌دید؛ برنامه همه رو می‌سازه و سر جاش می‌ذاره.

چند سایت روی یه آدرس

یه سرور می‌تونه صدها سایت رو روی یه آدرس IP نگه داره. ولی وقتی مرورگر وصل می‌شه، سرور از کجا بدونه کارت کدوم سایت رو نشون بده؟ پیش از رمز شدن ارتباط، مرورگر اسم سایتی که می‌خواد رو می‌گه. به این می‌گن SNI، کوتاه‌شده‌ی Server Name Indication، یعنی «اعلام اسم سرور».

امروز همه‌ی مرورگرها SNI رو دارن، و برای همین هر سایتی می‌تونه گواهی خودش رو داشته باشه، حتی روی هاست اشتراکی. یه پیامدش اینه که اسم سایتی که می‌رید، پیش از رمز شدن، تا الان برای مسیر قابل دیدن بوده؛ نسخه‌های جدید یه راه دارن که همین اسم رو هم رمز کنن، که کم‌کم داره جا می‌افته.

گواهی پشت CDN

خیلی از سایت‌ها پشت یه CDN یا یه سپر امنیتی‌ان. اینجا ارتباط دو تیکه‌ست؛ از مرورگر تا CDN، و از CDN تا سرور شما. قفلی که کاربر می‌بینه، فقط تیکه‌ی اول رو نشون می‌ده. گواهیش هم معمولا مال خود CDN‌ئه.

تله اینجاست که بعضی CDNها یه حالت «انعطاف‌پذیر» دارن که تیکه‌ی دوم رو بی رمز می‌ذاره. کاربر قفل رو می‌بینه و فکر می‌کنه همه‌چیز امنه، ولی داده از CDN تا سرور شما بی رمز می‌ره. درستش اینه که روی سرور خودتون هم گواهی باشه و CDN روی حالت «کامل و سفت» باشه؛ یعنی تیکه‌ی دوم هم رمز بشه و CDN گواهی سرور شما رو هم بسنجه. بعضی CDNها برای این تیکه گواهی مخصوص و بلندعمر خودشون رو می‌دن که فقط خود CDN قبولش داره.

دیدن کارت

هر وقت خواستید کارت یه سایت رو ببینید، روی نشونه‌ی کنار آدرس توی مرورگر بزنید. یه گزینه هست که می‌گه ارتباط امنه، و داخلش گزینه‌ی دیدن گواهی. اونجا اسم‌های روی کارت، صادرکننده، تاریخ شروع و پایان، و زنجیره رو می‌بینید.

برای سرور، ابزار خط فرمان openssl همین رو نشون می‌ده. دستوری مثل openssl s_client -connect example.com:443 -servername example.com وصل می‌شه و کل زنجیره رو چاپ می‌کنه. یه سری ابزار آنلاین هم هست که گواهی سایت شما رو از بیرون می‌سنجن و می‌گن زنجیره کامله یا نه، چه نسخه‌هایی از TLS روشنه، و چه تنظیم ضعیفی دارید.

خطاها

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

دومیش اسم نادرست؛ اسمی که زدید روی کارت نیست. مثلا گواهی برای example.com گرفتید، ولی کسی www.example.com رو زده و www توی فهرست نیست. سومیش صادرکننده‌ی نامعتبر؛ زنجیره ناقصه، یا گواهی رو خودتون ساختید و مهر هیچ مرجعی روش نیست. به این آخری می‌گن «خودامضا»؛ برای آزمایش روی سرور خودتون خوبه، برای سایت عمومی هیچ‌وقت.

و چهارمیش، وقتی گواهی باطل شده. این‌ها همه یه چیز مشترک دارن؛ اگه کاربر روی «ادامه» بزنه، دیگه هیچ تضمینی نیست که با سایت واقعی حرف می‌زنه. برای همین هیچ‌وقت به کسی نگید «این هشدار رو رد کن».

محتوای مختلط

گاهی سایت گواهی درست داره، ولی قفل کامل نیست یا یه عکس نشون داده نمی‌شه. دلیلش معمولا «محتوای مختلط»‌ئه؛ صفحه با HTTPS باز شده، ولی یه عکس، یه فایل یا یه اسکریپت هنوز با آدرس http قدیمی صدا زده می‌شه.

اون تیکه از راه باز میاد، و کسی که وسط راهه می‌تونه عوضش کنه. مرورگرها امروز اسکریپت‌ها و فایل‌های خطرناک مختلط رو کلا بلاک می‌کنن، و برای عکس‌ها یا خودشون آدرس رو به https تبدیل می‌کنن یا اگه نشد، نشونش نمی‌دن. این اتفاق معمولا بعد از جابه‌جا کردن یه سایت قدیمی به HTTPS پیش میاد، که آدرس‌های http توی متن نوشته‌ها و تنظیمات مونده. راه حلش پیدا کردن و عوض کردن همه‌ی اون آدرس‌ها به https‌ئه.

HSTS

وقتی کسی آدرس سایت رو بی https می‌زنه، اولین درخواست با http بی رمز می‌ره، و سرور به https می‌فرستدش. همین یه لحظه‌ی اول، یه پنجره‌ی کوچیک برای حمله‌ست. HSTS، کوتاه‌شده‌ی HTTP Strict Transport Security، یعنی «امنیت سفت جابه‌جایی»، این پنجره رو می‌بنده.

سایت با یه سرآیند به مرورگر می‌گه «تا فلان مدت، مثلا یه سال، هیچ‌وقت با من بی رمز حرف نزن». از اون به بعد، مرورگر حتی اگه کاربر http بزنه، خودش https می‌کنه، و اگه گواهی مشکل داشته باشه، اجازه‌ی رد کردن هشدار رو هم نمی‌ده. یه قدم بالاتر هم هست؛ فهرستی که توی خود مرورگرها نوشته شده، و دامنه‌های توش از همون بار اول فقط با https باز می‌شن.

HSTS رو با احتیاط روشن کنید؛ اگه یه زیردامنه هنوز https نداره و HSTS برای همه‌ی زیردامنه‌ها روشن بشه، اون زیردامنه برای بازدیدکننده‌هاتون تا پایان اون مدت باز نمی‌شه.

کلید خصوصی

همه‌ی امنیت SSL به یه فایل بنده؛ کلید خصوصی. هر کسی که این فایل رو داشته باشه، با گواهی شما می‌تونه خودش رو جای سایت شما جا بزنه. پس این فایل فقط روی سروری باشه که لازمش داره، فقط کاربر مدیر سرور بتونه بخونتش، و هیچ‌وقت توی ایمیل، چت، پیام یا مخزن کد نره.

یه اشتباه رایج اینه که کسی برای «نصب SSL» کلید خصوصی رو برای یه نفر دیگه می‌فرسته. اگه این کار شد، اون کلید رو سوخته حساب کنید؛ یه جفت کلید تازه بسازید، گواهی تازه بگیرید و گواهی قبلی رو باطل کنید. با ACME این کار چند دقیقه‌ست.

کارت دزدیده‌شده

اگه کلید خصوصی لو بره، باید به مرجع بگید گواهی رو «باطل» کنه. مرجع اسم گواهی رو توی یه فهرست باطل‌شده‌ها می‌ذاره. مشکل اینه که مرورگرها همیشه این فهرست‌ها رو نگاه نمی‌کنن؛ چون نگاه کردن به هر فهرست، باز شدن هر سایت رو کند می‌کنه، و اگه فهرست در دسترس نباشه، مرورگر معمولا بی‌خیال می‌شه.

برای همین باطل کردن هیچ‌وقت خوب کار نکرده، و یکی از دلیل‌های اصلی کوتاه شدن عمر گواهی‌ها همینه. وقتی یه گواهی فقط ۴۷ روز عمر داره، اگه دزدیده بشه، دزد حداکثر چند هفته وقت داره، نه چند سال. مرورگرها هم کم‌کم به‌جای پرسیدن از مرجع‌ها، فهرست‌های فشرده‌ی باطل‌شده‌ها رو خودشون مرتب به‌روز می‌کنن.

فهرست عمومی

از حدود ۲۰۱۸، هر گواهی که یه مرجع صادر می‌کنه، باید توی چند تا دفتر عمومی ثبت بشه که هر کسی می‌تونه بخونه، وگرنه مرورگرها قبولش نمی‌کنن. به این می‌گن CT، کوتاه‌شده‌ی Certificate Transparency، یعنی «شفافیت گواهی».

فایده‌ش برای شما اینه که می‌تونید توی این دفترها جستجو کنید و ببینید چه گواهی‌هایی برای دامنه‌ی شما صادر شده. اگه گواهی‌ای دیدید که خودتون نگرفتید، یعنی یه جای کار می‌لنگه؛ یا یه نفر توی تیم بی خبر گرفته، یا کسی کنترل دامنه رو به دست آورده. یه نکته‌ی دیگه هم داره؛ چون همه‌ی گواهی‌ها عمومی‌ان، اسم زیردامنه‌هاتون هم عمومیه. پس هیچ‌وقت چیز محرمانه رو با پنهون نگه داشتن اسم زیردامنه امن نکنید.

فقط این صادرکننده

صدها مرجع توی فهرست مرورگرها هستن، و هر کدوم از نظر فنی می‌تونن برای دامنه‌ی شما گواهی بدن. برای اینکه این رو محدود کنید، یه رکورد DNS هست به اسم CAA، کوتاه‌شده‌ی Certification Authority Authorization، یعنی «اجازه‌ی مرجع صدور». توی این رکورد می‌نویسید فقط کدوم مرجع‌ها اجازه دارن برای دامنه‌ی شما گواهی بدن.

مرجع‌ها موظفن پیش از صدور این رکورد رو نگاه کنن. اگه اسم خودشون توش نباشه، گواهی نمی‌دن. این یه قفل اضافه‌ی ساده و رایگانه، که چند دقیقه تنظیمش طول می‌کشه. فقط یادتون باشه اگه یه روز مرجعتون رو عوض کردید، این رکورد رو هم عوض کنید، وگرنه تمدید خودکار شکست می‌خوره.

جنس کلیدها

کلیدهای SSL دو جنس رایج دارن. RSA، که از اسم سه سازنده‌ش اومده، قدیمی‌تره و همه‌جا کار می‌کنه؛ کلیدهاش معمولا ۲۰۴۸ بیتی‌ان. ECDSA، کوتاه‌شده‌ی Elliptic Curve Digital Signature Algorithm، یعنی «الگوریتم امضای دیجیتال با منحنی بیضوی»، جدیدتره؛ با کلیدی خیلی کوتاه‌تر، مثلا ۲۵۶ بیت، همون امنیت رو می‌ده، و امضاها سریع‌تر و کوچیک‌ترن.

برای یه سایت امروزی، ECDSA انتخاب خوبیه؛ وصل شدن یه کم سریع‌تره، مخصوصا روی سرورهای شلوغ. بعضی سرورها هر دو رو با هم دارن، و به هر مرورگر اونی رو می‌دن که بلده. این جنس کلیدها با نوع گواهی (DV، OV، EV) کاری نداره؛ هر نوعی می‌تونه هر جنسی باشه.

رمزهای آینده

دانشمندها سال‌هاست روی کامپیوترهای کوانتومی کار می‌کنن؛ کامپیوترهایی که اگه به اندازه‌ی کافی بزرگ بشن، می‌تونن ریاضی پشت کلیدهای RSA و ECDSA رو بشکنن. هنوز چنین کامپیوتری نیست، ولی یه نگرانی هست؛ کسی می‌تونه ارتباط‌های رمزشده‌ی امروز رو ضبط کنه و ده سال بعد، با یه کامپیوتر کوانتومی، بازشون کنه.

برای همین از ۲۰۲۴، مرورگرها و سرورهای جدید توی TLS ۱٫۳ یه روش ساختن کلید رو روشن کردن که ترکیبی از روش معمولی و یه روش تازه‌ی مقاوم در برابر کوانتومه. این تیکه به گواهی شما ربطی نداره و با به‌روز نگه داشتن وب‌سرور خودش روشن می‌شه. گواهی‌های مقاوم در برابر کوانتوم هم دارن ساخته می‌شن، ولی هنوز سایت‌ها ازشون استفاده نمی‌کنن.

SSL و گوگل

گوگل از اوت ۲۰۱۴ اعلام کرد HTTPS یه نشونه‌ی کوچیک توی رتبه‌بندیه. نشونه‌ی کوچیکیه؛ یه سایت بی HTTPS با محتوای عالی، هنوز می‌تونه بالا بیاد. ولی از ژوئیه‌ی ۲۰۱۸، مرورگر خود گوگل کنار آدرس هر سایت بی HTTPS می‌نویسه «ناامن»، و این خیلی بیشتر از رتبه اثر داره؛ آدم‌ها از سایتی که «ناامن» نوشته، خرید نمی‌کنن.

موقع رفتن از http به https، همه‌ی آدرس‌های قدیمی باید با انتقال دائمی (کد ۳۰۱) به آدرس https همون صفحه برن، تا رتبه‌ها منتقل بشن. نسخه‌ی https رو توی سرچ کنسول هم اضافه کنید و نقشه‌ی سایت رو با آدرس‌های تازه بفرستید.

کمی تاریخ

SSL رو یه شرکت مرورگرساز اواسط دهه‌ی ۹۰ ساخت، تا خرید اینترنتی ممکن بشه. نسخه‌ی ۱ هیچ‌وقت منتشر نشد، چون ایرادهای زیادی داشت. نسخه‌ی ۲ سال ۱۹۹۵ اومد، و نسخه‌ی ۳ سال ۱۹۹۶. بعد ساختنش به یه گروه استاندارد بین‌المللی سپرده شد، و اسمش شد TLS. نسخه‌ی ۱٫۰ TLS سال ۱۹۹۹، ۱٫۱ سال ۲۰۰۶، ۱٫۲ سال ۲۰۰۸ و ۱٫۳ اوت ۲۰۱۸ اومد.

SSL نسخه‌ی ۳ سال ۲۰۱۴ با یه حمله‌ی معروف کامل شکست و کنار رفت. TLS ۱٫۰ و ۱٫۱ هم حدود ۲۰۲۰ از مرورگرها برداشته شدن و سال ۲۰۲۱ رسما کنار گذاشته شدن. امروز فقط TLS ۱٫۲ و ۱٫۳ باید روی سرور شما روشن باشن. ۱٫۳ سریع‌تره، چون وصل شدن رو با یه رفت و برگشت کمتر انجام می‌ده، و همه‌ی روش‌های قدیمی و ضعیف رو کلا برداشته.

تمرین

  1. کارت سایت خودتون رو توی مرورگر باز کنید و ببینید کی صادر شده، کی تموم می‌شه، و چه اسم‌هایی روشه.
  2. توی یه دفتر CT اسم دامنه‌تون رو جستجو کنید و ببینید چند تا گواهی براش صادر شده.
  3. یه بار آدرس سایتتون رو با http بزنید و ببینید به https می‌ره یا نه.

اشتباه‌های رایج

  • «گواهی پولی امن‌تره.» رمزنگاری رایگان و پولی یکیه؛ فرق توی بررسی و پشتیبانیه.
  • «قفل یعنی سایت قابل اعتماده.» قفل فقط می‌گه با همون دامنه حرف می‌زنید؛ سایت کلاهبرداری هم می‌تونه گواهی داشته باشه.
  • «گواهی رو یه بار نصب کنیم، تمومه.» عمرش حداکثر ۲۰۰ روزه و داره کوتاه‌تر می‌شه؛ تمدید خودکار لازمه.
  • «کارت سایت کافیه، میانی لازم نیست.» روی بعضی گوشی‌ها خطا می‌ده؛ زنجیره‌ی کامل رو بذارید.
  • «کلید خصوصی رو بفرستم تا نصب کنن.» کلیدی که از سرور بیرون رفت، سوخته‌ست.

جمع‌بندی. آنچه از این درس با خودتان می‌برید.

  • SSL اسم قدیمی TLS‌ئه؛ هنوز همه به گواهی‌ها می‌گن «گواهی SSL».
  • گواهی دو تا کار می‌کنه؛ ثابت می‌کنه سایت همونه، و راه رمز کردن ارتباط رو باز می‌کنه.
  • مرورگر به چند تا صادرکننده‌ی ریشه اعتماد داره، و هر گواهی باید با یه زنجیره به یکی از اون‌ها برسه.
  • عمر گواهی‌ها داره کوتاه می‌شه؛ از ۲۰۰ روز در ۲۰۲۶ تا ۴۷ روز در ۲۰۲۹، پس تمدید خودکار لازمه.
  • کلید خصوصی هیچ‌وقت نباید از سرور بیرون بره.

خودتون رو بسنجید

۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخرش فقط کارنامه رو می‌بینید: چند تا درست، چند تا نادرست.

خودتون رو بسنجید

۱۵ پرسش

  • هر بار پرسش‌ها و ترتیب گزینه‌ها عوض می‌شه.
  • تا آخر نمی‌گیم کدوم جواب درست بوده؛ می‌تونید برگردید و جوابتون رو عوض کنید.
  • آخرش کارنامه می‌گیرید: چند تا درست، چند تا نادرست.
  • اگه وسطش بستید، دوباره که باز کنید از همون‌جا ادامه می‌دید.

فصل‌های این درس