OPENSSL-S_CLIENT(1ssl) OpenSSL OPENSSL-S_CLIENT(1ssl)

openssl-s_client - ابزار کلاینت عمومی SSL/TLS

openssl s_client [-help] [-ssl_config section] [-connect host:port] [-host hostname] [-port port] [-bind host:port] [-proxy host:port] [-proxy_user userid] [-proxy_pass arg] [-unix path] [-4] [-6] [-quic] [-servername name] [-noservername] [-verify depth] [-verify_return_error] [-verify_quiet] [-verifyCAfile filename] [-verifyCApath dir] [-verifyCAstore uri] [-cert filename] [-certform DER|PEM|P12] [-cert_chain filename] [-build_chain] [-CRL filename] [-CRLform DER|PEM] [-crl_download] [-key filename|uri] [-keyform DER|PEM|P12|ENGINE] [-pass arg] [-chainCAfile filename] [-chainCApath directory] [-chainCAstore uri] [-requestCAfile filename] [-dane_tlsa_domain domain] [-dane_tlsa_rrdata rrdata] [-dane_ee_no_namechecks] [-reconnect] [-showcerts] [-prexit] [-no-interactive] [-debug] [-trace] [-nocommands] [-adv] [-security_debug] [-security_debug_verbose] [-msg] [-timeout] [-mtu size] [-no_ems] [-keymatexport label] [-keymatexportlen len] [-msgfile filename] [-nbio_test] [-state] [-nbio] [-crlf] [-ign_eof] [-no_ign_eof] [-psk_identity identity] [-psk key] [-psk_session file] [-quiet] [-sctp] [-sctp_label_bug] [-fallback_scsv] [-async] [-maxfraglen len] [-max_send_frag] [-split_send_frag] [-max_pipelines] [-read_buf] [-ignore_unexpected_eof] [-no_tx_cert_comp] [-no_rx_cert_comp] [-brief] [-starttls protocol] [-xmpphost hostname] [-name hostname] [-tlsextdebug] [-sess_out filename] [-sess_in filename] [-serverinfo types] [-status] [-ocsp_check_leaf] [-ocsp_check_all] [-alpn protocols] [-nextprotoneg protocols] [-ct] [-noct] [-ctlogfile] [-keylogfile file] [-early_data file] [-enable_pha] [-use_srtp value] [-srpuser value] [-srppass value] [-srp_lateuser] [-srp_moregroups] [-srp_strength number] [-ktls] [-tfo] [-nameopt option] [-no_ssl3] [-no_tls1] [-no_tls1_1] [-no_tls1_2] [-no_tls1_3] [-ssl3] [-tls1] [-tls1_1] [-tls1_2] [-tls1_3] [-dtls] [-dtls1] [-dtls1_2] [-xkey infile] [-xcert file] [-xchain file] [-xchain_build file] [-xcertform DER|PEM]> [-xkeyform DER|PEM]> [-CAfile file] [-no-CAfile] [-CApath dir] [-no-CApath] [-CAstore uri] [-no-CAstore] [-bugs] [-no_comp] [-comp] [-no_ticket] [-serverpref] [-client_renegotiation] [-legacy_renegotiation] [-no_renegotiation] [-no_resumption_on_reneg] [-legacy_server_connect] [-no_legacy_server_connect] [-no_etm] [-allow_no_dhe_kex] [-prefer_no_dhe_kex] [-prioritize_chacha] [-strict] [-sigalgs algs] [-client_sigalgs algs] [-groups groups] [-curves curves] [-named_curve curve] [-cipher ciphers] [-ciphersuites 1.3ciphers] [-min_protocol minprot] [-max_protocol maxprot] [-record_padding padding] [-debug_broken_protocol] [-no_middlebox] [-rand files] [-writerand file] [-provider name] [-provider-path path] [-provparam [name:]key=value] [-propquery propq] [-engine id] [-ssl_client_engine id] [-allow_proxy_certs] [-attime timestamp] [-no_check_time] [-check_ss_sig] [-crl_check] [-crl_check_all] [-explicit_policy] [-extended_crl] [-ignore_critical] [-inhibit_any] [-inhibit_map] [-partial_chain] [-policy arg] [-policy_check] [-policy_print] [-purpose purpose] [-suiteB_128] [-suiteB_128_only] [-suiteB_192] [-trusted_first] [-no_alt_chains] [-use_deltas] [-auth_level num] [-verify_depth num] [-verify_email email] [-verify_hostname hostname] [-verify_ip ip] [-verify_name name] [-x509_strict] [-issuer_checks] [-enable_server_rpk] [-enable_client_rpk] [host:port]

این دستور یک کلاینت عمومی SSL/TLS را پیاده‌سازی می‌کند که با استفاده از SSL/TLS به یک میزبان راه دور متصل می‌شود. این ابزار، یک ابزار تشخیصی و عیب‌یابی بسیار مفید برای سرورهای SSL است.

علاوه بر گزینه‌های زیر، این دستور از گزینه‌های عمومی و مخصوص کلاینت که در بخش "دستورات خط فرمان پشتیبانی‌شده" صفحه راهنمای SSL_CONF_cmd(3) مستند شده‌اند نیز پشتیبانی می‌کند.

