گواهی SSL چیست و چرا سایت بدون آن ناامن است؟

یاسین
1405/7/6
14 دقیقه
97 بازدید
گواهی SSL چیست و چرا سایت بدون آن ناامن است؟

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

گواهی SSL چیست و دقیقا چه کاری انجام می دهد؟

گواهی SSL یک فایل دیجیتال است که روی سرور نصب می شود و یک مرجع صدور گواهی (CA) آن را امضا کرده است. این فایل سه کار می کند. اول رمزنگاری: هر چیزی که کاربر در سایت تایپ می کند با کلید مشترک رمز می شود و در مسیر قابل خواندن نیست. دوم احراز هویت: مرورگر امضای گواهی را با فهرست مراجع معتبر تطبیق می دهد تا مطمئن شود با سرور واقعی همان دامنه حرف می زند، نه با یک سرور جعلی. سوم یکپارچگی: اگر کسی در مسیر داده ها را تغییر بدهد، همان لحظه مشخص می شود.

نکته نام گذاری: SSL نسخه قدیمی این فناوری است و امروز TLS جای آن را گرفته؛ نسخه های SSL 2 و SSL 3 سال هاست بازنشسته شده اند. ولی چون نام SSL جا افتاده، همه از همان استفاده می کنند و شما هم وقتی «گواهی SSL» می خرید در واقع یک گواهی TLS می گیرید. این تفاوت اسمی هیچ مشکلی ایجاد نمی کند و روی اعتبار گواهی اثری ندارد.

داخل هر گواهی چهار چیز نوشته شده است: نام دامنه (و زیر دامنه هایی که پوشش می دهد)، نام صادرکننده، بازه اعتبار و کلید عمومی. مرورگر همین چهار مورد را می خواند تا قفل کنار آدرس را نشان بدهد یا هشدار بدهد.

در دو دقیقه بفهمید سایت خودتان گواهی سالم دارد یا نه

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

openssl s_client -connect yoursite.ir:443 -servername yoursite.ir -showcerts < /dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates

در خروجی به این خط ها نگاه کنید: subject همان دامنه گواهی است، issuer مرجع صادرکننده، notBefore شروع اعتبار و notAfter پایان اعتبار. اگر notAfter نزدیک است، گواهی خودکار تمدید نشده و سایت شما چند روز دیگر هشدار می دهد.

دستور دوم نشان می دهد گواهی برای چه دامنه هایی صادر شده است. این مورد بیشتر از آنچه فکر می کنید مشکل ساز است؛ اگر سایت شما هم با www و هم بدون www باز می شود، هر دو باید در همین فهرست باشند.

openssl s_client -connect yoursite.ir:443 -servername yoursite.ir -showcerts < /dev/null 2>/dev/null | openssl x509 -noout -ext subjectAltName

دستور سوم نسخه پروتکل و الگوریتم رمزنگاری را نشان می دهد. چیزی که امروز سالم حساب می شود TLS 1.2 و TLS 1.3 است؛ اگر نسخه پایین تر دیدید، سرور قدیمی است.

openssl s_client -connect yoursite.ir:443 -servername yoursite.ir < /dev/null 2>/dev/null | grep -E "New,|Cipher is|Verify return code"

برای اینکه خروجی را در عمل ببینید، همین چهار دستور را امروز روی سایت خودمان (codeyas.com) اجرا کردم. نتیجه اش این است:

subject=CN = cpcontacts.codeyas.com / SAN: codeyas.com, www.codeyas.com (۱۰ نام دامنه) issuer=C = US, O = Let's Encrypt, CN = YR1 notBefore=Sep 21 09:50:05 2026 GMT notAfter=Dec 20 09:50:04 2026 GMT Verify return code: 0 (ok) chain: 3 certificates New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384

ترجمه این خروجی: گواهی از Let's Encrypt و از نوع DV است، ۹۰ روز اعتبار دارد (از ۲۱ سپتامبر تا ۲۰ دسامبر ۲۰۲۶)، ده نام دامنه را پوشش می دهد، زنجیره سه تایی درست فرستاده می شود و اتصال روی TLS 1.3 بسته می شود. با دستور checkend هم سنجیدم: بیش از ۸۰ روز اعتبار باقی است و کمتر از ۹۰ روز، یعنی چرخه تمدید خودکار سر جایش است.

