| TESTSSL(1) | General Commands Manual | TESTSSL(1) |
نام (NAME)
testssl
نام (NAME)
testssl.sh - بررسی رمزنگاری سرورهای SSL/TLS
خلاصه دستور (SYNOPSIS)
testssl.sh [OPTIONS] <URI>, testssl.sh [OPTIONS] --file <FILE>
یا
testssl.sh [BANNER OPTIONS]
توضیحات (DESCRIPTION)
برنامه testssl.sh یک ابزار خط فرمانی رایگان است که سرویس یک سرور را روی هر پورتی از نظر پشتیبانی از رمزهای TLS/SSL، پروتکلها و همچنین آسیبپذیریهای رمزنگاری و موارد دیگر بررسی میکند.
خروجی، یافتهها را بر اساس رنگ (صفحه نمایش) یا شدت اهمیت (خروجی فایل) رتبهبندی میکند تا بتوانید خوب یا بد بودن وضعیت را تشخیص دهید. خروجی (صفحه نمایش) چندین بخش دارد که در آنها دستهبندیهای مختلفی از بررسیها انجام میشود. برای تسهیل خوانایی روی صفحه نمایش، خروجی بهطور مناسب تراز و دارای تورفتگی میشود.
نتیجه تنها توسط شما دیده میشود. همچنین میتوانید از آن به صورت داخلی در شبکه محلی (LAN) خود استفاده کنید. به جز پرسوجوهای DNS یا مگر اینکه به testssl.sh دستور دهید ابطال گواهیها را بررسی کند، از هیچ میزبان دیگر یا شخص ثالثی برای هیچ آزمایشی استفاده نمیکند.
پیشنیازها (REQUIREMENTS)
ابزار testssl.sh به صورت پیشفرض و بدون نیاز به دستکاری قابلحمل (portable) است: روی هر پشتهٔ شبهیونیکس از جمله Linux، *BSD، MacOS X، WSL (زیرسیستم ویندوز برای لینوکس)، Cygwin و MSYS2 اجرا میشود. پوستهٔ bash یک پیشنیاز است و نسخهٔ ۳ نیز همچنان پشتیبانی میشود. ابزارهای استانداردی مانند awk، sed، tr و head نیز مورد نیاز هستند. این ابزارها میتوانند از نسخهٔ BSD، System 5 یا GNU باشند، اگرچه grep از System V هنوز پشتیبانی نمیشود.
هر نسخهای از OpenSSL یا LibreSSL به عنوان یک ابزار کمکی مورد نیاز است. برخلاف نسخههای پیشین testssl.sh، تقریباً تمام بررسیها از طریق سوکتهای (TCP) انجام میشوند. علاوه بر این، باینریهای OpenSSL با پیوند ایستا (statically linked) برای سیستمعاملهای اصلی در مسیر ./bin/ ارائه شدهاند.
کلیات (GENERAL)
اجرای testssl.sh URI به عنوان فراخوانی پیشفرض، اصطلاحاً «اجرای پیشفرض» (default run) را انجام میدهد که تعدادی از بررسیها را انجام داده و نتایج را بهصورت رنگی (ANSI و termcap) روی صفحه نمایش چاپ میکند. این دستور تمام بررسیهای ذکر شده در زیر به جز -E را به ترتیب زیر انجام میدهد:
۰) یک بنر را نمایش میدهد (به زیر مراجعه کنید)، یک جستجوی DNS برای آدرسهای IP دیگر انجام میدهد و برای آدرس IP بازگشتی یک جستجوی معکوس (reverse lookup) انجام میدهد. در نهایت، یک بررسی سرویس انجام میشود.
۱) بررسی پروتکلهای SSL/TLS
۲) دستهبندیهای استاندارد سایفر
۳) اولویتهای سایفر سرور (ترتیب سرور؟)
۴) رازداری پیشرو (forward secrecy): سایفرها و منحنیهای بیضوی
۵) پیشفرضهای سرور (اطلاعات گواهی، افزونههای TLS، اطلاعات نشست)
۶) سرایند HTTP (در صورت شناسایی HTTP یا تحمیل آن از طریق --assume-http)
۷) آسیبپذیریها
۸) آزمایش تکتک ۳۷۰ سایفر از پیش پیکربندی شده
۹) شبیهسازی کلاینت
۱۰) رتبهبندی
گزینهها و پارامترها (OPTIONS AND PARAMETERS)
گزینهها به صورت کوتاه یا بلند هستند. هر گزینهٔ کوتاه یا بلندی که به مقدار نیاز دارد را میتوان با یا بدون علامت مساوی فراخوانی کرد؛ مثلاً testssl.sh -t=smtp --wide --openssl=/usr/bin/openssl <URI> (گزینههای کوتاه با علامت مساوی) معادل است با testssl.sh --starttls smtp --wide --openssl /usr/bin/openssl <URI> (گزینهٔ بلند بدون علامت مساوی). برخی از گزینههای خط فرمان را میتوان از طریق متغیرهای محیطی نیز از پیش تنظیم کرد. عبارت WIDE=true OPENSSL=/usr/bin/openssl testssl.sh --starttls=smtp <URI> معادل مثالهای ذکر شده خواهد بود. اولویت خط فرمان همواره بالاتر از متغیرهای محیطی است.
مقدار <URI> یا --file <FILE> همیشه باید آخرین پارامتر باشد.
گزینههای بنر (BANNER OPTIONS)
--help (یا بدون آرگومان) راهنمای خط فرمان را نمایش میدهد.
-b, --banner بنر testssl.sh را شامل پروانه، شرایط استفاده، نسخهٔ testssl.sh، نسخهٔ شناساییشدهٔ openssl، مسیر دسترسی به آن، تعداد سایفرهای openssl، تاریخ ساخت آن و معماری را نمایش میدهد.
-v, --version همانند مورد قبل.
-V [pattern], --local [pattern] تمام سایفرهای محلی پشتیبانیشده توسط نسخهٔ openssl را با قالببندی مرتب چاپ میکند. اگر یک الگو (pattern) ارائه شود، تطابقی (بدون توجه به بزرگی و کوچکی حروف) روی هر یک از رشتههای موجود در خروجی عریض (wide) انجام میدهد؛ به بخش زیر مراجعه کنید. الگو در هر یک از این ستونها جستجو خواهد شد: کد هگزادسیمال (hexcode)، نام مجموعه سایفر (OpenSSL یا IANA)، تبادل کلید، رمزنگاری و بیتها. برای موارد غیرعددی تطابق الگوی کلمه (word pattern match) انجام میدهد و برای اعداد فقط یک تطابق معمولی اعمال میشود. اعداد در اینجا به صورت [0-9,A-F] تعریف میشوند. این بدان معناست که (نکتهٔ مهم) الگوی CBC به عنوان غیرکلمه تطابق داده میشود، اما AES به عنوان کلمه تطابق مییابد. این گزینه همچنین --openssl=<path_to_openssl> را نیز میپذیرد.
پارامترهای ورودی (INPUT PARAMETERS)
مقدار URI میتواند نام میزبان، یک آدرس IPv4 یا IPv6 (محدودیتها در زیر آمده است) یا یک نشانی وب (URL) باشد. آدرسهای IPv6 باید داخل قلاب (کروشه) قرار گیرند. برای هر پارامتر داده شده، پورت ۴۴۳ فرض میشود مگر اینکه با افزودن دو نقطه و شماره پورت مشخص شده باشد. تنها پیشوند مشخصکنندهٔ پروتکل مجاز https است. باید آگاه باشید که بررسی یک آدرس IP ممکن است به میزبان مجازی (vhost) مورد نظر شما اصابت نکند. تفکیک DNS (رکورد A/AAAA) انجام میشود مگر اینکه ورودی برای نام میزبان در /etc/hosts داشته باشید.
گزینهٔ --file <fname> یا معادل آن -iL <fname> گزینههای آزمایش انبوه هستند. این گزینه به صورت پیشفرض به طور ضمنی --warnings batch را فعال میکند، مگر اینکه هشدارها قبلاً خاموش شده باشند. در حالت اول، گزینهٔ آزمایش انبوه خطوط فرمان را از fname میخواند. فایل fname شامل خطوط فرمان testssl است؛ هر خط برای یک نمونه. توضیحات پس از # نادیده گرفته میشوند، EOF پایان fname را اعلام میکند و خطوط بعدی نیز نادیده گرفته خواهند شد. همچنین میتوانید گزینههای اضافی را مشخص کنید که به هر زیرفرآیند به ارث برسد، مثلاً هنگام فراخوانی testssl.sh --wide --log --file <fname>. هر خط منفرد در fname هنگام اجرا تجزیه میشود. اگر گزینهٔ متناقضی وجود داشته باشد و آزمایش انبوه ترتیبی در حال انجام باشد، بررسی در لحظهٔ وقوع متوقف میشود و بسته به گزینهٔ خروجی، ممکن است فایل خروجی بدون پانویس رها شود. در حالت موازی نتایج متفاوت است و احتمالاً آن خط اسکن نخواهد شد.
به عنوان روش جایگزین، fname میتواند در قالب خروجی قابل grep ابزار nmap (گزینهٔ -oG) باشد. فقط پورتهای باز در نظر گرفته میشوند. پورتهای چندگانه در هر خط مجاز هستند. پورتها میتوانند متفاوت باشند و توسط testssl.sh طبق عرف رایج در اینترنت آزمایش خواهند شد؛ یعنی اگر nmap در خروجی خود پورت ۲۵ را باز نشان دهد، به طور خودکار -t smtp قبل از URI اضافه میشود، در حالی که با پورت ۴۶۵ مانند یک پورت مستقیم TLS/SSL رفتار میشود که نیازی به دستتکانی اولیهٔ STARTTLS SMTP ندارد. این کار توسط یک جدول داخلی انجام میشود که پورت بازِ شناساییشده توسط nmap را با تصمیم STARTTLS/متن ساده در testssl.sh تطبیق میدهد.
خروجی Nmap همیشه آدرسهای IP را برمیگرداند و تنها در صورت موجود بودن رکورد PTR DNS، نام میزبان را ارائه میدهد. از آنجا که nmap مطابقت نام میزبان با IP (رکورد A یا AAAA) را بررسی نمیکند، testssl.sh این کار را به صورت خودکار برای شما انجام میدهد. اگر رکورد A مربوط به نام میزبان با آدرس IP مطابقت داشته باشد، به جای آدرس IP از نام میزبان استفاده میشود. لطفاً به یاد داشته باشید که بررسی روی آدرس IP ممکن است به میزبان مجازی مد نظرتان برخورد نکند و در نتیجه ممکن است به نتایج متفاوتی منجر شود.
یک تبدیل داخلی معمول از قالب قابل grep ابزار nmap به قالب فایل testssl.sh میتواند مانند این باشد:
10.10.12.16:443 10.10.12.16:1443 -t smtp host.example.com:25 host.example.com:443 host.example.com:631 -t ftp 10.10.12.11:21 10.10.12.11:8443 لطفاً توجه داشته باشید که fname باید در قالب یونیکس باشد. کاراکترهای بازگشت به ابتدای سطر داس (DOS carriage returns) پذیرفته نمیشوند. به جای سوئیچ خط فرمان، متغیر محیطی FNAME نیز پذیرفته خواهد شد.
--mode <serial|parallel>. آزمایش انبوه به صورت ترتیبی (پیشفرض) یا موازی انجام شود (--parallel میانبری برای دومی است و --serial گزینهٔ مخالف آن است). به طور پیشفرض آزمایش انبوه در حالت ترتیبی (serial) اجرا میشود، یعنی خطوط یکی پس از دیگری پردازش و فراخوانی میشوند. متغیر MASS_TESTING_MODE را میتوان برابر با serial یا parallel تعریف کرد.
--warnings <batch|off>. پارامتر هشدارها تعیین میکند که testssl.sh چگونه با شرایطی که معمولاً ورودی کاربر در آنها لازم است برخورد کند. دو گزینه وجود دارد: batch هنگام برخورد با مشکل سمت کلاینت یا سرور منتظر فشردن کلید تأیید نمیماند؛ از نسخهٔ 3.0 در چنین حالتی صرفاً همان اسکن خاص خاتمه مییابد. این حالت به طور خودکار برای آزمایش انبوه (--file) انتخاب میشود. حالت off هشدار و تأیید را نادیده میگیرد و اسکن را بدون توجه به منطقی بودن یا نبودن آن ادامه میدهد. لطفاً توجه داشته باشید که در برخی تداخلها، testssl.sh همچنان درخواست تأیید خواهد کرد، که این موارد شامل تداخلهایی است که در غیر این صورت تأثیر چشمگیری بر نتایج خواهند گذاشت. تقریباً هر تصمیم دیگری در آینده به عنوان بهترین حدس توسط testssl.sh اتخاذ خواهد شد. همین رفتار را میتوان با تنظیم متغیر محیطی WARNINGS نیز به دست آورد.
--connect-timeout <seconds> این گزینه برای اتصالات سوکت TCP به یک گره کاربرد دارد. اگر گره دستتکانی TCP را تکمیل نکند (مثلاً به دلیل خاموش بودن، قرار داشتن پشت فایروال، وجود یک IDS یا tarpit)، معمولاً ممکن است testssl.sh حدود ۲ دقیقه یا حتی بسیار بیشتر معلق بماند. این پارامتر به testssl.sh دستور میدهد که حداکثر seconds ثانیه برای تکمیل دستتکانی منتظر بماند و سپس انصراف دهد. این گزینه فقط در صورتی کار میکند که باینری timeout روی سیستمعامل شما نصب شده باشد. CONNECT_TIMEOUT متغیر محیطی متناظر با آن است.
--openssl-timeout <seconds> این گزینه به ویژه برای تمام اتصالات با استفاده از openssl و عملاً برای آزمایشهای انبوه مفید است. این گزینه مانع از معلق ماندن اتصال openssl برای حدود ۲ دقیقه میشود. پارامتر مورد انتظار seconds به testssl.sh دستور میدهد که پیش از پایان دادن به اتصال openssl چقدر منتظر بماند. این گزینه فقط در صورتی در دسترس است که سیستمعامل شما دارای باینری timeout نصبشده باشد. با توجه به وجود پیادهسازیهای مختلف از timeout، این ابزار به طور خودکار باینری را با پارامترهای صحیح فراخوانی میکند. OPENSSL_TIMEOUT متغیر محیطی معادل است.
--basicauth <user:pass> این گزینه میتواند برای ارائهٔ اطلاعات احراز هویت پایهای HTTP (Basic Auth) تنظیم شود که در طول بررسی سرایندهای امنیتی استفاده میشوند. BASICAUTH متغیر محیطی است که میتوانید به جای آن استفاده کنید.
--reqheader <header> این گزینه میتواند برای افزودن سرایندهای درخواست HTTP اضافی در قالب صحیح Headername: headercontent استفاده شود. در صورت لزوم این پارامتر را میتوان چندین بار فراخوانی کرد؛ به عنوان مثال: --reqheader 'Proxy-Authorization: Basic dGVzdHNzbDpydWxlcw==' --reqheader 'ClientID: 0xDEADBEAF'. متغیر REQHEADER متغیر محیطی متناظر با آن است.
فراخوانیهای ویژه (SPECIAL INVOCATIONS)
-t <protocol>, --starttls <protocol> یک اجرای پیشفرض را در برابر یک protocol با قابلیت STARTTLS انجام میدهد. پارامتر protocol باید یکی از این موارد باشد: ftp، smtp، pop3، imap، xmpp، sieve، xmpp-server، telnet، ldap، irc، lmtp، nntp، postgres، mysql. برای چهار مورد آخر، مثلاً به OpenSSL ارائهشده یا نسخهٔ 1.1.1 از OpenSSL نیاز دارید. لطفاً توجه داشته باشید: MongoDB اتصال STARTTLS ارائه نمیدهد، IRC در حال حاضر تنها با --ssl-native کار میکند. پشتیبانی از irc در حال توسعه است.
--xmpphost <jabber_domain> یک گزینهٔ اضافی برای XMPP فعالشده با STARTTLS است: این گزینه دامنهٔ jabber را به عنوان پارامتر میپذیرد. این پارامتر فقط زمانی مورد نیاز است که دامنه با URI ارائهشده متفاوت باشد.
--mx <domain|host> تمام رکوردهای MX (شامل STARTTLS روی پورت ۲۵) را از اولویت بالا به پایین، یکی پس از دیگری بررسی میکند.
--ip <ip> به جای تفکیک نام میزبان(ها) در <URI>، آدرس IPv4 یا IPv6 داده شده را آزمایش میکند. آدرسهای IPv6 باید در داخل قلاب قرار داده شوند. --ip=one به این معنی است: فقط اولین رکورد A که DNS برمیگرداند را آزمایش کن (برای IPهای چندگانه مفید است). اگر -6 و --ip=one ارائه شده باشند، در صورت موجود بودن، یک رکورد AAAA انتخاب خواهد شد. گزینهٔ --ip همچنین میتواند زمانی مفید باشد که بخواهید نام میزبان داده شده را به IP متفاوتی تفکیک کنید، مشابه اینکه /etc/hosts یا /c/Windows/System32/drivers/etc/hosts را ویرایش کرده باشید. مقدار --ip=proxy تلاش میکند تفکیک DNS را از طریق پیشکار (proxy) انجام دهد. ترکیب --ip=proxy به همراه --nodns=min برای شرایطی که DNS محلی وجود ندارد مفید است، زیرا هنگام تلاش برای تفکیک رکوردهای CAA، TXT و MX با انقضای زمان DNS مواجه نخواهید شد.
--proxy <host>:<port> هرگونه بررسی را از طریق پیشکار (proxy) مشخص شده انجام میدهد. مقدار --proxy=auto تنظیمات پیشکار را از متغیرهای محیط به ارث میبرد. هر نام میزبان ارائهشده به اولین رکورد A تفکیک میشود و در صورت عدم وجود، از رکورد AAAA استفاده خواهد شد. آدرسهای IPv4 و IPv6 نیز میتوانند پاس داده شوند که دومی همچنین با نمادگذاری قلاب (کروشه) است. لطفاً توجه داشته باشید که برای کارکرد پیشکار روی IPv6 به نسخهٔ جدیدتری از OpenSSL یا LibreSSL نیاز دارید. علاوه بر این، اگر میخواهید جستجوها از طریق پیشکار انجام شود، میتوانید DNS_VIA_PROXY=true را مشخص کنید. بررسی ابطال OCSP (با -S --phone-out) توسط OpenSSL از طریق پیشکار پشتیبانی نمیشود. از آنجا که ارائهٔ پیشکار نشاندهندهٔ مسدود بودن پورتهای خروجی ۸۰ و ۴۴۳ در شبکهٔ شما است، بررسی ابطال OCSP انجام نخواهد شد. با این حال، اگر IGN_OCSP_PROXY=true ارائه شده باشد، به صورت مستقیم تلاش خواهد شد. احراز هویت در پیشکار پشتیبانی نمیشود. پیشکار از طریق آدرسهای IPv6 پشتیبانی نمیشود، و همچنین پیشکارهای HTTPS یا SOCKS پشتیبانی نمیشوند.
-6 بررسیهای IPv6 را (نیز) انجام میدهد. لطفاً توجه داشته باشید که testssl.sh بررسیها را به صورت خودکار روی آدرس IPv6 انجام نمیدهد؛ به دو دلیل: testssl.sh هیچ بررسی اتصالی برای IPv6 انجام نمیدهد و نمیتواند به طور قابل اعتمادی تشخیص دهد که آیا باینری OpenSSL مورد استفاده شما از s_client در IPv6 پشتیبانی میکند یا خیر. گزینهٔ -6 فرض میکند که هر دو شرط برقرار است. اگر هر دو شرط برقرار باشند و بهطور کلی ترجیح میدهید شاخههای IPv6 را نیز آزمایش کنید، میتوانید HAS_IPv6 را به محیط پوستهٔ خود اضافه کنید. علاوه بر باینری OpenSSL ارائهشده، عملکرد IPv6 با نسخههای اصلی OpenSSL نسخهٔ 1.1.0 یا بالاتر و نسخههای قدیمیتر 1.0.2 یا بالاتر در RHEL/CentOS/FC و Gentoo شناخته شده است.
--ssl-native به جای استفاده از ترکیبی از سوکتهای bash و چند اتصال s_client مربوط به openssl، برنامه testssl.sh (تقریباً) فقط از دومی استفاده میکند. این روش سریعتر است اما نتایج با دقت کمتری را ارائه میدهد، به ویژه برای شبیهسازی کلاینت و پشتیبانی از سایفرها. برای همهٔ بررسیها، اگر testssl.sh نتواند تشخیص دهد که آیا بررسی خاصی قابل انجام است یا خیر، هشداری مشاهده خواهید کرد. با این حال، در برخی بررسیها ممکن است بدون دریافت هشدار، با منفی کاذب (false negatives) مواجه شوید؛ بنابراین استفاده از آن توصیه نمیشود. این گزینه تنها زمانی باید استفاده شود که سرعت را به دقت ترجیح میدهید یا میدانید که هدف شما با پروتکلها و سایفرهای ارائهشده توسط باینری openssl شما همپوشانی کافی دارد.
--openssl <path_to_openssl> ابزار testssl.sh ابتدا تلاش زیادی برای یافتن باینری ارائهشده میکند (مکانی که درخت testssl.sh در آن قرار دارد، دایرکتوریای که testssl.sh از آنجا اجرا شده و غیره). اگر هیچیک از اینها جواب ندهد، به باینری openssl ارائهشده توسط سیستمعامل ($PATH) بازمیگردد. با این گزینه میتوانید testssl.sh را به باینری مورد نظر خود هدایت کرده و هرگونه سازوکار داخلی برای یافتن باینری openssl را لغو کنید (تنظیم متغیر محیطی از پیش تعیینشده از طریق OPENSSL=<path_to_openssl>). بسته به پارامترهای آزمایش شما، انتخاب نسخهٔ OpenSSL که همپوشانی بیشتری از نظر سایفرها و پروتکلها با هدف دارد ممکن است سریعتر باشد. همچنین، هنگام بررسی یک سرور مدرن، OpenSSL 3.X نسبت به نسخههای قدیمیتر OpenSSL، یا در MacOS 18 نسبت به نسخهٔ ارائه شدهٔ LibreSSL، سریعتر است.
گزینههای بهینهسازی (TUNING OPTIONS)
--bugs برخی از راهکارهای جایگزین را برای سرورهای دارای ایراد اعمال میکند، مانند لایهگذاری (padding) برای دستگاههای قدیمی F5. این گزینه در صورت نیاز به عنوان -bug به openssl پاس داده میشود؛ به s_client(1) مراجعه کنید (تنظیم متغیر محیطی از طریق BUGS="-bugs" با یک خط تیره). برای بخش سوکت، testssl.sh همیشه راهکارهای موقتی برای مقابله با پیادهسازیهای معیوب سرور در نظر دارد.
--assuming-http برنامهٔ testssl.sh معمولاً ابتدا پروتکل لایهٔ کاربرد را شناسایی میکند. در مواردی که HTTP به طور خودکار قابل شناسایی نیست، ممکن است بخواهید از این گزینه استفاده کنید. این گزینه testssl.sh را وادار میکند تا آزمایشهای خاص HTTP (سرایند HTTP) را نادیده نگیرد و یک شبیهسازی کلاینت مبتنی بر مرورگر را اجرا کند. لطفاً توجه داشته باشید که گاهی اوقات شدت خطر به پروتکل کاربردی بستگی دارد؛ به عنوان مثال، گواهیهای امضاشده با SHA1، عدم تطابق SAN و برخی آسیبپذیریها هنگام بررسی وبسرور در مقایسه با میلسرور با سختگیری و رتبهبندی بدتری ارزیابی میشوند.
-n, --nodns <min|none> به testssl.sh اعلام میکند که کدام پرسوجوهای DNS باید انجام شوند. مقدار min تنها از تفکیک DNS مستقیم (رکوردهای A و AAAA یا رکورد MX) استفاده میکند و از بررسیهای CAA و رکوردهای PTR از آدرس IP به نام دامنه صرفنظر میکند. مقدار none هیچگونه جستجوی DNS انجام نمیدهد. برای حالت دوم، یا باید آدرس IP را به عنوان هدف وارد کنید، یا از --ip استفاده کنید، و یا آدرس IP را در /etc/hosts داشته باشید. استفاده از این سوئیچ تنها در صورتی مفید است که نتوانید یا مایل نباشید جستجوهای DNS را انجام دهید؛ مورد دوم مثلاً میتواند در برخی تستهای نفوذ صدق کند. به طور کلی، این گزینه میتواند به عنوان مثال به جلوگیری از خطای مهلت زمانی (timeout) در جستجوهای DNS کمک کند. متغیر NODNS متغیر محیطی مربوط به این گزینه است. ترکیب --nodns=min همراه با --ip=proxy برای شرایطی که DNS محلی وجود ندارد مفید است، زیرا هنگام تلاش برای تفکیک رکوردهای CAA، TXT و MX با انقضای زمان مواجه نخواهید شد.
--sneaky برای بررسی سرایندهای HTTP، ابزار testssl.sh معمولاً از عامل کاربر (User Agent) سازگار با سرور به صورت TLS tester from ${URL} استفاده میکند. با این گزینه، ردپای شما کمتر آشکار خواهد بود و از یک عامل کاربر Firefox استفاده میشود. توجه داشته باشید که این کار فعالیتهای شما را مخفی نمیکند؛ چنین چیزی اساساً امکانپذیر نیست (تنظیم متغیر محیطی از طریق SNEAKY=true).
--user-agent <user agent> به testssl.sh دستور میدهد که به جای عامل کاربر استاندارد TLS tester from ${URL}، از عامل کاربر HTTP ارائهشده استفاده کند.
--ids-friendly سوئیچی است که میتواند به اتمام اسکن کمک کند، اسکنی که در غیر این صورت ممکن است توسط یک سامانه تشخیص نفوذ (IDS) سمت سرور مسدود شود. این سوئیچ از آزمایش آسیبپذیریهای زیر صرفنظر میکند: Heartbleed، CCS Injection، Ticketbleed و ROBOT. تنظیم متغیر محیطی OFFENSIVE برابر با false به همین نتیجه منجر میشود. لطفاً توجه داشته باشید که به عنوان یک جایگزین یا رویکرد کلی، میتوانید با تغییر متغیرهای USLEEP_SND و/یا USLEEP_REC و شاید MAX_WAITSOCK، فنون گریز را امتحان کنید.
--phone-out بررسی گواهیهای ابطالشده از طریق CRL و OCSP به صورت پیشفرض انجام نمیشود. این سوئیچ به testssl.sh دستور میدهد که با URIهای خارجی - در راستای اجرای جاری - ارتباط برقرار کند. با استفاده از این سوئیچ تأیید میکنید که این بررسی ممکن است مشکلات حریم خصوصی داشته باشد، ممکن است بارگیری چندین مگابایت (فایل CRL) رخ دهد و ممکن است هنگام برقراری ارتباط با نقطه پایانی، مشکلات اتصال شبکه وجود داشته باشد که testssl.sh آنها را مدیریت نمیکند. PHONE_OUT متغیر محیطی برای این گزینه است که اگر این رفتار را میخواهید باید روی true تنظیم شود.
--add-ca <CAfile> به شما امکان میدهد مراجع صدور گواهی (CA) خود را با قالب PEM برای بررسی زنجیرهٔ اعتماد اضافه کنید. CAfile میتواند پوشهای حاوی فایلهایی با پسوند .pem، یک فایل منفرد، یا چندین فایل به صورت فهرستی از CAهای ریشه جدا شده با کاما باشد. این فایلها به صورت داخلی در زمان اجرا به تمام مخازن CA اضافه میشوند. این گزینه (تنها) برای میزبانهای داخلی مفید است که گواهیهای آنها توسط CAهای داخلی صادر شده است. متغیر محیطی جایگزین برای این کار ADDTL_CA_FILES است.
گزینههای بررسی تکی (SINGLE CHECK OPTIONS)
ارائهٔ هر سوئیچ بررسی تکی به عنوان آرگومان مانع از اجرای پیشفرض testssl.sh میشود. در این حالت تنها این گزینه و سایر گزینههای ارائه شده به همان ترتیبی که در اجرای پیشفرض ظاهر میشدند اجرا میشوند.
-e, --each-cipher تکتک ۳۷۰ سایفر (که اکنون پیکربندی شدهاند) را از راه دور روی سرور از طریق openssl + سوکتها بررسی میکند و نتیجه را در حالت عریض (wide) گزارش میدهد. اگر میخواهید هر سایفرِ آزمایششده نمایش داده شود، باید --show-each را اضافه کنید. به صورت پیشفرض پارامترهای زیر را فهرست میکند: hexcode، OpenSSL cipher suite name، key exchange، encryption bits، IANA/RFC cipher suite name. لطفاً توجه داشته باشید که پارامتر --mapping نام مجموعههای سایفر نمایشدادهشده در اینجا و جایگاه آنها را تغییر میدهد. همچنین توجه داشته باشید که طول bit برای رمزنگاری نمایش داده میشود و نه طول security (سطح امنیت)، اگرچه مرتبسازی بر اساس دومی انجام خواهد شد. برای 3DES به دلیل مشکل ملاقات در میانه (Meet-in-the-Middle)، اندازهٔ ۱۶۸ بیتی معادل اندازهٔ امنیت ۱۱۲ بیتی است.
-E, --cipher-per-proto شبیه به -e, --each-cipher است. این گزینه هر یک از سایفرهای ممکن را بررسی میکند، در اینجا: به ازای هر پروتکل. اگر میخواهید هر سایفر بررسیشده نمایش داده شود، باید --show-each را اضافه کنید. خروجی بر اساس قدرت امنیت مرتب میشود، اگرچه بیتهای رمزنگاری را فهرست میکند.
-s, --std, --categories فهرستهای خاصی از مجموعههای سایفر / دستههای سایفر را بر اساس قدرت بررسی میکند. (--standard منسوخ شده است.) این فهرستها عبارتند از (openssl ciphers $LIST که $LIST از موارد زیر است):
- ○
- سایفرهای بدون رمزنگاری (NULL): 'NULL:eNULL'
- ○
- سایفرهای ناشناس NULL: 'aNULL:ADH'
- ○
- سایفرهای صادراتی (Export) (بدون موارد قبلی): 'EXPORT:!ADH:!NULL'
- ○
- LOW (سایفرهای ۶۴ بیتی + DES، بدون سایفرهای EXPORT): 'LOW:DES:RC2:RC4:MD5:!ADH:!EXP:!NULL:!eNULL:!AECDH'
- ○
- سایفرهای 3DES + IDEA: '3DES:IDEA:!aNULL:!ADH:!MD5'
- ○
- سایفرهای منسوخ CBC: 'HIGH:MEDIUM:AES:CAMELLIA:ARIA:!IDEA:!CHACHA20:!3DES:!RC2:!RC4:!AESCCM8:!AESCCM:!AESGCM:!ARIAGCM:!aNULL:!MD5'
- ○
- سایفرهای قوی بدون رازداری پیشرو (FS) (رمزنگاری AEAD): 'AESGCM:CHACHA20:CamelliaGCM:AESCCM:ARIAGCM:!kEECDH:!kEDH:!kDHE:!kDHEPSK:!kECDHEPSK:!aNULL'
- ○
- سایفرهای قوی با رازداری پیشرو (FS) (رمزنگاری AEAD): 'AESGCM:CHACHA20:CamelliaGCM:AESCCM:ARIAGCM:!kPSK:!kRSAPSK:!kRSA:!kDH:!kECDH:!aNULL'
-f, --fs, --nsa, --forward-secrecy تبادل کلید با رازداری پیشرو (Forward Secrecy) قدرتمند را بررسی میکند. منظور از «قدرتمند» این است که سایفرهایی که دارای نقاط ضعف ذاتی شدیدی مانند احراز هویت یا رمزنگاری پوچ (Null)، 3DES و RC4 هستند، در اینجا در نظر گرفته نمیشوند. نباید این تصور نادرست ایجاد شود که یک تبادل کلید امن صورت گرفته و همه چیز مناسب است، در حالی که در واقعیت رمزنگاری به شدت ضعیف است. همچنین این بخش منحنیهای بیضوی و گروههای دیفی-هلمن (Diffie Hellman) موجود و همچنین گروههای FFDHE (در TLS 1.2 و TLS 1.3) را فهرست میکند.
-p, --protocols پروتکلهای TLS/SSL شامل SSLv2، SSLv3 و TLS 1.0 تا TLS 1.3 و برای HTTP پروتکلهای SPDY (NPN) و ALPN (یا همان HTTP/2) را بررسی میکند. برای TLS 1.3 چندین پیشنویس (از ۱۸ به بعد) و نسخهٔ نهایی پشتیبانی و بررسی میشوند. توجه داشته باشید که نسخهٔ openssl-bad ارائهشده از TLS 1.3 پشتیبانی نمیکند. از آنجا که بررسی TLS 1.3 در سوکتها انجام خواهد شد، این مورد معمولاً مشکلی ایجاد نمیکند. با این حال، اگر میزبانی مشاهده شود که فقط از TLS 1.3 پشتیبانی میکند، برای داشتن پوشش آزمایشی کامل (مثلاً بررسی سرایندها)، وجود و پشتیبانی از TLS 1.3 در مسیر /usr/bin/openssl (یا محتوای OPENSSL2) بررسی میشود و در صورت موفقیتآمیز بودن، به این باینری سوئیچ خواهد شد. یک پیام این موضوع را به اطلاع شما خواهد رساند.
-P, --server-preference, --preference اولویتهای سرور را نمایش میدهد: ترتیب سایفرها، و با کلاینت openssl استفادهشده: پروتکل و سایفر توافقشده. اگر ترتیب سایفری از طرف سرور تحمیل شده باشد، آن را برای هر پروتکل (openssl+سوکتها) نمایش میدهد. اگر چنین ترتیبی وجود نداشته باشد، به جای آن نشان میدهد که کدام سایفرها از سرور با هر پروتکل انتخاب شدهاند.
-S, --server_defaults اطلاعات دریافتی از پیام(های) Server Hello را نمایش میدهد:
- ○
- افزونههای TLS موجود،
- ○
- اطلاعات/قابلیتهای TLS ticket و شناسهٔ نشست (session ID)،
- ○
- قابلیتهای ازسرگیری نشست (session resumption)،
- ○
- انحراف زمانی (Time skew) نسبت به localhost (بیشتر پیادهسازیهای سرور مقادیر تصادفی برمیگردانند).
- ○
- اطلاعات متعدد گواهی
- ○
- الگوریتم امضا،
- ○
- اندازهٔ کلید،
- ○
- کاربرد کلید و کاربرد کلید گسترشیافته (key usage and extended key usage)،
- ○
- اثرانگشتها و شماره سریال
- ○
- نام معمول (CN)، نام جایگزین موضوع (SAN)، صادرکننده،
- ○
- اعتماد از طریق نام میزبان + زنجیرهٔ اعتماد در برابر گواهیهای ارائهشده
- ○
- شناسایی گواهی اعتبارسنجی گسترده (EV)
- ○
- شناسایی آزمایشی «eTLS»
- ○
- اعتبار: زمان شروع + پایان، چند روز باقیمانده (هشدار برای طول عمر گواهی بیشتر از یا مساوی ۵ سال)
- ○
- اطلاعات ابطال (CRL، OCSP، OCSP stapling و must staple). در صورت ارائهٔ --phone-out، نزد مرجع صدور گواهی بررسی میکند که آیا گواهی میزبان ابطال شده است یا خیر (OCSP و CRL ساده).
- ○
- نمایش رکورد منبع مجوز مرجع صدور گواهی در DNS (رکورد CAA)
- ○
- اطلاعات شفافیت گواهی (Certificate Transparency) (در صورت ارائه توسط سرور).
برای بررسی زنجیرهٔ اعتماد، ۵ مخزن گواهی ارائه شده است. اگر آزمایش در برابر یکی از مخازن اعتماد ناموفق باشد، آن مخزن شناسایی شده و دلیل شکست نمایش داده میشود؛ علاوه بر این، مخازنی که موفق شدهاند نیز نمایش داده میشوند. شما میتوانید مرجع صدور گواهی (CA) خود را از طریق ADDTL_CA_FILES پیکربندی کنید؛ به بخش فایلها (FILES) در ادامه مراجعه نمایید. اگر سرور هیچ رکورد منطبقی در نام جایگزین موضوع (SAN) ارائه ندهد اما در نام معمول (CN) ارائه دهد، این موضوع مشخص خواهد شد زیرا این حالت منسوخ شده است. همچنین چندین گواهی سرور و همچنین پاسخ گواهی به یک Server Hello بدون SNI (نشانگر نام سرور) از سوی کلاینت به آدرس IP بررسی میشود. دربارهٔ انحراف ساعت TLS: این پارامتر اختلاف زمانی را نسبت به کلاینت نشان میدهد. امروزه تنها چند پشتهٔ TLS هنوز از این ویژگی پشتیبانی میکنند و ساعت محلی gmt_unix_time را برمیگردانند، مانند IIS و نسخههای openssl < 1.0.1f. علاوه بر تاریخ HTTP، اگر اختلاف زمانی به میزان قابل توجهی تفاوت داشته باشد، میتوانید نتیجه بگیرید که به عنوان مثال درخواست TLS و درخواست HTTP شما به میزبانهای متفاوتی ختم شدهاند.
-x <pattern>, --single-cipher <pattern> سایفرهای منطبق با pattern را در برابر یک سرور آزمایش میکند. الگوها شبیه به -V pattern , --local pattern هستند؛ دربارهٔ نحوهٔ تطابق به بالا مراجعه کنید.
-h, --header, --headers در صورتی که سرویس از نوع HTTP باشد (چه با شناسایی و چه با اجبار از طریق --assume-http)، چندین سرایند HTTP را بررسی میکند، مانند:
- ○
- امنیت انتقال سختگیرانهٔ پروتکل اچتیتیپی (HSTS)
- ○
- پینکردن کلید عمومی HTTP (HPKP)
- ○
- بنر سرور
- ○
- تاریخ و ساعت HTTP
- ○
- بنر سرور مانند سرایندهای توزیعهای لینوکس یا دیگر ارائهدهندگان یونیکس.IP "○" 4 بنر برنامه (PHP، RoR، OWA، SharePoint، Wordpress و غیره)
- ○
- سرآیندهای Reverse proxy
- ○
- ماژولهای وبسرور
- ○
- آدرس IPv4 در سرآیند
- ○
- کوکی (شامل پرچمهای Secure/HTTPOnly)
- ○
- رمزگشایی کوکیهای رمزگذارینشدهٔ BIG IP F5
- ○
- سرآیندهای امنیتی (X-Frame-Options، X-XSS-Protection، Expect-CT،...، سرآیندهای CSP). موارد نامعتبر یا بیمعنی هنوز در اینجا شناسایی نمیشوند.
-c, --client-simulation این گزینه دستتکانی را با تعدادی کلاینت استاندارد شبیهسازی میکند تا بتوانید بفهمید چه کلاینتهایی میتوانند یا نمیتوانند به وبسایت شما متصل شوند. برای حالت دوم، پروتکل، رمز و منحنی نمایش داده میشود، و همچنین وجود داشتن یا نداشتن Forward Secrecy. ابزار testssl.sh از مجموعهای دستچینشده از کلاینتها که توسط API ابزار SSLlabs دریافت شدهاند استفاده میکند. هنگام ترکیب با گزینهٔ --wide، خروجی در ستونها تراز میشود. اگر میخواهید تمام کلاینتهای موجود بدون کموکاست نمایش داده شوند، از متغیر محیطی ALL_CLIENTS استفاده کنید.
-g, --grease چندین باگ پیادهسازی سرور مانند تحمل محدودیتهای اندازه و GREASE را بررسی میکند، به RFC 8701 مراجعه کنید. این بررسی بهصورت پیشفرض اجرا نمیشود.
آسیبپذیریها (VULNERABILITIES)
-U, --vulnerable, --vulnerabilities تنها تمام آسیبپذیریها (موارد زیر) را آزمایش میکند. متغیر محیطی VULN_THRESHLD تعیین میکند که پس از چه مقداری یک عنوان جداگانه برای هر آسیبپذیری نمایش داده شود. مقدار پیشفرض 1 است، به این معنی که اگر دو آسیبپذیری را بررسی کنید، علاوه بر نام آسیبپذیری و نتیجه، تنها عنوان عمومی بخش آسیبپذیریها نمایش داده میشود. در غیر این صورت، علاوه بر نمایش نام آسیبپذیری و نتیجهٔ آزمایش، هر آسیبپذیری یا بخش آسیبپذیری عنوان اختصاصی خود را دریافت میکند. یک بخش آسیبپذیری از بیش از یک بررسی تشکیل شده است، به عنوان مثال بررسی آسیبپذیری renegotiation دارای دو بررسی است، و Logjam نیز همینطور.
-H, --heartbleed وجود Heartbleed را که یک نشت حافظه در openssl است بررسی میکند. به جز در مواردی که سمت سرور از افزونهٔ heartbeat پشتیبانی نکند، احتمال زیادی دارد که این بررسی با پایان مهلت زمانی مواجه شود. ثانیههای انتظار برای پاسخ را میتوان با HEARTBLEED_MAX_WAITSOCK تنظیم کرد. مقدار پیشفرض 8 است.
-I, --ccs, --ccs-injection وجود CCS Injection را که یک آسیبپذیری openssl است بررسی میکند. گاهی در اینجا نیز بررسی نیاز دارد منتظر دریافت پاسخ بماند. مهلت زمانی پیشفرض 5 ثانیه را میتوان با متغیر محیطی CCS_MAX_WAITSOCK تغییر داد.
-T, --ticketbleed نشت حافظهٔ Ticketbleed را در بارگذارندههای توازن بار BigIP بررسی میکند.
--BB, --robot آسیبپذیری در برابر حملهٔ ROBOT / (Return Of Bleichenbacher's Oracle Threat) را بررسی میکند. مهلت زمانی پیشفرض 10 ثانیه را میتوان با متغیر محیطی ROBOT_TIMEOUT تغییر داد.
--SI, --starttls-injection آسیبپذیریهای تزریق STARTTLS را بررسی میکند (تنها SMTP، IMAP، POP3). به socat و OpenSSL >=1.1.0 نیاز است.
-R, --renegotiation آسیبپذیریهای renegotiation (مذاکرهٔ مجدد) را آزمایش میکند. در حال حاضر بررسیهایی برای Secure Renegotiation و Secure Client-Initiated Renegotiation وجود دارد. لطفاً توجه داشته باشید که سرورهای آسیبپذیر در برابر مورد دوم به احتمال زیاد بسیار آسان مورد حملهٔ DoS قرار میگیرند (HTTP). بررسی برای Insecure Client-Initiated Renegotiation هنوز پیادهسازی نشده است.
-C, --compression, --crime آسیبپذیری CRIME (Compression Ratio Info-leak Made Easy) را در TLS بررسی میکند. CRIME در SPDY هنوز بررسی نمیشود.
-B, --breach آسیبپذیری BREACH (Browser Reconnaissance and Exfiltration via Adaptive Compression of Hypertext) را بررسی میکند. از آنجا که فشردهسازی در لایهٔ HTTP پیشنیاز این آسیبپذیری است، در صورتی که HTTP شناسایی نشود یا تشخیص آن با --assume-http اجبار نشده باشد، آزمایش نخواهد شد. لطفاً توجه داشته باشید که تنها نشانی URL ارائهشده (معمولاً "/" ) آزمایش میشود.
-O, --poodle آسیبپذیری SSL POODLE (Padding Oracle On Downgraded Legacy Encryption) را آزمایش میکند. این گزینه اساساً وجود رمزهای CBC را در SSLv3 بررسی میکند.
-Z, --tls-fallback راهکار کاهشی TLS_FALLBACK_SCSV را بررسی میکند. TLS_FALLBACK_SCSV در واقع یک مجموعهٔ رمز است که به Client Hello افزوده میشود تا از حملات تنزل پروتکل توسط Man in the Middle جلوگیری کند.
-W, --sweet32 آسیبپذیری در برابر SWEET32 را با آزمایش رمزهای بلوکی ۶۴ بیتی (3DES، RC2 و IDEA) بررسی میکند.
-F, --freak آسیبپذیری FREAK (Factoring RSA Export Keys) را با آزمایش رمزهای EXPORT RSA بررسی میکند.
-D, --drown آسیبپذیری DROWN (Decrypting RSA with Obsolete and Weakened eNcryption) را با بررسی در دسترس بودن پروتکل SSL 2 در هدف بررسی میکند. لطفاً توجه داشته باشید که اگر از همان گواهی RSA در جای دیگری استفاده کنید، ممکن است در آنجا نیز آسیبپذیر باشید. ابزار testssl.sh این مورد را بررسی نمیکند، اما پیوند مفیدی در censys.io ارائه میدهد که این سرویس را فراهم میکند.
-J, --logjam آسیبپذیری LOGJAM را با بررسی رمزهای DH EXPORT بررسی میکند. همچنین «اعداد اول مشترک» را که کلیدهای DH از پیش پیکربندیشده هستند بررسی میکند. کلیدهای DH کوچکترا مساوی ۱۰۲۴ بیت جریمه خواهند شد. همچنین گروههای FFDHE (در TLS 1.2) در اینجا نمایش داده خواهند شد.
-A, --beast آسیبپذیریهای BEAST در SSL 3 و TLS 1.0 را با آزمایش استفاده از رمزهای CBC بررسی میکند.
-L, --lucky13 آسیبپذیری LUCKY13 را بررسی میکند. این گزینه وجود رمزهای CBC را در نسخههای TLS بین 1.0 تا 1.2 بررسی میکند.
-WS, --winshock آسیبپذیری Winshock را بررسی میکند. این گزینه نبودِ تعداد زیادی از رمزها، برخی افزونههای TLS و منحنیهای ec را که بعداً در Windows معرفی شدند بررسی میکند. در پایان، بنر سرور نیز بررسی میشود.
-4, --rc4, --appelbaum بررسی میکند که کدام رمزهای جریانی RC4 ارائه میشوند.
گزینههای خروجی (OUTPUT OPTIONS)
-q, --quiet به طور معمول testssl.sh بنری را روی stdout با اطلاعات نسخه، حقوق استفاده و یک هشدار نمایش میدهد. این گزینه آن را پنهان میکند. لطفاً توجه داشته باشید که با انتخاب این گزینه، شرایط استفاده و هشداری را که معمولاً در بنر ظاهر میشود، میپذیرید.
--wide به جز «خروجی هر رمز»، تمام آزمایشها نام یک رمز تکی را نمایش میدهند (طرح آن را در زیر ببینید). این گزینه به testssl.sh امکان میدهد که برای بخشهای زیر نیز همان خروجی آزمایش هر رمز را نمایش دهد: BEAST، FS، RC4. شبیهسازی کلاینت نیز یک حالت عریض دارد. تفاوت در اینجا به خروجی ترازشده در ستونها و یک سربرگ مناسب محدود میشود. میتوان از متغیر محیطی WIDE به عنوان جایگزین استفاده کرد.
--mapping <openssl|iana|no-openssl|no-iana>
- ○
- openssl: استفاده از نام مجموعهٔ رمز OpenSSL به عنوان ساختار نام اصلی مجموعهٔ رمز (پیشفرض)،
- ○
- iana: استفاده از نام مجموعهٔ رمز IANA به عنوان ساختار نام اصلی مجموعهٔ رمز.
- ○
- no-openssl: نام مجموعهٔ رمز OpenSSL نمایش داده نشود، تنها نامهای IANA نمایش داده شوند.
- ○
- no-iana: نام مجموعهٔ رمز IANA نمایش داده نشود، تنها نامهای OpenSSL نمایش داده شوند.
لطفاً توجه داشته باشید که در نسخهٔ 3.0 ابزار testssl.sh هنوز میتوانید از rfc به جای iana و از no-rfc به جای no-iana استفاده کنید، اما پس از نسخهٔ 3.0 این موارد حذف خواهند شد.
--show-each این گزینه تنها برای تمام حالتهای wide است: تمام رمزهای آزمایششده را نمایش میدهد -- نه فقط آنهایی که با موفقیت انجام شدهاند. اگر ترجیح میدهید این مورد را از طریق محیط شل تنظیم کنید، SHOW_EACH_C به کار شما میآید.
--color <0|1|2|3> استفاده از رنگها بر روی صفحه و در فایل ثبت گزارش را تعیین میکند: مقدار 2 پیشفرض است و از کدهای گریز ANSI و termcap در پایانهٔ شما استفاده میکند. مقدار 1 تنها از نشانهگذاریهای بدون رنگ مانند ضخیم، کج، زیرخطدار و معکوس استفاده میکند. مقدار 0 به معنی عدم وجود هیچ نشانهگذاری = بدون کدهای گریز است. همچنین این همان چیزی است که وقتی فایلی بدون کدهای گریز میخواهید نیاز دارید. مقدار 3 رمزها و EC را بر اساس یک رتبهبندی درونی (که هنوز بینقص نیست) رنگآمیزی میکند. تنظیم متغیر محیطی COLOR روی این مقدار نتیجهٔ مشابهی دارد. لطفاً توجه داشته باشید که OpenBSD و نسخههای اولیهٔ FreeBSD از حالت کج پشتیبانی نمیکنند.
--colorblind رنگهای سبز و آبی را در خروجی جابهجا میکند، تا این درصد از افراد (تا ۸٪ از مردان، به https://en.wikipedia.org/wiki/Color_blindness مراجعه کنید) بتوانند این یافتهها را بهتر تشخیص دهند. اگر میخواهید این مورد را در محیط تنظیم کنید، COLORBLIND متغیر مربوطه است.
--debug <0-6> این گزینه خروجیهای اضافی روی صفحه (2-6) در اختیارتان میگذارد که فقط برای اشکالزدایی مفید هستند. DEBUG متغیر محیطی مربوطه است که میتوانید استفاده کنید. شش سطح وجود دارد (0 پیشفرض است، بنابراین اثری ندارد):
- 1.
- خروجی صفحه عادی است اما خروجیهای مفید اشکالزدایی را در /tmp/testssl.XXXXXX/ باقی میگذارد. اطلاعات دایرکتوری دقیق در پایان اجرا در خروجی صفحه گنجانده میشود.
- 2.
- جزئیات بیشتری از رویدادها، وضعیت (سطح بالا) و خطاهای اتصال و تعداد اندکی خروجی عمومی اشکالزدایی را فهرست میکند
- 3.
- حتی اطلاعات کمی بیشتر: hexdumps + اطلاعات دیگر
- 4.
- نمایش بایتهای ارسالشده از طریق سوکتها
- 5.
- نمایش بایتهای دریافتشده از طریق سوکتها
- 6.
- تمامی جزئیات بدون کموکاست
--disable-rating رتبهبندی را غیرفعال میکند. رتبهبندی زمانی که تمام توابع مورد نیاز اجرا نشوند (مثلاً هنگام بررسی یک تک آسیبپذیری)، به طور خودکار غیرفعال میشود تا امتیاز نادرست یا گمراهکنندهای ارائه نشود.
گزینههای خروجی فایل (FILE OUTPUT OPTIONS)
--log, --logging خروجی استاندارد را در ${NODE}-p${port}${YYYYMMDD-HHMM}.log در دایرکتوری کاری فعلی شل نیز ذخیره میکند. بسته به گزینهٔ خروجی رنگی (به بالا مراجعه کنید)، فایل خروجی حاوی کدهای گریز رنگی و سایر نشانهگذاریها خواهد بود، مگر اینکه --color 0 را نیز تعیین کنید. دستورهای cat و -- در صورت پیکربندی مناسب less -- خروجی را با قالببندی مناسب در پایانهٔ شما نشان خواهند داد. خروجی بنری را تقریباً با همان اطلاعات روی صفحه نمایش میدهد. علاوه بر این، خط فرمان نمونهٔ testssl.sh را نمایش میدهد. لطفاً توجه داشته باشید که فایل ثبت گزارشِ حاصل، بر اساس عرض صفحهٔ نمایش شما هنگام اجرای testssl.sh قالببندی میشود. میتوانید عرض صفحه را با متغیر محیطی TERM_WIDTH بازنویسی کنید.
--logfile <logfile> یا -oL <logfile> در صورتی که بخواهید گزارشها را در یک دایرکتوری ذخیره کنید یا اگر ترجیح میدهید نام فایل گزارش را خودتان تعیین کنید، میتوانید به جای گزینهٔ قبلی از این گزینه استفاده کنید. اگر logfile یک دایرکتوری باشد، خروجی در logfile/${NODE}-p${port}${YYYYMMDD-HHMM}.log قرار خواهد گرفت. اگر logfile یک فایل باشد، از نام همان فایل استفاده خواهد شد؛ مسیر مطلق نیز در اینجا مجاز است. اگر ترجیح میدهید با متغیرهای محیطی کار کنید، LOGFILE متغیری است که باید تنظیم کنید. لطفاً توجه داشته باشید که فایل ثبت گزارش حاصل، بر اساس عرض صفحهٔ نمایش شما هنگام اجرای testssl.sh قالببندی میشود. میتوانید عرض را با متغیر محیطی TERM_WIDTH بازنویسی کنید.
--json علاوه بر این، در یک فایل JSON به نام ${NODE}-p${port}${YYYYMMDD-HHMM}.json در دایرکتوری کاری فعلی شل ثبت میکند. فایل JSON حاصل بر خلاف --json-pretty هموار است -- به این معنی که هر بخش خودکفا است و شناسهای برای هر بررسی منفرد، نام میزبان/آدرس IP، درگاه، شدت و یافته دارد. برای آسیبپذیریها ممکن است شامل مدخلهای CVE و CWE نیز باشد. خروجی حاوی بنر یا پاورقی نیست.
--jsonfile <jsonfile> یا -oj <jsonfile> به جای گزینهٔ پیشین، در صورتی که بخواهید خروجی JSON را در یک دایرکتوری ذخیره کنید یا اگر ترجیح میدهید نام فایل گزارش را خودتان تعیین کنید، میتوانید از این گزینه استفاده کنید. اگر jsonfile یک دایرکتوری باشد، خروجی در logfile/${NODE}-p${port}${YYYYMMDD-HHMM}.json قرار خواهد گرفت. اگر jsonfile یک فایل باشد، از نام همان فایل استفاده خواهد شد؛ استفاده از مسیر مطلق نیز در اینجا مجاز است.
--json-pretty علاوه بر این، در یک فایل JSON به نام ${NODE}-p${port}${YYYYMMDD-HHMM}.json در دایرکتوری کاری فعلی شل ثبت میکند. فایل JSON حاصل بر خلاف --json غیرهموار است -- به این معنی که ساختاریافته است. این ساختار شامل سرآیندی مشابه بنر روی صفحه است، از جمله خط فرمان، میزبان پویششده، باینری openssl مورداستفاده، نسخهٔ testssl و زمان مبدأ آغاز به کار. سپس برای هر بخش آزمایش testssl.sh، یک شیء/بخش JSON جداگانه دارد. هر یافته دارای یک شناسهٔ جفت کلید/مقدار به همراه شناسه برای هر بررسی منفرد، شدت و یافته است. برای آسیبپذیریها ممکن است حاوی مدخلهای CVE و CWE نیز باشد. پاورقی زمان پویش را بر حسب ثانیه فهرست میکند.
--jsonfile-pretty <jsonfile> یا -oJ <jsonfile> مشابه گزینههای پیشتر ذکرشدهٔ --jsonfile یا --logfile، خروجی را در قالب JSON خوانا و آراسته (به --json-pretty مراجعه کنید) در یک فایل یا یک دایرکتوری ثبت میکند. برای توضیحات بیشتر به --jsonfile یا --logfile مراجعه کنید.
--csv علاوه بر این، در یک فایل CSV به نام ${NODE}-p${port}${YYYYMMDD-HHMM}.csv در دایرکتوری کاری فعلی شل ثبت میکند. خروجی شامل سرآیندی با کلیدها است؛ مقادیر مشابه مقادیر موجود در قالب JSON هموار هستند (شناسه برای هر بررسی منفرد، نام میزبان/آدرس IP، درگاه، شدت، یافته، و برای آسیبپذیریها شمارهٔ CVE و CWE).
--csvfile <csvfile> یا -oC <csvfile> مشابه گزینههای پیشتر ذکرشدهٔ --jsonfile یا --logfile، خروجی را در قالب CSV (به --cvs مراجعه کنید) علاوه بر این در یک فایل یا دایرکتوری ثبت میکند. برای توضیحات بیشتر به --jsonfile یا --logfile مراجعه کنید.
--html علاوه بر این، در یک فایل HTML به نام ${NODE}-p${port}${YYYYMMDD-HHMM}.html در دایرکتوری کاری فعلی شل ثبت میکند. این فایل شامل خروجی ۱:۱ کنسول است. در نسخههای قبلی گزینهای غیربومی برای استفاده از «aha» (Ansi HTML Adapter: github.com/theZiz/aha) وجود داشت مانند testssl.sh [options] <URI> | aha >output.html. این کار دیگر ضروری نیست.
--htmlfile <htmlfile> یا -oH <htmlfile> مشابه گزینههای پیشتر ذکرشدهٔ --jsonfile یا --logfile، خروجی را در قالب HTML (به --html مراجعه کنید) علاوه بر این در یک فایل یا دایرکتوری ثبت میکند. برای توضیحات بیشتر به --jsonfile یا --logfile مراجعه کنید.
-oA <filename> / --outFile <filename> مشابه nmap، خروجی فایلی را در تمام قالبهای فایلی در دسترس تولید میکند: LOG، JSON pretty، CSV، HTML. اگر نام فایل ارائهشده برابر با auto باشد، نام فایل به طور خودکار با استفاده از '${NODE}-p${port}${YYYYMMDD-HHMM}.${EXT}' به همراه پسوند مربوطه تولید میشود. اگر یک دایرکتوری ارائه شود، تمام فایلهای خروجی در <filename>/${NODE}-p${port}${YYYYMMDD-HHMM}.{log,json,csv,html} قرار داده خواهند شد.
-oa <filename> / --outfile <filename> همان کار گزینهٔ قبلی را انجام میدهد اما به جای آن از JSON هموار استفاده میکند.
--hints این گزینه هنوز مورد استفاده قرار نگرفته است. هدف این گزینه ارائهٔ نکاتی در مورد نحوهٔ رفع یک یافته یا حداقل کمکی برای بهبود آن است. متغیر محیطی برای این منظور GIVE_HINTS است.
--severity <severity> برای CSV و هر دو خروجی JSON، این گزینه تنها در صورتی یافتهها را به فایل خروجی اضافه میکند که سطح شدت برابر یا بالاتر از مقدار severity مشخصشده باشد. مقادیر مجاز <LOW|MEDIUM|HIGH|CRITICAL> هستند. مقدار WARN سطح دیگری است که به معنی یک خطا یا مشکل در پویش سمت کلاینت است. بنابراین در صورت وقوع، همیشه آنها را در فایل خواهید دید.
--append به طور معمول، اگر یک فایل خروجی از قبل وجود داشته باشد و اندازهٔ فایل آن بزرگتر از صفر باشد، testssl.sh از شما میخواهد که فایل را به صورت دستی حذف کنید و با یک خطا خارج میشود. با این حال، --append خروجی را بدون سرآیند به انتهای این فایل پیوست میکند. متغیر محیطی APPEND نیز همین کار را انجام میدهد. در استفاده از این سوئیچ/متغیر مراقب باشید. گزینهای متمم برای بازنویسی مستقیم روی فایل موجود به طور پیشفرض طراحی نشده است.
--overwrite به طور معمول، اگر یک فایل خروجی از قبل وجود داشته باشد و اندازهٔ فایل آن بزرگتر از صفر باشد، testssl.sh به شما اجازهٔ بازنویسی روی این فایل را نخواهد داد. این گزینه این کار را بدون هیچ هشداری انجام میدهد. متغیر محیطی OVERWRITE نیز همین کار را انجام میدهد. مراقب باشید، به شما هشدار داده شد!
--outprefix <fname_prefix> پیشوند نام فایل خروجی fname_prefix را قبل از ${NODE}- اضافه میکند. همچنین میتوانید از متغیر محیطی FNAME_PREFIX استفاده کنید. با استفاده از این گزینه، زمانی که نام فایلی برای گزینهٔ خروجی مربوطه مشخص نشده باشد، همهٔ فایلهای خروجی با الگوی <fname_prefix>-${NODE}-p${port}${YYYYMMDD-HHMM}.<format> نامگذاری خواهند شد. اگر جداکنندهٔ «-» را نمیپسندید، میتوانید <fname_prefix> را به پایانیافته با «.»، «_» یا «,» ارائه دهید. در این حالت یا اگر خودتان قبلاً «-» را وارد کرده باشید، هیچ «-» اضافی دیگری به <fname_prefix> اضافه نخواهد شد.
چندین گزینهٔ خروجی فایل را نیز میتوان از طریق متغیرهای محیطی از پیش تعیین کرد..SS "رتبهبندیهای رنگی (COLOR RATINGS)" برنامه testssl.sh از (هشت) رنگ استاندارد ترمینال استفاده میکند. طرح رنگبندی به شرح زیر است:
- ○
- قرمز روشن: یک یافته بحرانی (critical)
- ○
- قرمز: یک یافته با اهمیت بالا (high)
- ○
- قهوهای: یک یافته با اهمیت متوسط (medium)
- ○
- زرد: یک یافته با اهمیت پایین (low)
- ○
- سبز (آبی در صورت تنظیم COLORBLIND): موردی که یا در کل ویژگی خوبی است یا نتیجه منفی بررسیای است که در غیر این صورت به یک یافته با اهمیت بالا منجر میشد
- ○
- سبز روشن (آبی روشن در صورت تنظیم COLORBLIND): موردی که یا در کل ویژگی بسیار خوبی است یا نتیجه منفی بررسیای است که در غیر این صورت به یک یافته بحرانی منجر میشد
- ○
- بدون رنگ در مکانهایی که انتظار یک یافته نیز میرود: یافتهای در سطح اطلاعاتی (info)
- ○
- فیروزهای: در حال حاضر فقط برای --show-each یا یک نکته تکمیلی استفاده میشود
- ○
- سرخابی: وضعیت هشدار را نشان میدهد؛ برای نمونه عدم وجود قابلیتهای محلی در سمت کلاینت یا مشکلی دیگر
- ○
- سرخابی روشن: یک خطای مهلک که یا نیازمند موافقت صریح کاربر برای ادامه است یا وضعیتی که هیچ چاره دیگری جز خروج برای testssl.sh باقی نمیگذارد
آنچه در بالا با عنوان «روشن» (light) نامگذاری شده است روی صفحه نمایش بدین شکل دیده میشود، اما از نظر فنی «پررنگ» (bold) است. علاوه بر این، گزینه --color=3 سایفرها را بر اساس یک رتبهبندی داخلی و تقریبی رنگآمیزی میکند.
نشانهگذاریها (بدون هیچ رنگی) به روش زیر استفاده میشوند:
- ○
- پررنگ (bold): برای نام آزمون
- ○
- زیرخطدار + پررنگ: برای سربرگ هر بخش آزمون
- ○
- زیرخطدار: برای زیرعنوانها
- ○
- کج (italics): برای رشتههایی که صرفاً مقداری خواندهشده از سرور را نشان میدهند
تنظیم دقیق از طریق متغیرهای محیطی و گزینههای بیشتر (TUNING via ENV variables and more options)
به جز متغیرهای محیطی ذکرشده در بالا که میتوانند جایگزین گزینههای خط فرمان شوند، در اینجا متغیرهایی آمدهاند که نمیتوان آنها را به روش دیگری تنظیم کرد. متغیرهایی که برای تنظیم دقیق استفاده میشوند، با مقادیر معقولی از پیش مقداردهی شدهاند. نباید دلیلی برای تغییر آنها وجود داشته باشد مگر اینکه از testssl.sh تحت شرایط خاصی استفاده کنید.
- ○
- متغیر TERM_WIDTH پهنای خودکار تشخیصدادهشده برای ترمینال را لغو و بازنویسی میکند. تنظیم این متغیر معمولاً فقط زمانی منطقی است که خروجی را با استفاده از گزینه --log، --logfile یا -oL در یک فایل ذخیره میکنید.
- ○
- DEBUG_ALLINONE / SETX: با تنظیم هر یک از آنها روی true، برنامه testssl.sh به رفتار استاندارد bash بازمیگردد؛ یعنی هنگام اجرای bash -x testssl.sh، خروجی اشکالزدایی bash را در ترمینال نمایش میدهد و نه در یک فایل خارجی /tmp/testssl-<XX>.log
- ○
- DEBUGTIME: گزینه پروفایلسازی. هنگام استفاده از حالت اشکالزدایی bash و زمانی که این گزینه روی true تنظیم شده باشد، یک فایل متنی جداگانه با زمانهای epoch در /tmp/testssl-<XX>.time ایجاد میکند. این فایلها باید با paste /tmp/testssl-<XX>.{time,log} ادغام شوند. [comment]: # * FAST_SOCKET [comment]: # * SHOW_SIGALGO [comment]: # * FAST
- ○
- گزینه EXPERIMENTAL=true گزینهای است که گاهی در فرآیند توسعه برای آسانتر کردن آزمون استفاده میشود. در نسخههای منتشرشده این گزینه هیچ اثری ندارد.
- ○
- گزینه ALL_CLIENTS=true هنگام آزمودن HTTP یک شبیهسازی کلاینت را با تمام کلاینتها (در حال حاضر ۱۲۶ کلاینت) اجرا میکند.
- ○
- UNBRACKTD_IPV6: برای برخی از نسخههای قدیمی OpenSSL (مانند نسخه مربوط به Gentoo) که از نشانیهای IPv6 درون براکت پشتیبانی نمیکنند، باید روی true تنظیم شود.
- ○
- NO_ENGINE: اگر با خروجیهای بههمریخته حاوی واژه «engine» مواجه شدید، ممکن است بخواهید این متغیر را روی true تنظیم کنید. این متغیر testssl.sh را وادار میکند که تلاشی برای پیکربندی engine اوپناساسال یا موتور ناموجود libressl انجام ندهد.
- ○
- HEADER_MAXSLEEP: مدتزمانی که باید پیش از خاتمه دادن به پردازه برای دریافت بنر سرویس / هدر HTTP منتظر ماند.
- ○
- MAX_WAITSOCK: به testssl.sh دستور میدهد که پیش از اعلام قطع اتصال سوکت، تا زمان مشخصشده منتظر بماند. این مقدار را تغییر ندهید مگر اینکه کاملاً از کاری که انجام میدهید مطمئن باشید. مقدار بر حسب ثانیه است.
- ○
- CCS_MAX_WAITSOCK مشابه مورد بالا است، اما فقط برای دستتکانیهای CCS، برای هر دو پیلود CCS اعمال میشود. این مقدار را تغییر ندهید مگر اینکه کاملاً مطمئن باشید. مقدار بر حسب ثانیه است.
- ○
- HEARTBLEED_MAX_WAITSOCK مشابه MAX_WAITSOCK است، اما فقط برای ServerHello پس از ارسال پیلود Heartbleed اعمال میشود. این مقدار را تغییر ندهید مگر اینکه کاملاً مطمئن باشید. مقدار بر حسب ثانیه است.
- ○
- ROBOT_TIMEOUT مشابه مورد بالا است و برای بررسی ROBOT اعمال میشود.
- ○
- MEASURE_TIME_FILE برای موارد نادری که نمیخواهید زمان پویش در خروجی گنجانده شود، میتوانید این متغیر را روی false تنظیم کنید.
- ○
- STARTTLS_SLEEP به طور پیشفرض روی 10 (ثانیه) تنظیم شده است. این مقداری است که testssl.sh پیش از انصراف، در دستتکانی STARTTLS برای یک رشته منتظر میماند.
- ○
- MAX_PARALLEL بیشینه تعداد آزمونهایی است که باید به طور همزمان در حالت آزمون انبوه موازی اجرا شوند. مقدار پیشفرض ۲۰ را میتوان روی سیستمهایی با پردازندههای قویتر افزایش داد.
- ○
- MAX_WAIT_TEST بیشینه زمان (بر حسب ثانیه) برای تکمیل یک آزمون منفرد در حالت آزمون انبوه موازی است. مقدار پیشفرض ۱۲۰۰ است. [comment]: # USLEEP_SND [comment]: # USLEEP_REC
- ○
- HSTS_MIN از پیش روی 179 (روز) تنظیم شده است. اگر هشدارهای زودهنگامتر یا دیرتری برای HTTP Strict Transport Security میخواهید، میتوانید این مقدار را تغییر دهید.
- ○
- HPKP_MIN از پیش روی 30 (روز) تنظیم شده است. اگر هشدارهای زودهنگامتر یا دیرتری برای HTTP Public Key Pinning میخواهید، میتوانید این مقدار را تغییر دهید.
- ○
- DAYS2WARN1 اولین آستانه برای دریافت هشدار انقضای گواهی یک میزبان است که از پیش روی 60 (روز) تنظیم شده است. برای Let's Encrypt این مقدار به طور داخلی بر ۲ تقسیم میشود.
- ○
- DAYS2WARN2 دومین آستانه برای دریافت هشدار انقضای گواهی یک میزبان است که از پیش روی 30 (روز) تنظیم شده است. برای Let's Encrypt این مقدار به طور داخلی بر ۲ تقسیم میشود.
- ○
- TESTSSL_INSTALL_DIR مسیر نصب مشتقشده testssl.sh است. دایرکتوریهای bin و دایرکتوری الزامی etc نسبت به این مسیر جستجو خواهند شد.
- ○
- CA_BUNDLES_PATH: اگر مجموعه اختصاصی از بستههای گواهی CA دارید یا میخواهید testssl.sh را به مکان خاصی از یک بسته CA هدایت کنید، میتوانید از این متغیر برای تنظیم دایرکتوری مورد استفاده testssl.sh استفاده کنید. لطفاً توجه داشته باشید که این متغیر مسیر داخلی testssl.sh را کاملاً لغو و بازنویسی میکند، بدین معنا که تنها در برابر بستههایی آزمون خواهید کرد که به آنها اشاره میکنید. همچنین ممکن است بخواهید از ~/utils/create_ca_hashes.sh برای ایجاد هشها برای HPKP استفاده کنید.
- ○
- MAX_SOCKET_FAIL: عددی که به testssl.sh میگوید یک اتصال سوکت TCP پیش از اینکه برنامه منصرف شده و پایان یابد، چند بار میتواند با شکست مواجه شود. مقدار پیشفرض 2 است. اگر مکرراً پیامی مانند Fatal error: repeated TCP connect problems, giving up را مشاهده میکنید، میتوانید آن را به مقدار بالاتری افزایش دهید.
- ○
- MAX_OSSL_FAIL: عددی که به testssl.sh میگوید اتصال s_client در OpenSSL پیش از اینکه برنامه منصرف شده و پایان یابد، چند بار میتواند ناموفق باشد. مقدار پیشفرض 2 است. اگر مکرراً پیامی مانند Fatal error: repeated openssl s_client connect problem, doesn't make sense to continue را مشاهده میکنید، میتوانید آن را به مقدار بالاتری افزایش دهید.
- ○
- MAX_HEADER_FAIL: عددی که به testssl.sh میگوید یک درخواست HTTP GET روی OpenSSL پیش از اینکه برنامه منصرف شده و پایان یابد، چند بار میتواند یک فایل خالی برگرداند. مقدار پیشفرض 3 است. در اینجا نیز اگر پیامهایی مانند Fatal error: repeated HTTP header connect problems, doesn't make sense to continue را مشاهده کردید، میتوانید این آستانه را افزایش دهید.
- ○
- OPENSSL2 میتواند برای ارائه یک نسخه جایگزین openssl استفاده شود. این گزینه تنها در صورتی منطقی است که بخواهید نسخه موجود در bin/ را که فاقد پشتیبانی از TLS 1.3 است، با نسخهای که دارای این قابلیت است و در /usr/bin/openssl قرار ندارد، جایگزین کنید.
- ○
- OSSL_SHORTCUT میتواند هنگامی که دستور را به صورت تعاملی اجرا میکنید و نمیخواهید در صورت برخورد با میزبانی که فقط از TLS 1.3 پشتیبانی میکند به طور خودکار به /usr/bin/openssl (OPENSSL2) تغییر وضعیت دهید، روی true تنظیم شود.
رتبهبندی (RATING)
این برنامه یک پیادهسازی تقریباً کامل از «SSL Server Rating Guide» متعلق به SSL Labs در https://github.com/ssllabs/research/wiki/SSL-Server-Rating-Guide دارد.
این برنامه یک پیادهسازی مجدد ۱۰۰ درصدی از «SSL Server Test» متعلق به SSL Labs در https://www.ssllabs.com/ssltest/analyze.html نیست، بلکه پیادهسازی مشخصات رتبهبندی فوق است و ممکن است اختلافات جزئی وجود داشته باشد. لطفاً توجه داشته باشید که ما در حال حاضر تا حد امکان به رتبهبندی SSL Labs وفادار ماندهایم. ما مسئولیتی در قبال نحوه رتبهبندی آنها نداریم. پیش از ثبت گزارش اشکال، لطفاً راهنمای رتبهبندی آنها را بررسی کنید.
سلب مسئولیت: داشتن یک نمره خوب لزوماً به معنای داشتن امنیت خوب نیست! رقابتی برای کسب بهترین نمره راه نیندازید، دستکم نه بدون پایش دستتکانیهای کلاینت و نه بدون در نظر گرفتن عقل سلیم. لطفاً توجه داشته باشید که STARTTLS همیشه منجر به محدود شدن حداکثر نمره به T میشود. هر نتیجه دیگری منجر به احساس امنیت کاذب خواهد شد. از TLS استفاده کنید، همچنین RFC 8314 را ببینید. امنیت STARTTLS همیشه توسط کلاینت تعیین میشود، یعنی از طریق بررسی گواهی که برای SMTP روی پورت 25 در اغلب موارد انجام نمیشود. همچنین با DANE یا MTA-STS هیچکس نمیتواند در سمت سرور بررسی کند که آیا کلاینت واقعاً از آن استفاده میکند یا خیر.
در زمان نگارش این متن، این بررسیها وجود ندارند: * بررسی GOLDENDOODLE - در صورت آسیبپذیر بودن باید نمره F بگیرد * مذاکره مجدد ناامن (Insecure renegotiation) - در صورت آسیبپذیر بودن باید نمره F بگیرد * اوراکل پدینگ در بررسی AES-NI CBC MAC (شناسه CVE-2016-2107) - در صورت آسیبپذیر بودن باید نمره F بگیرد * بررسی Sleeping POODLE - در صورت آسیبپذیر بودن باید نمره F بگیرد * اوراکل پدینگ با طول صفر (شناسه CVE-2019-1559) - در صورت آسیبپذیر بودن باید نمره F بگیرد * بررسی Zombie POODLE - در صورت آسیبپذیر بودن باید نمره F بگیرد * سلب اعتماد از تمام گواهیهای قدیمی باقیمانده Symantec PKI - باید نمره T بگیرد * سلب اعتماد از گواهیهای Symantec صادرشده پیش از ژوئن ۲۰۱۶ - باید نمره T بگیرد * تبادل کلید ناشناس (Anonymous key exchange) - باید امتیاز 0 در set_key_str_score() بدهد * تبادل کلید صادراتی (Exportable key exchange) - باید امتیاز 40 در set_key_str_score() بدهد * کلید ضعیف (نقص Debian OpenSSL) - باید امتیاز 0 در set_key_str_score() بدهد
برای پیادهسازی یک سقف نمره جدید، کافی است تابع set_grade_cap() را به همراه نمره و یک دلیل فراخوانی کنید: bash set_grade_cap "D" "Vulnerable to documentation" برای پیادهسازی یک هشدار نمره جدید، تابع set_grade_warning() را با یک پیام فراخوانی کنید: bash set_grade_warning "Documentation is always right" #### پیادهسازی یک بررسی جدید که شامل سقف نمره است: هنگام پیادهسازی یک بررسی جدید (چه آسیبپذیری باشد و چه نباشد) که سقف نمره تعیین میکند، تابع set_rating_state() باید بهروزرسانی شود (یعنی نام متغیر $do_mycheck باید به حلقه اضافه شده و شرط if برای $nr_enabled باید افزایش یابد)
تابع set_rating_state() در صورتی که همه بررسیهای الزامی فعال نباشند، رتبهبندی را به طور خودکار غیرفعال میکند. این امر برای جلوگیری از ارائه نمره گمراهکننده یا نادرست است.
هنگامی که ویرایش جدیدی از مشخصات رتبهبندی ارائه میشود، اقدامات زیر باید انجام شوند: * سقفهای نمره جدید باید یا: ۱. در هر جای مرتبط به اسکریپت اضافه شوند، یا ۲. به فهرست بررسیهای ناموجود بالا اضافه شوند (اگر مورد اول امکانپذیر نباشد) * هشدارهای نمره جدید باید در هر جای مرتبط اضافه شوند * خروجی نسخه بازنگری در تابع run_rating() باید بهروزرسانی شود
مثالها (EXAMPLES)
testssl.sh testssl.sh
یک اجرای پیشفرض را روی https://testssl.sh انجام میدهد (پروتکلها، فهرستهای استاندارد سایفر، اولویتهای سایفر سرور، پنهانداری پیشرو [forward secrecy]، پیشفرضهای سرور، آسیبپذیریها، شبیهسازی کلاینت و رتبهبندی).
-
testssl.sh testssl.net:443
همان اجرای پیشفرض بالا را انجام میدهد با این تفاوت جزئی که testssl.net دارای دو نشانی IPv4 است. هر دو آزموده میشوند.
-
testssl.sh --ip=one --wide https://testssl.net:443
همان بررسیهای بالا را انجام میدهد، با این تفاوت که یک نشانی IP به صورت تصادفی انتخاب میشود. هر جا که امکان داشته باشد خروجیها در قالب عریض (wide) نمایش داده میشوند.
-
testssl.sh -6 https://testssl.net
برخلاف مثال اول، بخش IPv6 را نیز میآزماید -- با این فرض که شما یک شبکه IPv6 دارید و openssl شما از IPv6 پشتیبانی میکند (بالا را ببینید).
-
testssl.sh -t smtp smtp.gmail.com:25
بررسیها از طریق دستتکانی STARTTLS روی پورت متنساده 25 انجام میشوند. این دستور هر IP متعلق به smtp.gmail.com را بررسی میکند.
-
testssl.sh --starttls=imap imap.gmx.net:143
همین کار را روی پورت متنساده IMAP انجام میدهد.
لطفاً توجه داشته باشید که برای پورتهای رمزگذاریشده استاندارد TLS که در آنها دستتکانی STARTTLS ارائه نمیشود، نباید گزینه پروتکل را مشخص کنید: دستور testssl.sh smtp.gmail.com:465 صرفاً رمزگذاری روی پورت SMTPS را بررسی میکند، و دستور testssl.sh imap.gmx.net:993 روی پورت IMAPS. همچنین MongoDB که پشتیبانی از TLS را بدون STARTTLS ارائه میدهد، میتواند مستقیماً آزموده شود..SH "RFCها و استانداردهای دیگر (RFCS AND OTHER STANDARDS)"
- ○
- RFC 2246: The TLS Protocol Version 1.0
- ○
- RFC 2595: Using TLS with IMAP, POP3 and ACAP
- ○
- RFC 2818: HTTP Over TLS
- ○
- RFC 2830: Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security
- ○
- RFC 3207: SMTP Service Extension for Secure SMTP over Transport Layer Security
- ○
- RFC 3501: INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1
- ○
- RFC 4346: The Transport Layer Security (TLS) Protocol Version 1.1
- ○
- RFC 4366: Transport Layer Security (TLS) Extensions
- ○
- RFC 4492: Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS)
- ○
- RFC 5077: Transport Layer Security (TLS) Session Resumption
- ○
- RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2
- ○
- RFC 5280: Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile
- ○
- RFC 5321: Simple Mail Transfer Protocol
- ○
- RFC 5746: Transport Layer Security (TLS) Renegotiation Indication Extension
- ○
- RFC 5804: A Protocol for Remotely Managing Sieve Scripts
- ○
- RFC 6066: Transport Layer Security (TLS) Extensions: Extension Definitions
- ○
- RFC 6101: The Secure Sockets Layer (SSL) Protocol Version 3.0
- ○
- RFC 6120: Extensible Messaging and Presence Protocol (XMPP): Core
- ○
- RFC 6125: Domain-Based Application Service Identity [..]
- ○
- RFC 6797: HTTP Strict Transport Security (HSTS)
- ○
- RFC 6961: The Transport Layer Security (TLS) Multiple Certificate Status Request Extension
- ○
- RFC 7469: Public Key Pinning Extension for HTTP (HPKP)
- ○
- RFC 7507: TLS Fallback Signaling Cipher Suite Value (SCSV) for Preventing Protocol Downgrade Attacks
- ○
- RFC 7627: Transport Layer Security (TLS) Session Hash and Extended Master Secret Extension
- ○
- RFC 7633: X.509v3 Transport Layer Security (TLS) Feature Extension
- ○
- RFC 7465: Prohibiting RC4 Cipher Suites
- ○
- RFC 7685: A Transport Layer Security (TLS) ClientHello Padding Extension
- ○
- RFC 7905: ChaCha20-Poly1305 Cipher Suites for Transport Layer Security (TLS)
- ○
- RFC 7919: Negotiated Finite Field Diffie-Hellman Ephemeral Parameters for Transport Layer Security
- ○
- RFC 8143: Using Transport Layer Security (TLS) with Network News Transfer Protocol (NNTP)
- ○
- RFC 8446: The Transport Layer Security (TLS) Protocol Version 1.3
- ○
- RFC 8701: Applying Generate Random Extensions And Sustain Extensibility (GREASE) to TLS Extensibility
- ○
- W3C CSP: Content Security Policy Level 1-3
- ○
- TLSWG Draft: The Transport Layer Security (TLS) Protocol Version 1.3
وضعیت خروج (EXIT STATUS)
- ○
- 0 اسکریپت testssl.sh با موفقیت و بدون هیچ خطا یا نتیجهٔ مبهمی به پایان رسید.
- ○
- 1 اسکریپت testssl.sh در حین اجرا دقیقاً با یک وضعیت مبهم یا یک خطا مواجه شد.
- ○
- 1+n مشابه مورد قبلی؛ خطاها یا نتایج مبهم با یکدیگر جمع میشوند (همچنین به ازای هر IP).
- ○
- 50-200 برای بازگرداندن امتیاز آسیبپذیری جهت پایش سیستم یا ابزارهای CI رزرو شده است.
- ○
- 242 (ERR_CHILD) فرآیند فرزند یک سیگنال از master دریافت کرد.
- ○
- 244 (ERR_RESOURCE) منابع مورد نیاز testssl.sh قابل خواندن نبودند.
- ○
- 245 (ERR_CLUELESS) وضعیت نامشخص، به دلیل گزینههای کاربر یا خود testssl.sh.
- ○
- 246 (ERR_CONNECT) مشکل در برقراری اتصال.
- ○
- 247 (ERR_DNSLOOKUP) مشکل در تحلیل نامها یا نشانیهای IP.
- ○
- 248 (ERR_OTHERCLIENT) سایر مشکلات کلاینت.
- ○
- 249 (ERR_DNSBIN) مشکل در باینریهای تحلیل DNS.
- ○
- 250 (ERR_OSSLBIN) مشکل در باینری OpenSSL.
- ○
- 251 (ERR_NOSUPPORT) قابلیت درخواستی پشتیبانی نمیشود.
- ○
- 252 (ERR_FNAMEPARSE) فایل ورودی قابل تجزیه نبود.
- ○
- 253 (ERR_FCREATE) فایل خروجی قابل ایجاد نبود.
- ○
- 254 (ERR_CMDLINE) خط فرمان قابل تجزیه نبود.
- ○
- 255 (ERR_BASH) نسخهٔ Bash نادرست است.
فایلها (FILES)
etc/*pem مخازن گواهی مربوط به Apple، Linux، Mozilla Firefox، Windows و Java هستند.
etc/client-simulation.txt حاوی دادههای شبیهسازی کلاینت است.
etc/cipher-mapping.txt فایل الزامی حاوی نگاشت نام مجموعههای رمزشناسی OpenSSL به نامهای IANA / استفادهشده در RFCها را فراهم میکند.
etc/tls_data.txt فایل الزامی برای الگوریتمهای رمزنگاری (سوکتهای bash) و دادههای کلید را فراهم میکند.
نویسندگان (AUTHORS)
توسعهیافته توسط Dirk Wetter، David Cooper و بسیاری دیگر؛ فایل CREDITS.md را ببینید.
کپیرایت و تکثیر (COPYRIGHT)
حق نشر © 2012 Dirk Wetter. مجوز GPLv2: بنیاد نرمافزارهای آزاد (Free Software Foundation, Inc.). این نرمافزار آزاد است: شما میتوانید تحت شرایط مجوز، آن را تغییر داده و بازتوزیع کنید؛ فایل LICENSE را ببینید.
ذکر منبع (انتساب) برای آیندهٔ این پروژه - همچنین در اینترنت - مهم است. بنابراین اگر شما پویشگری مبتنی بر testssl.sh را به عنوان یک سرویس عمومی و/یا تجاری در اینترنت ارائه میدهید، اکیداً توصیه میشود به مخاطبان خود اعلام کنید که از این برنامه استفاده میکنید و این برنامه را از کجا میتوان تهیه کرد. این کار به ما کمک میکند تا اصلاحات باگ، بازخوردهای دیگر و مشارکتهای بیشتری دریافت کنیم.
استفاده بدون هرگونه ضمانت (WITHOUT ANY WARRANTY). با مسئولیت خودتان استفاده کنید (USE at your OWN RISK)!.SH "محدودیتها (LIMITATION)" تمامی پلتفرمهای بومی Windows که Linux را شبیهسازی میکنند، به کند بودن معروف هستند.
گزارش باگها (BUGS)
احتمالاً وجود دارند. موارد شناختهشدهٔ کنونی و رابط ثبت باگهای جدید: https://testssl.sh/bugs .
همچنین ببینید (SEE ALSO)
ciphers(1)، openssl(1)، s_client(1)، x509(1)، verify(1)، ocsp(1)، crl(1)، bash(1) و وبگاههای https://testssl.sh و https://github.com/testssl/testssl.sh .
| December 2021 |