چاپ یک پیام راهنمای نحوه استفاده.
استفاده از بخش مشخص‌شده در فایل پیکربندی برای پیکربندی شیء SSL_CTX.
این گزینه میزبان و پورت اختیاری را برای برقراری اتصال مشخص می‌کند. می‌توان به جای این گزینه، از آرگومان مکانی اختیاری مقصد برای تعیین میزبان و پورت استفاده کرد. اگر نه این گزینه و نه آرگومان مکانی مقصد مشخص نشده باشند، تلاش می‌شود به میزبان محلی (localhost) روی پورت ۴۴۳۳ متصل شود. اگر رشته میزبان یک نشانی IPv6 باشد، باید در "[" و "]" قرار گیرد.
میزبان برای اتصال؛ به جای آن از -connect استفاده کنید.
اتصال به پورت مشخص‌شده؛ به جای آن از -connect استفاده کنید.
این گزینه نشانی میزبان و/یا پورت را برای مقیدسازی (bind) به عنوان مبدأ اتصال مشخص می‌کند. برای سوکت‌های دامنه یونیکس، پورت نادیده گرفته شده و از میزبان به عنوان نشانی سوکت مبدأ استفاده می‌شود. اگر رشته میزبان یک نشانی IPv6 باشد، باید در "[" و "]" قرار گیرد.
هنگامی که همراه با فلگ -connect استفاده شود، برنامه از میزبان و پورت مشخص‌شده با این فلگ استفاده کرده و یک دستور HTTP CONNECT برای اتصال به سرور مورد نظر ارسال می‌کند. اگر رشته میزبان یک نشانی IPv6 باشد، باید در "[" و "]" قرار گیرد.
هنگامی که همراه با فلگ -proxy استفاده شود، برنامه تلاش خواهد کرد با استفاده از احراز هویت پایه‌ای (base64) با پروکسی مشخص‌شده احراز هویت کند. توجه: احراز هویت پایه‌ای ناامن است؛ اطلاعات اعتباری قبل از برقراری هرگونه نشست TLS/SSL در کدگذاری base64 که به سادگی قابل برگشت است به پروکسی ارسال می‌شود. بنابراین، این اطلاعات اعتباری به راحتی توسط هر کسی که بتواند ترافیک شبکه را شنود یا ردیابی کند قابل بازیابی است. با احتیاط استفاده کنید.
منبع گذرواژه پروکسی، همراه با فلگ -proxy_user استفاده می‌شود. برای اطلاعات بیشتر درباره قالب arg به openssl-passphrase-options(1) مراجعه کنید.
اتصال از طریق سوکت دامنه یونیکس مشخص‌شده.
-4
فقط استفاده از IPv4.
-6
فقط استفاده از IPv6.
اتصال با استفاده از پروتکل QUIC. در صورت تعیین این گزینه، گزینه -alpn نیز باید ارائه شود.
تنظیم افزونه TLS SNI (نشانگر نام سرور) در پیام ClientHello با مقدار داده‌شده. اگر -servername ارائه نشود، افزونه TLS SNI در صورت تطابق نام داده‌شده به -connect با قالب نام DNS، با آن مقدار پر می‌شود. اگر -connect نیز ارائه نشده باشد، مقدار SNI برابر با "localhost" تنظیم می‌شود. این رفتار از زمان OpenSSL 1.1.1 پیش‌فرض است.

اگرچه SNI معمولاً باید یک نام DNS باشد و نه یک نشانی IP، در صورت ارائه -servername همان نام ارسال خواهد شد، صرف‌نظر از اینکه یک نام DNS باشد یا خیر.

این گزینه نمی‌تواند همراه با -noservername استفاده شود.

از ارسال افزونه SNI (نشانگر نام سرور) در پیام ClientHello جلوگیری می‌کند. نمی‌تواند همراه با گزینه‌های -servername یا -dane_tlsa_domain استفاده شود.
گواهی کلاینت برای استفاده، در صورتی که توسط سرور درخواست شده باشد. پیش‌فرض عدم استفاده از گواهی است.

زنجیره گواهی کلاینت را می‌توان با استفاده از -cert_chain مشخص کرد.

قالب فایل گواهی کلاینت برای استفاده؛ به طور پیش‌فرض نامشخص است. برای جزئیات به openssl-format-options(1) مراجعه کنید.
یک فایل یا شناسه یکتای منبع (URI) از گواهی‌های نامعتمد برای استفاده هنگام تلاش جهت ساخت زنجیره گواهی مرتبط با گواهی مشخص‌شده از طریق گزینه -cert. ورودی می‌تواند در قالب PEM ،DER یا PKCS#12 باشد.
مشخص می‌کند که آیا برنامه باید زنجیره گواهی کلاینت را برای ارائه به سرور بسازد یا خیر.
فایل CRL برای استفاده جهت بررسی گواهی سرور.
قالب فایل CRL؛ به طور پیش‌فرض نامشخص است. برای جزئیات به openssl-format-options(1) مراجعه کنید.
بارگیری CRL از نقاط توزیع مشخص‌شده در گواهی. توجه داشته باشید که اگر گزینه -crl_check ارائه نشود، این گزینه نادیده گرفته می‌شود. همچنین حداکثر اندازه CRL توسط تابع X509_CRL_load_http(3) محدود شده است.
کلید خصوصی کلاینت برای استفاده. در صورت عدم تعیین، از فایل گواهی برای خواندن کلید نیز استفاده خواهد شد.
قالب کلید؛ به طور پیش‌فرض نامشخص است. برای جزئیات به openssl-format-options(1) مراجعه کنید.
منبع گذرواژه کلید خصوصی و فایل گواهی. برای اطلاعات بیشتر درباره قالب arg به openssl-passphrase-options(1) مراجعه کنید.
عمق اعتبارسنجی مورد استفاده. این گزینه حداکثر طول زنجیره گواهی سرور را مشخص کرده و اعتبارسنجی گواهی سرور را فعال می‌کند. مگر اینکه گزینه -verify_return_error داده شده باشد، عملیات اعتبارسنجی پس از بروز خطا ادامه می‌یابد تا بتوان تمام مشکلات مربوط به زنجیره گواهی را مشاهده کرد. به عنوان یک اثر جانبی، اتصال هرگز به دلیل شکست در اعتبارسنجی گواهی سرور ناموفق نخواهد شد.

به طور پیش‌فرض، اعتبارسنجی گواهی‌های سرور و زنجیره آن‌ها با توجه به هدف سرور (D)TLS ("sslserver") انجام می‌شود. برای جزئیات به "افزونه‌های گواهی" در openssl-verification-options(1) مراجعه کنید.