خلاصه این پنج سنجش در یک جدول:

چه چیزی را بسنجیمنتیجه سالمنشانه مشکل
بازه اعتباربیش از سی روز تا انقضاکمتر از ۱۴ روز یا تاریخ گذشته
فهرست دامنه هاهمه نسخه های سایت در SAN هستندیک نسخه جا افتاده است
زنجیره گواهیدو گواهی یا بیشترفقط یک گواهی (میانی ناقص)
نسخه پروتکلTLS 1.2 و TLS 1.3SSL 3 یا TLS 1.0
کد بازبینیVerify return code: 0کد خطای غیر از صفر

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

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

چرا سایت بدون گواهی ناامن است؟ پنج اتفاق واقعی

۱. شنود رمز عبور روی شبکه باز. وقتی سایت http است، همه چیز بین مرورگر و سرور متن ساده است. روی وای فای یک کافه، روی شبکه یک اداره یا هر مسیری که از ابزار شنود رد می شود، متن ساده خوانده می شود. این نوع حمله نام دارد: مرد میانی یا Man in the Middle. مهاجم لازم نیست هکر حرفه ای باشد؛ یک ابزار آماده کافی است.

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

۳. برچسب ناامن مرورگر. کروم و فایرفاکس روی سایت http کنار آدرس، عبارت «ناامن» یا Not secure نشان می دهند و روی فرم ورود و پرداخت هشدار می دهند. نتیجه عملی این است که بخشی از کاربران فرم را پر نمی کنند. این هزینه از هر بحث فنی سنگین تر است.

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

۵. امکانات مرورگر که فقط روی https کار می کنند. بخشی از قابلیت های وب امروز به شرط امن بودن صفحه فعال می شوند: گرفتن موقعیت مکانی، دسترسی به کلیپ بورد، اعلان های مرورگر، نصب اپلیکیشن از روی سایت و سرویس ورکر برای کار کردن سایت بدون اینترنت. روی http این ها خاموش اند.

پنج خطای رایج مرورگر و معنای دقیق شان

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

پیام مرورگرمعنای دقیقکاری که باید انجام شود
NET::ERR_CERT_DATE_INVALIDگواهی منقضی شده یا ساعت سرور غلط استتمدید خودکار را فعال کنید؛ ساعت سرور را چک کنید
NET::ERR_CERT_COMMON_NAME_INVALIDدامنه ای که کاربر زده در گواهی نیست (مثلا نسخه www)گواهی را برای هر دو نسخه بگیرید یا هدایت ۳۰۱ بگذارید
NET::ERR_CERT_AUTHORITY_INVALIDگواهی خودامضا است یا زنجیره میانی ناقص استگواهی معتبر نصب کنید و زنجیره کامل را بفرستید
ERR_SSL_PROTOCOL_ERRORسرور روی آن پورت با پروتکل امن حرف نمی زندپورت و پیکربندی وب سرور را بررسی کنید
هشدار محتوای ترکیبی (Mixed Content)صفحه https است ولی منبعی با http بار می شودآدرس منابع را https کنید

محتوای ترکیبی شایع ترین اشتباه بعد از نصب گواهی است، چون سایت باز می شود و همه چیز سالم به نظر می رسد؛ فقط کنار آدرس، قفل نیست. علتش معمولا یک عکس قدیمی، یک فونت یا یک اسکریپت آمارگیری است که آدرسش با http مانده است. پاک کردن آن ها هم روی امنیت اثر دارد و هم روی سرعت صفحه، چون مرورگر دیگر لازم نیست اتصال ناامن بسازد.

یک نکته فنی که به کار سایت شما می آید: پروتکل HTTP/2 و نسخه جدیدتر آن فقط روی اتصال امن کار می کنند. یعنی اگر سایت http داشته باشد، از مزیت سرعت این نسخه ها هم محروم است. اگر دنبال کندی سایت هستید، ترتیب کار درست این است: اول https، بعد سنجش سرعت سایت با یک دستور واقعی و بعد بهینه سازی تصاویر و کش.