اعتبارسنجی گواهی سرور را همانند -verify فعال می‌کند، اما به جای ادامه دادن، خطاهای اعتبارسنجی را بازمی‌گرداند. این امر معمولاً باعث لغو دست‌تکانی با یک خطای مهلک می‌شود.
محدود کردن خروجی اعتبارسنجی تنها به خطاها.
یک فایل در قالب PEM حاوی گواهی‌های معتمد جهت استفاده برای اعتبارسنجی گواهی سرور.
پوشه‌ای حاوی گواهی‌های معتمد جهت استفاده برای اعتبارسنجی گواهی سرور. این پوشه باید در "قالب هش" باشد، برای اطلاعات بیشتر به openssl-verify(1) مراجعه کنید.
شناسه یکتای منبع (URI) یک مخزن حاوی گواهی‌های معتمد جهت استفاده برای اعتبارسنجی گواهی سرور.

هنگامی که هر یک از گزینه‌های -verifyCAfile، -verifyCApath یا -verifyCAstore مشخص شوند، در یک مخزن اعتبارسنجی مجزا بارگذاری شده (از طریق SSL_CTX_set1_verify_cert_store(3)) و به جای مخزن ساخته‌شده از -CAfile، -CApath و -CAstore برای اعتبارسنجی گواهی سرور به کار می‌روند.

یک فایل در قالب PEM حاوی گواهی‌های معتمد جهت استفاده در زمان تلاش برای ساخت زنجیره گواهی کلاینت.
پوشه‌ای حاوی گواهی‌های معتمد برای ساخت زنجیره گواهی کلاینت ارائه‌شده به سرور. این پوشه باید در "قالب هش" باشد، برای اطلاعات بیشتر به openssl-verify(1) مراجعه کنید.
شناسه یکتای منبع (URI) یک مخزن حاوی گواهی‌های معتمد برای استفاده در زمان تلاش جهت ساخت زنجیره گواهی کلاینت. این URI می‌تواند نشان‌دهنده یک گواهی تکی یا مجموعه‌ای از گواهی‌ها باشد. در مورد URIهای دارای طرح‌واره "file:"، بسته به اینکه URI به یک پوشه یا یک فایل تکی اشاره داشته باشد، این گزینه مانند -chainCAfile یا -chainCApath عمل می‌کند. برای اطلاعات بیشتر درباره طرح‌واره "file:" به ossl_store-file(7) مراجعه کنید.
فایلی حاوی فهرستی از گواهی‌ها که نام‌های موضوعی (subject names) آن‌ها در افزونه certificate_authorities به سرور ارسال خواهد شد. فقط در TLS 1.3 پشتیبانی می‌شود.
احراز هویت RFC6698/RFC7671 DANE TLSA را فعال کرده و دامنه پایه TLSA را مشخص می‌کند که تبدیل به راهنمای پیش‌فرض SNI و شناسه مرجع اصلی برای بررسی نام میزبان می‌شود. این گزینه باید همراه با حداقل یک مورد از گزینه -dane_tlsa_rrdata در زیر استفاده شود.

هنگامی که احراز هویت DANE موفقیت‌آمیز باشد، خروجی تشخیصی شامل کمترین عمق (نزدیک‌ترین به 0) خواهد بود که در آن یک رکورد TLSA گواهی زنجیره را احراز هویت کرده است. هنگامی که آن رکورد TLSA یک کلید عمومی لنگر اعتماد (trust anchor) "2 1 0" باشد که بالاترین گواهی زنجیره را امضا کرده است (به جای مطابقت با آن)، نتیجه به صورت "TA public key verified" گزارش می‌شود. در غیر این صورت، رکورد TLSA یا با "matched TA certificate" در یک عمق مثبت مطابقت دارد یا با "matched EE certificate" در عمق 0.

یک یا چند بار برای تعیین فیلدهای RRDATA در مجموعه رکوردهای DANE TLSA مرتبط با سرویس هدف استفاده می‌شود. مقدار rrdata در "قالب نمایشی" مشخص می‌شود، یعنی چهار فیلد جداشده با فاصله که کاربرد، انتخاب‌گر، نوع تطابق و داده‌های مرتبط را مشخص می‌کنند؛ که آخرین فیلد به صورت هگزادسیمال کدگذاری می‌شود. فاصله‌های خالی اختیاری در فیلد داده‌های مرتبط نادیده گرفته می‌شوند. به عنوان مثال:
$ openssl s_client -brief -starttls smtp \
  -connect smtp.example.com:25 \
  -dane_tlsa_domain smtp.example.com \
  -dane_tlsa_rrdata "2 1 1
    B111DD8A1C2091A89BD4FD60C57F0716CCE50FEEFF8137CDBEE0326E 02CF362B" \
  -dane_tlsa_rrdata "2 1 1
    60B87575447DCBA2A36B7D11AC09FB24A9DB406FEE12D2CC90180517 616E8A18"