سه کارت خالی در کنار یک کلید روی میز چوبی؛ نشانه سه سطح گواهی DV و OV و EV
هر سه سطح گواهی یک رمزنگاری دارند؛ تفاوت شان در میزان تایید هویت است، نه در قدرت قفل.

انواع گواهی SSL؛ برای سایت خودتان کدام را انتخاب کنید؟

همه گواهی ها یک سطح رمزنگاری دارند؛ تفاوت اصلی در میزان تایید هویت و تعداد دامنه هایی است که پوشش می دهند. جدول زیر تصمیم را ساده می کند.

نوع گواهیچه چیزی تایید می شودزمان صدورمناسب برای
DV (اعتبارسنجی دامنه)فقط مالکیت دامنهدقیقه تا چند ساعتبلاگ، سایت شرکتی، بیشتر کسب و کارهای کوچک
OV (اعتبارسنجی سازمان)مالکیت دامنه + هویت حقوقی کسب و کارچند روز کاریشرکت ها و فروشگاه هایی که مشتری دنبال نام رسمی است
EV (اعتبارسنجی گسترده)بررسی کامل و سخت گیرانه سازمانچند روز کاریبانک، خدمات مالی و سازمان های بزرگ
Wildcardدامنه اصلی + همه زیر دامنه ها با یک گواهیبسته به سطح تاییدسایتی که پنل، بلاگ و فروشگاه روی زیر دامنه دارد
Multi-Domainچند دامنه مستقل در یک گواهیبسته به سطح تاییدچند برند یا چند دامنه زیر یک مدیریت

یک نکته که در متن های فارسی کمتر گفته می شود: سطح رمزنگاری DV و OV و EV یکی است. تفاوت در میزان تایید هویت سازمان و ضمانت صادرکننده است. یعنی یک سایت شرکتی با گواهی DV امن است؛ آنچه OV اضافه می کند اعتماد نام تجاری است، نه رمزنگاری قوی تر.

گواهی رایگان یا پولی؟ مقایسه صادقانه

گواهی های Let's Encrypt رایگان اند، سطح رمزنگاری شان با گواهی های تجاری یکی است و مرورگرها هم آن ها را معتبر می شناسند. اعتبارشان ۹۰ روز است و برای همین باید تمدید خودکار داشته باشند؛ همین کوتاهی عمر، دلیل امن تر بودن شان است.

گواهی پولی چه چیزی اضافه می کند؟ سه چیز: امکان تایید هویت سازمانی (همان OV و EV)، ضمانت مالی صادرکننده و پشتیبانی انسانی وقتی چیزی خراب می شود. اگر سایت شما فروشگاهی بزرگ یا برند شناخته شده نیست، گواهی رایگان پاسخ کامل است.

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

روی وردپرس، نصب و تمدید گواهی معمولا در پنل هاست انجام می شود و کار برنامه نویس نیست. اگر روی هاست اشتراکی هستید، بخش AutoSSL در سی پنل گواهی را خودش صادر و تمدید می کند. جزئیات این تنظیمات در راهنمای هاست وردپرسی و مشخصات لازم آن آمده است؛ و اگر هنوز نوع میزبانی خود را انتخاب نکرده اید، هاست چیست و چه انواعی دارد انتخاب را ساده تر می کند.

چه زمانی گواهی پولی واقعا می ارزد؟

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

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

بعد از نصب گواهی، این پنج چیز را چک کنید

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

۱. هدایت http به https. اگر کسی آدرس را بدون https بزند باید با کد ۳۰۱ به نسخه امن برود. کد ۳۰۱ یعنی هدایت دائم و اعتبار را کامل منتقل می کند؛ کد ۳۰۲ برای این کار مناسب نیست.

curl -I http://yoursite.ir/