...
Verification: OK
Verified peername: smtp.example.com
DANE TLSA 2 1 1 ...ee12d2cc90180517616e8a18 matched TA certificate at depth 1
...
این گزینه بررسی نام سرور را هنگام احراز هویت از طریق رکوردهای TLSA در DANE-EE(3) غیرفعال می‌کند. برای برخی برنامه‌ها، به ویژه مرورگرهای وب، غیرفعال کردن بررسی نام به دلیل حملات "اشتراک کلید ناشناخته" (unknown key share) امن نیست؛ در این حمله یک سرور مخرب می‌تواند کلاینت را متقاعد کند که اتصال به سرور قربانی، در واقع یک اتصال امن به سرور مخرب است. سرور مخرب سپس ممکن است بتواند محدودیت‌های اسکریپت‌نویسی متقاطع (cross-origin) را نقض کند. بنابراین، بر خلاف متن RFC7671، بررسی نام به طور پیش‌فرض برای رکوردهای TLSA در DANE-EE(3) فعال است و می‌توان آن را در برنامه‌هایی که انجام این کار امن است غیرفعال کرد. به ویژه، کلاینت‌های SMTP و XMPP باید این گزینه را تنظیم کنند زیرا رکوردهای SRV و MX از قبل امکان هدایت اتصالات کلاینت به هر سرور دلخواهی را برای دامنه راه دور فراهم می‌کنند و در هر صورت کلاینت‌های SMTP و XMPP اسکریپت‌های بارگیری‌شده از سرورهای راه دور را اجرا نمی‌کنند.
اتصال مجدد ۵ بار به همان سرور با استفاده از همان شناسه نشست (session ID)؛ این گزینه می‌تواند به عنوان آزمایشی برای بررسی عملکرد صحیح کش‌سازی نشست به کار رود.
فهرست گواهی‌های سرور را همان‌طور که توسط سرور ارسال شده نمایش می‌دهد: این فهرست فقط شامل گواهی‌هایی است که سرور ارسال کرده است (به همان ترتیبی که سرور فرستاده است). این فهرست یک زنجیره تاییدشده نیست.
چاپ اطلاعات نشست در هنگام خروج برنامه. این گزینه همیشه تلاش می‌کند اطلاعات را حتی در صورت ناموفق بودن اتصال چاپ کند. در حالت عادی، اطلاعات تنها در صورت موفقیت‌آمیز بودن اتصال چاپ می‌شود. این گزینه از این جهت مفید است که رمز مورد استفاده ممکن است مجدداً مذاکره شود یا ممکن است اتصال به دلیل نیاز به گواهی کلاینت یا درخواست آن پس از تلاش برای دسترسی به یک URL خاص با شکست مواجه شود. توجه: خروجی تولیدشده توسط این گزینه همیشه دقیق نیست زیرا ممکن است اتصال هرگز برقرار نشده باشد.
از این فلگ می‌توان برای اجرای کلاینت در یک حالت غیرتعاملی استفاده کرد.
چاپ وضعیت‌های نشست SSL.
چاپ اطلاعات اشکال‌زدایی گسترده شامل دامپ هگزادسیمال تمامی ترافیک.
عدم استفاده از حروف دستورات تعاملی.
استفاده از حالت دستورات پیشرفته.
فعال‌سازی پیام‌های اشکال‌زدایی امنیتی.
ارائه خروجی اشکال‌زدایی امنیتی با جزئیات بیشتر.
نمایش پیام‌های پروتکل.
فعال‌سازی مهلت زمانی ارسال/دریافت در اتصالات DTLS.
تنظیم MTU لایه پیوند داده به اندازه مشخص‌شده.
غیرفعال‌سازی مذاکره راز اصلی گسترش‌یافته (Extended master secret).
صادر کردن مواد کلیدسازی با استفاده از برچسب مشخص‌شده.
صادر کردن تعداد بایت مشخص‌شده از مواد کلیدسازی؛ پیش‌فرض ۲۰ است.

نمایش تمام پیام‌های پروتکل همراه با دامپ هگزادسیمال.

نمایش خروجی ردگیری پرجزئیات پیام‌های پروتکل.
فایلی برای ارسال خروجی -msg یا -trace به آن؛ پیش‌فرض خروجی استاندارد است.
آزمایش I/O غیرمسدودکننده.
فعال‌سازی I/O غیرمسدودکننده.
این گزینه کاراکتر خط جدید از ترمینال را به CR+LF تبدیل می‌کند که برای برخی سرورها الزامی است.
جلوگیری از قطع اتصال هنگام رسیدن به انتهای فایل (EOF) در ورودی. این گزینه به طور ضمنی -nocommands را نیز فعال می‌کند.
جلوگیری از چاپ اطلاعات نشست و گواهی. این گزینه به طور ضمنی گزینه‌های -ign_eof و -nocommands را نیز فعال می‌کند.
قطع اتصال هنگام رسیدن به انتهای فایل در ورودی. می‌تواند برای لغو اثر ضمنی -ign_eof پس از -quiet استفاده شود.
استفاده از شناسه PSK با مقدار identity هنگام استفاده از یک مجموعه رمز PSK. مقدار پیش‌فرض "Client_identity" (بدون نقل قول) است.
استفاده از کلید PSK با مقدار key هنگام استفاده از مجموعه رمز PSK. کلید به صورت یک عدد هگزادسیمال بدون پیشوند 0x ارائه می‌شود، به عنوان مثال -psk 1a2b3c4d. برای استفاده از یک رمز PSK، ارائه این گزینه الزامی است.
استفاده از داده‌های SSL_SESSION با کدگذاری PEM ذخیره‌شده در file به عنوان پایه یک PSK. توجه داشته باشید که این ویژگی فقط در صورت مذاکره TLSv1.3 عمل خواهد کرد.
استفاده از پروتکل انتقال SCTP به جای UDP در DTLS. باید همراه با گزینه‌های -dtls، -dtls1 یا -dtls1_2 استفاده شود. این گزینه تنها در صورتی در دسترس است که پشتیبانی از SCTP در OpenSSL فعال شده باشد.
استفاده از رفتار نادرست پیاده‌سازی‌های قدیمی‌تر OpenSSL هنگام محاسبه اسرار مشترک جفت‌نقطه پایانی برای DTLS/SCTP. این گزینه امکان برقراری ارتباط با پیاده‌سازی‌های قدیمی دارای اشکال را فراهم می‌کند، اما سازگاری با پیاده‌سازی‌های صحیح را برهم می‌زند. باید همراه با -sctp استفاده شود. این گزینه فقط در صورتی در دسترس است که پشتیبانی از SCTP در OpenSSL فعال شده باشد.
ارسال TLS_FALLBACK_SCSV در پیام ClientHello.
فعال‌سازی حالت ناهمگام. عملیات رمزنگاری به صورت ناهمگام انجام خواهد شد. این حالت تنها زمانی اثرگذار خواهد بود که یک موتور با قابلیت ناهمگام از طریق گزینه -engine نیز استفاده شده باشد. برای اهداف آزمایشی، می‌توان از موتور آزمایشی ناهمگام (dasync) در صورت وجود استفاده کرد.
فعال‌سازی مذاکره حداکثر طول قطعه؛ مقادیر مجاز عبارتند از 512، 1024، 2048 و 4096.
حداکثر اندازه قطعه داده برای ارسال. برای اطلاعات بیشتر به SSL_CTX_set_max_send_fragment(3) مراجعه کنید.
اندازه مورد استفاده برای تقسیم داده‌ها در خطوط لوله رمزگذاری. اگر داده‌های نوشته‌شده در یک مرحله بیش از این مقدار باشد، به چندین خط لوله، تا سقف حداکثر تعداد خطوط لوله تعریف‌شده توسط max_pipelines تقسیم می‌شود. این گزینه تنها در صورتی موثر است که یک مجموعه رمز مناسب مذاکره شده باشد، موتوری با پشتیبانی از خط لوله بارگذاری شده باشد و مقدار max_pipelines بزرگ‌تر از ۱ باشد. برای اطلاعات بیشتر به SSL_CTX_set_split_send_fragment(3) مراجعه کنید.
حداکثر تعداد خطوط لوله رمزگذاری/رمزگشایی مورد استفاده. این گزینه تنها در صورتی مؤثر خواهد بود که موتوری با قابلیت پشتیبانی از خط لوله (مانند موتور dasync) بارگذاری شده و یک مجموعه رمز مناسب مذاکره شده باشد. مقدار پیش‌فرض ۱ است. برای اطلاعات بیشتر به SSL_CTX_set_max_pipelines(3) مراجعه کنید.
اندازه پیش‌فرض بافر خواندن برای استفاده در اتصالات. این گزینه تنها در صورتی موثر خواهد بود که اندازه بافر بزرگ‌تر از اندازه‌ای باشد که در غیر این صورت استفاده می‌شد و خط لوله در حال استفاده باشد (برای اطلاعات بیشتر به SSL_CTX_set_default_read_buffer_len(3) مراجعه کنید).
برخی از پیاده‌سازی‌های TLS هنگام خاموش‌سازی و قطع اتصال، هشدار اجباری close_notify را ارسال نمی‌کنند. اگر برنامه تلاش کند منتظر هشدار close_notify بماند اما طرف مقابل اتصال را بدون ارسال آن ببندد، خطا رخ می‌دهد. با فعال بودن این گزینه، طرف مقابل نیازی به ارسال هشدار close_notify ندارد و با یک اتصال بسته‌شده به گونه‌ای رفتار می‌شود که گویی هشدار close_notify دریافت شده است. برای اطلاعات بیشتر درباره خاتمه دادن به یک اتصال، به SSL_shutdown(3) مراجعه کنید.
پشتیبانی از ارسال گواهی‌های فشرده‌شده TLSv1.3 را غیرفعال می‌کند.
پشتیبانی از دریافت گواهی‌های فشرده‌شده TLSv1.3 را غیرفعال می‌کند.
ارائه یک خلاصه کوتاه از پارامترهای اتصال به جای خروجی پرجزئیات معمول.
ارسال پیام(های) اختصاصی پروتکل جهت تغییر ارتباط به TLS. protocol یک کلیدواژه برای پروتکل مورد نظر است. در حال حاضر، کلیدواژه‌های پشتیبانی‌شده عبارتند از "smtp"، "pop3"، "imap"، "ftp"، "xmpp"، "xmpp-server"، "irc"، "postgres"، "mysql"، "lmtp"، "nntp"، "sieve" و "ldap".
این گزینه، هنگامی که همراه با "-starttls xmpp"; یا "-starttls xmpp-server" استفاده شود، میزبان را برای صفت "to" در عنصر استریم مشخص می‌کند. اگر این گزینه مشخص نشود، از میزبانی که با "-connect" تعیین شده است استفاده خواهد شد.

این گزینه نام مستعاری برای گزینه -name جهت پروتکل‌های "xmpp" و "xmpp-server" است.

از این گزینه برای مشخص کردن اطلاعات نام میزبان برای پروتکل‌های مختلف مورد استفاده همراه با گزینه -starttls استفاده می‌شود. در حال حاضر تنها پروتکل‌های "xmpp"، "xmpp-server"، "smtp" و "lmtp" می‌توانند از این گزینه -name بهره ببرند.

اگر این گزینه همراه با "-starttls xmpp"; یا "-starttls xmpp-server" استفاده شود، میزبان را برای صفت "to" در عنصر استریم مشخص می‌کند. اگر این گزینه مشخص نشود، از میزبان مشخص‌شده با "-connect" استفاده خواهد شد.

اگر این گزینه همراه با "-starttls lmtp"; یا "-starttls smtp"; به کار رود، به ترتیب نام مورد استفاده در پیام "LMTP LHLO" یا "SMTP EHLO" را مشخص می‌کند. در صورت عدم تعیین، از "mail.example.com" استفاده خواهد شد.

چاپ یک دامپ هگزادسیمال از تمام افزونه‌های TLS دریافت‌شده از سرور.
خروجی دادن نشست SSL به filename.
بارگذاری نشست SSL از filename. کلاینت تلاش خواهد کرد اتصال را از این نشست از سر گیرد.
فهرستی از انواع افزونه‌های TLS جداشده با کاما (اعدادی بین ۰ تا ۶۵۵۳۵). هر نوع به عنوان یک افزونه خالی TLS در ClientHello ارسال خواهد شد. پاسخ سرور (در صورت وجود) کدگذاری شده و به عنوان یک فایل PEM نمایش داده می‌شود.
ارسال درخواست وضعیت گواهی به سرور (OCSP stapling). پاسخ سرور (در صورت وجود) چاپ می‌شود.
الزام به انجام بررسی وضعیت گواهی سرور (نهاد نهایی)، که در آن هرگونه پاسخ OCSP ارائه‌شده در دست‌تکانی TLS (توسط اصطلاحاً "OCSP stapling") ابتدا امتحان می‌شود. اگر پاسخ معتبر و قطعی OCSP یافت نشود، در صورت فعال بودن بررسی مبتنی بر CRL به عنوان پشتیبان امتحان می‌شود، در غیر این صورت بررسی وضعیت با شکست مواجه می‌گردد.