۲. یک نسخه واحد برای www و بدون www. هر دو آدرس باید به یک نسخه https برسند، وگرنه گوگل دو صفحه جدا می بیند و اعتبار بین آن ها تقسیم می شود.

curl -I https://yoursite.ir/ ; curl -I https://www.yoursite.ir/

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

openssl s_client -connect yoursite.ir:443 -servername yoursite.ir -showcerts < /dev/null 2>/dev/null | grep -c "BEGIN CERTIFICATE"

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

curl -s https://yoursite.ir/ | grep -oicE 'src="http://|href="http://'

۵. هدر HSTS. این هدر به مرورگر می گوید دیگر حتی اجازه تلاش با http را هم نده و مستقیم به https برو. نبودنش خطای فوری نیست، ولی لایه بعدی امنیت است و روی سایت هایی که فرم پرداخت دارند توصیه می شود.

curl -sI https://yoursite.ir/ | grep -i strict-transport-security

هر پنج مورد را روی سایت خودمان سنجیدم: هدایت پورت ۸۰ جواب ۳۰۱ با مقصد https می دهد، در یکی از مقاله ها هیچ منبع http وجود ندارد (شمارش صفر)، زنجیره سه گواهی می فرستد، اما هدر HSTS روی سایت نبود. یعنی سایت امن است ولی یک لایه توصیه شده کم دارد که در فهرست کارهای فنی ما ثبت شده است.

روی وردپرس دو کار کوچک هم لازم است تا هیچ صفحه ای بدون https نمایش داده نشود و پس از ورود مدیر هم آدرس امن بماند. این خط به فایل wp-config.php اضافه می شود:

define("FORCE_SSL_ADMIN", true);

و برای وب سرور، هدایت دائم را یک بار برای همیشه ثبت کنید. در nginx یک بلوک کوتاه کافی است و در آپاچی همان یک خط Redirect کار را انجام می دهد:

server { listen 80 default_server; server_name yoursite.ir www.yoursite.ir; return 301 https://yoursite.ir$request_uri; }
Redirect permanent / https://yoursite.ir/
رک سرور با کابل های منظم و یک قفل بسته روی درب؛ تمدید خودکار گواهی بخشی از نگهداری سرور است
تمدید خودکار یعنی هیچ روزی سایت با هشدار امنیتی به دست کاربر نمی رسد.

تمدید گواهی را خودکار کنید تا سایت یک روز از دست نرود

گواهی منقضی، هشدار تمام صفحه برای کاربر است و همان یک روز می تواند چند مشتری را برگرداند. اگر گواهی رایگان Let's Encrypt دارید، ابزار certbot تمدید را خودکار می کند. اول با حالت آزمایشی مطمئن شوید مسیر تمدید کار می کند:

certbot renew --dry-run

و سپس یک کار زمان بندی ساده اضافه کنید تا هر شب بررسی شود و فقط وقتی لازم بود تمدید کند:

0 3 * * * /usr/bin/certbot renew --quiet

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

گواهی SSL و سئو؛ اثر واقعی چقدر است؟

گوگل از سال ۲۰۱۴ اعلام کرده https یکی از سیگنال های رتبه بندی است، ولی خودش هم گفته این سیگنال سبک است؛ پس انتظار نداشته باشید نصب گواهی رتبه را چند پله بالا ببرد. اثر واقعی جای دیگری است: برچسب ناامن کنار نتیجه شما در ذهن کاربر، کلیک و فروش را کم می کند. یک نکته مهاجرت هم مهم است: در انتقال از http به https همه نسخه های آدرس باید با کد ۳۰۱ به یک نسخه امن بروند، وگرنه اعتبار صفحات بین دو نسخه تقسیم می شود.

جمع بندی؛ سه قدم برای امروز

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

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

اشتراک‌گذاری مقاله:

سوالات متداول

نظرات کاربران

ارسال نظر جدید

حداقل ۱۰ و حداکثر ۱۰۰۰ کاراکتر

هنوز نظری ثبت نشده است

اولین نفری باشید که دیدگاه خود را می‌نویسد!

مطالب مرتبط

مقالات مشابه که ممکن است برایتان جالب باشد