این گزینه مستلزم -status است.

مشابه گزینه قبل، اما الزام به انجام بررسی وضعیت گواهی برای زنجیره صادرکننده گواهی سرور نیز دارد (یعنی گواهی‌های میانی CA، به استثنای لنگر اعتماد).

این گزینه مستلزم گزینه‌های -status و -ocsp_check_leaf است.

این فلگ‌ها به ترتیب افزونه‌های مذاکره پروتکل لایه کاربرد (ALPN) یا مذاکره پروتکل بعدی (NPN) را فعال می‌کنند. ALPN استاندارد IETF بوده و جایگزین NPN شده است. فهرست protocols فهرستی از نام‌های پروتکل جداشده با کاما است که کلاینت باید پشتیبانی از آن‌ها را اعلام کند. این فهرست باید ابتدا حاوی مطلوب‌ترین پروتکل‌ها باشد. نام‌های پروتکل رشته‌های اسکی قابل چاپ هستند، به عنوان مثال "http/1.1" یا "spdy/3". اگر از -tls1_3 استفاده شود، فلگ -nextprotoneg نمی‌تواند مشخص شود.
از یکی از این دو گزینه برای کنترل فعال بودن شفافیت گواهی (CT) با (-ct) یا غیرفعال بودن آن با (-noct) استفاده کنید. اگر CT فعال باشد، برچسب‌های زمانی گواهی امضاشده (SCTها) از سرور درخواست شده و در پایان دست‌تکانی گزارش می‌شوند.

فعال‌سازی CT همچنین OCSP stapling را فعال می‌کند، زیرا این یکی از روش‌های تحویل ممکن برای SCTها است.

فایلی حاوی فهرستی از لاگ‌های شناخته‌شده شفافیت گواهی (Certificate Transparency). برای اطلاع از قالب مورد انتظار فایل به SSL_CTX_set_ctlog_list_file(3) مراجعه کنید.
اسرار TLS را به انتهای فایل لاگ کلید مشخص‌شده اضافه می‌کند تا برنامه‌های خارجی (مانند Wireshark) بتوانند اتصالات TLS را رمزگشایی کنند.
محتوای فایل مشخص‌شده را خوانده و تلاش می‌کند آن را به عنوان داده اولیه (early data) به سرور ارسال کند. این ویژگی تنها در نشست‌های ادامه‌یافته‌ای کار می‌کند که از داده اولیه پشتیبانی کنند و سرور داده اولیه را بپذیرد.
فقط برای TLSv1.3، افزونه احراز هویت پس از دست‌تکانی (Post-Handshake Authentication) را ارسال می‌کند. این عمل صرف‌نظر از اینکه گواهی از طریق -cert ارائه شده باشد یا خیر اتفاق می‌افتد.
پیشنهاد مدیریت کلید SRTP، که در آن value یک فهرست از پروفایل‌های جداشده با دونقطه است.
تنظیم نام کاربری SRP به مقدار مشخص‌شده. این گزینه منسوخ شده است.
تنظیم گذرواژه SRP به مقدار مشخص‌شده. این گزینه منسوخ شده است.
نام کاربری SRP برای دومین پیام ClientHello. این گزینه منسوخ شده است.
تحمل مقادیری غیر از مقادیر شناخته‌شده g و N. این گزینه منسوخ شده است.
تنظیم حداقل طول قابل قبول (به بیت) برای N. این گزینه منسوخ شده است.
فعال‌سازی Kernel TLS برای ارسال و دریافت. این گزینه در OpenSSL 3.2.0 معرفی شد. از زمان OpenSSL 3.2.0، قابلیت Kernel TLS به طور پیش‌فرض غیرفعال است.
فعال‌سازی برقراری اتصالات از طریق TCP fast open (RFC7413).
به "گزینه‌های نسخه TLS" در openssl(1) مراجعه کنید.
این گزینه‌ها استفاده از DTLS را به جای TLS مشخص می‌کنند. به "گزینه‌های نسخه TLS" در openssl(1) مراجعه کنید.
مشخص می‌کند که نام‌های موضوع یا صادرکننده چگونه نمایش داده شوند. برای جزئیات به openssl-namedisplay-options(1) مراجعه کنید.
تنظیم گزینه‌های پیشرفته اعتبارسنجی گواهی. برای جزئیات به "گزینه‌های اعتبارسنجی پیشرفته" در openssl-verification-options(1) مراجعه کنید.
برای جزئیات به "گزینه‌های گواهی معتمد" در openssl-verification-options(1) مراجعه کنید.
برای جزئیات به "دستورات خط فرمان پشتیبانی‌شده" در SSL_CONF_cmd(3) مراجعه کنید.
برای جزئیات به "گزینه‌های وضعیت تصادفی" در openssl(1) مراجعه کنید.
به "گزینه‌های ارائه‌دهنده" در openssl(1)، provider(7) و property(7) مراجعه کنید.
به "گزینه‌های موتور" در openssl(1) مراجعه کنید. این گزینه منسوخ شده است.
مشخص کردن موتوری که برای عملیات گواهی کلاینت استفاده می‌شود.
تنظیم گزینه‌های گوناگون اعتبارسنجی زنجیره گواهی. برای جزئیات به "گزینه‌های اعتبارسنجی" در openssl-verification-options(1) مراجعه کنید.

خطاهای اعتبارسنجی به منظور اشکال‌زدایی نمایش داده می‌شوند، اما اجرای دستور ادامه خواهد یافت مگر اینکه از گزینه -verify_return_error استفاده شده باشد.

فعال‌سازی پشتیبانی از دریافت کلیدهای عمومی خام (RFC7250) از سرور. استفاده از گواهی‌های X.509 توسط سرور اختیاری می‌شود و سرورهایی که از کلیدهای عمومی خام پشتیبانی می‌کنند می‌توانند آن‌ها را به کار گیرند. سرورهایی که از کلیدهای عمومی خام پشتیبانی نمی‌کنند یا استفاده از گواهی‌های X.509 را ترجیح می‌دهند، همچنان می‌توانند طبق معمول گواهی‌های X.509 ارسال کنند.
فعال‌سازی پشتیبانی از ارسال کلیدهای عمومی خام (RFC7250) به سرور. در صورت درخواست سرور و به شرط پیکربندی یک جفت کلید و گواهی عمومی مناسب، یک کلید عمومی خام توسط کلاینت ارسال خواهد شد. با این وجود، برخی از سرورها ممکن است هیچ اعتبارسنجی کلاینتی را درخواست نکنند، یا ممکن است یک گواهی را تقاضا کنند.
به جای ارائه -connect، میزبان هدف و پورت اختیاری را می‌توان به عنوان یک آرگومان مکانی واحد پس از تمام گزینه‌ها ارائه کرد. اگر نه این آرگومان و نه -connect ارائه نشوند، برنامه به تلاش برای اتصال به localhost روی پورت 4433 بازمی‌گردد. اگر رشته میزبان یک نشانی IPv6 باشد، باید در "[" و "]" قرار گیرد.

اگر اتصالی با یک سرور SSL/TLS برقرار شود، هر داده‌ای که از سرور دریافت گردد نمایش داده می‌شود و هر کلیدی که فشرده شود به سرور فرستاده خواهد شد. در صورت رسیدن به انتهای فایل (EOF)، اتصال بسته خواهد شد.

هنگامی که به صورت تعاملی استفاده شود (به این معنی که نه -quiet و نه -ign_eof داده نشده باشند)، و هیچ‌یک از گزینه‌های -adv یا -nocommands نیز ارائه نشده باشند، حالت دستورات "پایه" (Basic) فعال می‌شود. در این حالت برخی دستورات شناسایی می‌شوند که عملیات خاصی را انجام می‌دهند. این دستورات یک حرف هستند که باید در ابتدای یک سطر قرار گیرند. تمامی داده‌های بعدی پس از حرف ابتدایی در آن سطر نادیده گرفته می‌شوند. دستورات در زیر فهرست شده‌اند:

پایان دادن به اتصال جاری SSL و خروج.
مذاکره مجدد نشست SSL (فقط در TLSv1.2 و نسخه‌های پایین‌تر).
تلاش برای اتصال مجدد به سرور با استفاده از دست‌تکانی ازسرگیری (resumption handshake).
ارسال یک پیام به‌روزرسانی کلید به سرور (فقط در TLSv1.3).
ارسال یک پیام به‌روزرسانی کلید به سرور و درخواست پیام متقابل از سرور (فقط در TLSv1.3).

اگر گزینه -adv مشخص شده باشد، حالت دستورات "پیشرفته" (advanced) فعال می‌شود. مانند حالت پایه، اگر اتصالی با یک سرور SSL/TLS برقرار شود، هر داده‌ای که از سرور دریافت گردد نمایش داده می‌شود و هر کلیدی که فشرده شود به سرور فرستاده خواهد شد. در صورت رسیدن به انتهای فایل (EOF)، اتصال بسته خواهد شد.

دستورات ویژه را می‌توان با محصور کردن آن‌ها در آکاردئون وارد کرد، مانند "{help}" یا "{quit}". این دستورات می‌توانند در هر کجای متن واردشده در s_client قرار گیرند، اما به سرور ارسال نمی‌شوند. برخی دستورات می‌توانند با پایان دادن به نام دستور با ":" و سپس ارائه آرگومان، یک آرگومان دریافت کنند، مانند "{keyup:req}". برخی دستورات تنها زمانی در دسترس هستند که نسخه‌های پروتکل خاصی مذاکره شده باشند.

اگر یک خط جدید در انتهای سطری که در s_client وارد می‌شود وجود داشته باشد، این خط جدید نیز به سرور ارسال می‌شود. اگر یک دستور به تنهایی در یک سطر و بدون متن دیگری در همان سطر ظاهر شود، خط جدید حذف شده و به سرور فرستاده نمی‌شود.

دستورات زیر شناخته‌شده هستند:

چاپ متن راهنمای خلاصه درباره دستورات موجود.
بستن اتصال به طرف مقابل (peer).
اتصال مجدد به طرف مقابل و تلاش برای دست‌تکانی ازسرگیری.
ارسال پیام به‌روزرسانی کلید (Key Update). فقط در TLSv1.3. این دستور یک آرگومان اختیاری می‌پذیرد. اگر آرگومان "req" ارائه شود، از طرف مقابل نیز درخواست می‌شود کلیدهای خود را به‌روزرسانی کند. در غیر این صورت، اگر "noreq" ارائه شود، از طرف مقابل درخواستی برای به‌روزرسانی کلیدهایش نخواهد شد. پیش‌فرض "req" است.
آغاز یک مذاکره مجدد با سرور. فقط در (D)TLSv1.2 یا نسخه‌های پایین‌تر.
اعلام FIN در استریم جاری. فقط در QUIC. به محض ارسال FIN، هرگونه متن بعدی که برای این استریم وارد شود نادیده گرفته خواهد شد.

این دستور می‌تواند برای اشکال‌زدایی سرورهای SSL استفاده شود. برای اتصال به یک سرور HTTP با SSL معمولاً از دستور زیر استفاده می‌شود:

openssl s_client -connect servername:443

(پروتکل https از پورت ۴۴۳ استفاده می‌کند). اگر اتصال موفقیت‌آمیز باشد، می‌توان یک دستور HTTP مانند "GET /" را برای دریافت صفحه وب ارسال کرد.

اگر دست‌تکانی با شکست مواجه شود، دلایل احتمالی گوناگونی وجود دارد؛ اگر مشکل واضحی مانند عدم وجود گواهی کلاینت نباشد، می‌توان گزینه‌های -bugs، -ssl3، -tls1، -no_ssl3 یا -no_tls1 را امتحان کرد شاید سرور دارای اشکال باشد. به ویژه، شما باید پیش از ارسال گزارش باگ به لیست ایمیل OpenSSL، این گزینه‌ها را بیازمایید.

یک مشکل رایج هنگام تلاش برای به کار انداختن گواهی‌های کلاینت این است که کلاینت وب شکایت می‌کند که هیچ گواهی ندارد یا یک لیست خالی برای انتخاب ارائه می‌دهد. این موضوع معمولاً به این دلیل است که سرور هنگام درخواست گواهی، مرجع صدور گواهی کلاینت را در "فهرست CA قابل قبول" خود ارسال نمی‌کند. با استفاده از این دستور می‌توان لیست CA را مشاهده و بررسی کرد. با این حال، برخی از سرورها احراز هویت کلاینت را تنها پس از درخواست یک URL مشخص مطالبه می‌کنند. برای به دست آوردن لیست در این حالت، لازم است از گزینه -prexit استفاده کرده و یک درخواست HTTP برای صفحه مناسب ارسال کنید.

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

در صورت وجود مشکل در اعتبارسنجی گواهی سرور، می‌توان از گزینه -showcerts برای نمایش تمام گواهی‌های ارسال‌شده توسط سرور استفاده کرد.

این دستور یک ابزار آزمایشی است و به گونه‌ای طراحی شده که پس از هرگونه خطای اعتبارسنجی گواهی، به دست‌تکانی ادامه دهد. در نتیجه، هر زنجیره گواهی (معتمد یا غیرمعتمد) ارسال‌شده توسط طرف مقابل را می‌پذیرد. برنامه‌های غیرآزمایشی نباید این کار را انجام دهند زیرا آن‌ها را در برابر حمله مرد میانی (MITM) آسیب‌پذیر می‌کند. این رفتار را می‌توان با گزینه -verify_return_error تغییر داد: در این صورت خطاهای اعتبارسنجی بازگردانده شده و دست‌تکانی لغو می‌شود.

گزینه -bind ممکن است زمانی مفید باشد که سرور یا یک دیوار آتش نیازمند آن باشد که اتصالات از نشانی و/یا پورت خاصی برقرار شوند.

هنگامی که s_client در یک محیط غیرتعاملی (مانند یک وظیفه cron یا اسکریپتی بدون stdin معتبر) اجرا می‌شود، ممکن است اتصال را زودتر از موعد ببندد، به ویژه در TLS 1.3. برای جلوگیری از این اتفاق، می‌توانید از فلگ -ign_eof استفاده کنید که باعث می‌شود s_client حتی پس از رسیدن به انتهای فایل (EOF) از ورودی stdin به کار خود ادامه دهد.

به عنوان مثال:

openssl s_client -connect <server address>:443 -tls1_3
                 -sess_out /path/to/tls_session_params_file
                 -ign_eof </dev/null

با این حال، تکیه صرف به -ign_eof می‌تواند در صورتی که سرور اتصال را باز نگه دارد و انتظار داشته باشد کلاینت ابتدا آن را ببندد، مشکل‌ساز شود. در چنین مواردی ممکن است کلاینت برای مدت نامحدود معلق (hang) بماند. این رفتار به ویژه در پروتکل‌هایی که سرور منتظر قطع اتصال منظم از سوی کلاینت می‌ماند، غیرمعمول نیست.

برای نمونه، هنگام اتصال به یک سرور SMTP، اگر سرور پیش از بستن منتظر دستور QUIT باشد، ممکن است نشست متوقف شود:

$ openssl s_client -brief -ign_eof -starttls smtp
                   -connect <server address>:25 </dev/null
CONNECTION ESTABLISHED
Protocol version: TLSv1.3
Ciphersuite: TLS_AES_256_GCM_SHA384
...
250 CHUNKING
[long pause]

برای جلوگیری از چنین توقف‌هایی، بهتر است از یک دستور سطح برنامه برای آغاز قطع ارتباط منظم استفاده شود. برای پروتکل SMTP می‌توانید دستور QUIT را ارسال کنید:

printf 'QUIT\r\n' | openssl s_client -connect <server address>:25
                                     -starttls smtp -brief -ign_eof

به همین ترتیب، برای اتصالات HTTP/1.1 گنجاندن هدر `Connection: close` تضمین می‌کند که سرور پس از پاسخ دادن، اتصال را ببندد:

printf 'GET / HTTP/1.1\r\nHost: <server address>\r\nConnection: close\r\n\r\n'
    | openssl s_client -connect <server address>:443 -brief

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

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

گزینه -prexit تا حدودی یک ترفند غیراصولی (hack) است. در واقع باید هر زمان که یک نشست مجدداً مذاکره می‌شود اطلاعات گزارش شود.

openssl(1), openssl-sess_id(1), openssl-s_server(1), openssl-ciphers(1), SSL_CONF_cmd(3), SSL_CTX_set_max_send_fragment(3), SSL_CTX_set_split_send_fragment(3), SSL_CTX_set_max_pipelines(3), ossl_store-file(7)

گزینه -no_alt_chains در OpenSSL 1.1.0 افزوده شد. گزینه -name در OpenSSL 1.1.1 افزوده شد.

گزینه -certform در OpenSSL 3.0.0 منسوخ شده و هیچ تاثیری ندارد.

گزینه -engine در OpenSSL 3.0 منسوخ شد.

گزینه‌های -enable_client_rpk، -enable_server_rpk، -no_rx_cert_comp، -no_tx_cert_comp و -tfo در OpenSSL 3.2 افزوده شدند.

گزینه‌های <-ocsp_check_leaf> و -ocsp_check_all در OpenSSL 3.6 افزوده شدند.

حق نشر ۲۰۰۰-۲۰۲۶ متعلق به نویسندگان پروژه OpenSSL است. کلیه حقوق محفوظ است.

تحت مجوز آپاچی نسخه ۲.۰ ("مجوز") ارائه شده است. شما نمی‌توانید از این پرونده استفاده کنید مگر در انطباق با مجوز. می‌توانید نسخه‌ای از مجوز را در پرونده LICENSE در توزیع منبع یا در https://www.openssl.org/source/license.html به دست آورید.

2026-08-25 3.6.4