.\" Automatically generated by Pandoc 3.10 .\" .TH "STUNNEL" "8" "2026.07.31" "stunnel 5.80" "stunnel TLS Proxy" .SH "نام (NAME)" stunnel.pl \- تونل رمزنگاری سراسری TLS/SSL برای سرویس‌های شبکه .SH "خلاصه دستور (SYNOPSIS)" .IP \(bu 2 \f[B]Unix:\f[R] \f[B]stunnel\f[R] [\f[CR]FILE\f[R]] | \f[CR]\-fd N\f[R] | \f[CR]\-help\f[R] | \f[CR]\-version\f[R] | \f[CR]\-sockets\f[R] | \f[CR]\-options\f[R] .IP \(bu 2 \f[B]WIN32:\f[R] \f[B]stunnel\f[R] [ [ \f[CR]\-install\f[R] | \f[CR]\-uninstall\f[R] | \f[CR]\-start\f[R] | \f[CR]\-stop\f[R] | \f[CR]\-reload\f[R] | \f[CR]\-reopen\f[R] | \f[CR]\-exit\f[R] ] [\f[CR]\-quiet\f[R]] [\f[CR]FILE\f[R]] ] | \f[CR]\-help\f[R] | \f[CR]\-version\f[R] | \f[CR]\-sockets\f[R] | \f[CR]\-options\f[R] .SH "توضیحات (DESCRIPTION)" برنامه \f[B]stunnel\f[R] برای کار به عنوان یک پوشش‌دهنده رمزنگاری \f[I]TLS\f[R] بین کلاینت‌های راه دور و سرورهای محلی (قابل راه‌اندازی با \f[I]inetd\f[R]) یا سرورهای راه دور طراحی شده است. مفهوم این است که با داشتن دیمن‌های بدون پشتیبانی از TLS روی سیستم خود، می‌توانید به سادگی آن‌ها را به گونه‌ای پیکربندی کنید که با کلاینت‌ها از طریق کانال‌های امن \f[I]TLS\f[R] ارتباط برقرار کنند. .PP \f[B]stunnel\f[R] می‌تواند برای افزودن قابلیت \f[I]TLS\f[R] به دیمن‌های متداول \f[I]inetd\f[R] مانند سرورهای POP-3 و IMAP، به دیمن‌های مستقل مانند NNTP، SMTP و HTTP، و حتی برای تونل کردن PPP روی سوکت‌های شبکه بدون نیاز به تغییر در کد منبع استفاده شود. .SH "گزینه‌ها (OPTIONS)" .IP \(bu 2 \f[B]FILE\f[R] .RS 2 .PP استفاده از فایل پیکربندی مشخص‌شده .RE .IP \(bu 2 \f[B]\-fd N\f[R] (فقط یونیکس) .RS 2 .PP خواندن فایل پیکربندی از توصیف‌گر فایل (file descriptor) مشخص‌شده .RE .IP \(bu 2 \f[B]\-help\f[R] .RS 2 .PP چاپ منوی راهنمای \f[B]stunnel\f[R] .RE .IP \(bu 2 \f[B]\-version\f[R] .RS 2 .PP چاپ نسخه \f[B]stunnel\f[R] و مقادیر پیش‌فرض زمان کامپایل .RE .IP \(bu 2 \f[B]\-sockets\f[R] .RS 2 .PP چاپ گزینه‌های پیش‌فرض سوکت .RE .IP \(bu 2 \f[B]\-options\f[R] .RS 2 .PP چاپ گزینه‌های پشتیبانی‌شده TLS .RE .IP \(bu 2 \f[B]\-install\f[R] (فقط Windows NT و جدیدتر) .RS 2 .PP نصب سرویس NT .RE .IP \(bu 2 \f[B]\-uninstall\f[R] (فقط Windows NT و جدیدتر) .RS 2 .PP حذف نصب سرویس NT .RE .IP \(bu 2 \f[B]\-start\f[R] (فقط Windows NT و جدیدتر) .RS 2 .PP شروع سرویس NT .RE .IP \(bu 2 \f[B]\-stop\f[R] (فقط Windows NT و جدیدتر) .RS 2 .PP توقف سرویس NT .RE .IP \(bu 2 \f[B]\-reload\f[R] (فقط Windows NT و جدیدتر) .RS 2 .PP بارگذاری مجدد فایل پیکربندی سرویس در حال اجرای NT .RE .IP \(bu 2 \f[B]\-reopen\f[R] (فقط Windows NT و جدیدتر) .RS 2 .PP باز کردن مجدد لاگ سرویس در حال اجرای NT .RE .IP \(bu 2 \f[B]\-exit\f[R] (فقط Win32) .RS 2 .PP توقف برنامه در حال اجرا .RE .IP \(bu 2 \f[B]\-quiet\f[R] (فقط Win32) .RS 2 .PP عدم نمایش پنجره‌های پیام .RE .SH "فایل پیکربندی (CONFIGURATION FILE)" یک خط در فایل پیکربندی می‌تواند: .IP \(bu 2 خالی باشد (نادیده گرفته می‌شود) .IP \(bu 2 یک کامنت باشد که با نویسه `;' شروع می‌شود (نادیده گرفته می‌شود) .IP \(bu 2 یک جفت `نام_گزینه = مقدار_گزینه' باشد .IP \(bu 2 متن `[نام_سرویس]' باشد که نشان‌دهنده شروع تعریف یک سرویس است .PP پارامتر آدرس می‌تواند به صورت‌های زیر باشد: .IP \(bu 2 شماره پورت .IP \(bu 2 یک جفت آدرس (IPv4، IPv6 یا نام دامنه) و شماره پورت جدا شده با دو نقطه .IP \(bu 2 مسیر سوکت یونیکس (فقط یونیکس) .SS "گزینه‌های سراسری (GLOBAL OPTIONS)" .IP \(bu 2 \f[B]chroot\f[R] = DIRECTORY (فقط یونیکس) .RS 2 .PP پوشه ریشه کاری سیستم فایل .PP این گزینه پوشه‌ای را مشخص می‌کند که فرآیند \f[B]stunnel\f[R] بلافاصله پس از مقداردهی اولیه و قبل از شروع پذیرش اتصالات، در آن محبوس (chroot) می‌شود. مسیرهای مشخص‌شده در گزینه‌های \f[I]CApath\f[R]، \f[I]CRLpath\f[R]، \f[I]pid\f[R] و \f[I]exec\f[R] باید درون پوشه مشخص‌شده در \f[I]chroot\f[R] قرار داشته و نسبت به آن تعیین شوند. .PP برخی عملکردهای سیستم‌عامل ممکن است به فایل‌های اضافی در پوشه chroot نیاز داشته باشند: .IP \(bu 2 تفکیک تاخیری DNS معمولاً به /etc/nsswitch.conf و /etc/resolv.conf نیاز دارد .IP \(bu 2 محلی‌سازی منطقه زمانی در گزارش‌ها نیازمند فایل /etc/timezone است .IP \(bu 2 برخی عملکردهای دیگر ممکن است به فایل‌های دستگاهی مانند /dev/zero یا /dev/null نیاز داشته باشند .RE .IP \(bu 2 \f[B]compression\f[R] = deflate | zlib | zstd | brotli .RS 2 .PP انتخاب الگوریتم فشرده‌سازی داده‌های ارسالی .PP پیش‌فرض: بدون فشرده‌سازی .PP فشرده‌سازی داده‌ها منحصراً برای پروتکل TLS 1.2 و نسخه‌های قدیمی‌تر در دسترس است. از زمان \f[B]OpenSSL 1.1.0\f[R] نیاز به کاهش \f[B]securityLevel\f[R] به 1 دارد. .PP الگوریتم‌های zlib، zstd و brotli در پیکربندی پیش‌فرض OpenSSL غیرفعال هستند. .PP الگوریتم‌های zstd و brotli در \f[B]OpenSSL 3.2\f[R] اضافه شده‌اند. .PP فشرده‌سازی داده‌ها در برنامه‌هایی که به مهاجم اجازه تزریق متن ساده دلخواه را می‌دهند یک ریسک امنیتی محسوب می‌شود. .PP الگوریتم deflate روش فشرده‌سازی استاندارد مطابق با RFC 1951 است. .PP \f[B]توجه\f[R]: فشرده‌سازی TLS می‌تواند حملات بازیابی متن آشکار مانند CRIME را در مواردی که داده‌های تحت کنترل مهاجم همراه با داده‌های محافظت‌شده فشرده می‌شوند، امکان‌پذیر سازد. .RE .IP \(bu 2 \f[B]debug\f[R] = [FACILITY.]LEVEL .RS 2 .PP میزان جزئیات لاگ‌گیری .PP سطح لاگ‌گیری را می‌توان با یکی از نام‌ها یا اعداد مشخص کرد: emerg (0)، alert (1)، crit (2)، err (3)، warning (4)، notice (5)، info (6) یا debug (7). پیام‌هایی با سطح کمتر یا مساوی (از نظر عددی) با مقدار مشخص‌شده ثبت می‌شوند. سطح پیش‌فرض notice (5) است. .PP اگرچه استفاده از \f[I]debug = debug\f[R] یا \f[I]debug = 7\f[R] پرجزئیات‌ترین گزارش‌ها را تولید می‌کند، اما محتوای آن‌ها فقط برای توسعه‌دهندگان stunnel مفید است. تنها در صورتی از این سطح لاگ‌گیری استفاده کنید که توسعه‌دهنده stunnel هستید یا اطلاعات دقیقی را برای ارسال به پشتیبانی فنی آماده می‌کنید. در غیر این صورت، تلاش برای تحلیل محتوای لاگ‌ها \f[B]تنها\f[R] مایه سردرگمی بیشتر خواهد بود. .PP در صورتی که بخش (facility) مشخص نشده باشد، از مقدار پیش‌فرض daemon استفاده می‌شود. بخش‌ها در بستر Win32 پشتیبانی نمی‌شوند. .PP بزرگی و کوچکی حروف برای سطح و بخش نادیده گرفته می‌شود. .RE .IP \(bu 2 \f[B]EGD\f[R] = EGD_PATH (فقط یونیکس) .RS 2 .PP مسیر سوکت برنامه Entropy Gathering Daemon .PP این گزینه مسیر سوکت برنامه Entropy Gathering Daemon را مشخص می‌کند که برای مقداردهی اولیه مولد شبه‌تصادفی کتابخانه \f[B]OpenSSL\f[R] به کار می‌رود. .RE .IP \(bu 2 \f[B]engine\f[R] = auto | DEVICE_ID .RS 2 .PP انتخاب موتور رمزنگاری (cryptographic engine) .PP پیش‌فرض: بدون استفاده از موتورهای رمزنگاری .PP بخش «مثال‌ها» حاوی نمونه پیکربندی‌هایی با استفاده از موتورهای رمزنگاری است. .RE .IP \(bu 2 \f[B]engineCtrl\f[R] = COMMAND[:PARAMETER] .RS 2 .PP پیکربندی کنترل موتور رمزنگاری .RE .IP \(bu 2 \f[B]engineDefault\f[R] = TASK_LIST .RS 2 .PP فهرست وظایف OpenSSL که به موتور جاری واگذار می‌شوند .PP پارامتر یک لیست از وظایف OpenSSL جداشده با کاما است که باید به موتور رمزنگاری جاری واگذار شوند. .PP بسته به موتور مورد استفاده، وظایف زیر ممکن است در دسترس باشند: ALL، RSA، DSA، ECDH، ECDSA، DH، RAND، CIPHERS، DIGESTS، PKEY، PKEY_CRYPTO، PKEY_ASN1. .RE .IP \(bu 2 \f[B]fips\f[R] = yes | no .RS 2 .PP حالت FIPS 140-2 .PP این گزینه به شما اجازه می‌دهد در صورتی که \f[B]stunnel\f[R] با پشتیبانی از FIPS 140-2 کامپایل شده باشد، ورود به حالت FIPS را غیرفعال کنید. .PP پیش‌فرض: no (از نسخه 5.00) .RE .IP \(bu 2 \f[B]foreground\f[R] = yes | quiet | no (فقط یونیکس) .RS 2 .PP حالت پیش‌زمینه .PP با فعال کردن این گزینه، \f[B]stunnel\f[R] به پس‌زمینه (daemon) منتقل نمی‌شود. .PP مقدار \f[I]yes\f[R] همچنین باعث می‌شود که پیام‌های تشخیصی علاوه بر خروجی‌های تعریف‌شده توسط گزینه‌های \f[I]syslog\f[R] و \f[I]output\f[R]، روی خروجی خطای استاندارد (stderr) نیز ثبت شوند. .RE .IP \(bu 2 \f[B]iconActive\f[R] = ICON_FILE (فقط رابط گرافیکی) .RS 2 .PP آیکون نمایش داده شده در صورت وجود اتصالات فعال به سرویس .PP در ویندوز، آیکون یک فایل .ico حاوی تصویری با ابعاد 16x16 پیکسل است. .RE .IP \(bu 2 \f[B]iconError\f[R] = ICON_FILE (فقط رابط گرافیکی) .RS 2 .PP آیکون نمایش داده شده در صورتی که فایل پیکربندی معتبری بارگذاری نشده باشد .PP در ویندوز، آیکون یک فایل .ico حاوی تصویری با ابعاد 16x16 پیکسل است. .RE .IP \(bu 2 \f[B]iconIdle\f[R] = ICON_FILE (فقط رابط گرافیکی) .RS 2 .PP آیکون نمایش داده شده در صورت عدم وجود اتصالات فعال به سرویس .PP در ویندوز، آیکون یک فایل .ico حاوی تصویری با ابعاد 16x16 پیکسل است. .RE .IP \(bu 2 \f[B]log\f[R] = append | overwrite .RS 2 .PP مدیریت فایل لاگ .PP این گزینه تعیین می‌کند که آیا گزارش‌های جدید به انتهای فایل لاگ (مشخص‌شده در گزینه \f[I]output\f[R]) اضافه شوند یا جایگزین فایل قبلی گردند. .PP پیش‌فرض: append .RE .IP \(bu 2 \f[B]output\f[R] = FILE .RS 2 .PP فایلی که گزارش‌ها به آن اضافه خواهند شد .PP استفاده از این گزینه موجب می‌شود که گزارش‌ها به فایل مشخص‌شده افزوده شوند. .PP برای هدایت خروجی به خروجی استاندارد (به عنوان مثال برای ثبت آن‌ها توسط برنامه splogger از بسته daemontools)، می‌توانید دستگاه /dev/stdout را به عنوان پارامتر تعیین کنید. .RE .IP \(bu 2 \f[B]pid\f[R] = FILE (فقط یونیکس) .RS 2 .PP مسیر فایل شناسه فرآیند (PID) .PP اگر آرگومان خالی باشد، فایلی ایجاد نخواهد شد. .PP در صورت تعریف دایرکتوری \f[I]chroot\f[R]، مسیر \f[I]pid\f[R] نسبت به آن پوشه در نظر گرفته می‌شود. .RE .IP \(bu 2 \f[B]provider\f[R] = PROVIDER_ID .RS 2 .PP شناسه ارائه‌دهنده (provider) مورد استفاده را مشخص می‌کند. مقدار PROVIDER_ID یک شناسه یکتا است که به ارائه‌دهنده خدمات رمزنگاری خاص اشاره دارد. .PP این گزینه نیازمند کتابخانه OpenSSL نسخه 3.0 یا جدیدتر است. .RE .IP \(bu 2 \f[B]providerParameter\f[R] = PROVIDER_ID:PARAMETER=VALUE .RS 2 .PP پارامتر مشخصی را برای ارائه‌دهنده تعیین‌شده تنظیم می‌کند. مقدار PROVIDER_ID ارائه‌دهنده را مشخص می‌کند، PARAMETER نام پارامتر و VALUE مقدار آن است. این گزینه امکان سفارشی‌سازی پیکربندی ارائه‌دهنده خدمات رمزنگاری انتخاب‌شده را فراهم می‌سازد. .PP این گزینه نیازمند کتابخانه OpenSSL نسخه 3.5 یا جدیدتر است. .RE .IP \(bu 2 \f[B]RNDbytes\f[R] = BYTES .RS 2 .PP تعداد بایت‌ها برای مقداردهی اولیه مولد شبه‌تصادفی .RE .IP \(bu 2 \f[B]RNDfile\f[R] = FILE .RS 2 .PP مسیر فایل حاوی داده‌های تصادفی .PP کتابخانه \f[B]OpenSSL\f[R] از داده‌های این فایل برای مقداردهی اولیه مولد شبه‌تصادفی استفاده می‌کند. .RE .IP \(bu 2 \f[B]RNDoverwrite\f[R] = yes | no .RS 2 .PP بازنویسی فایل با مقادیر شبه‌تصادفی جدید .PP پیش‌فرض: yes (بازنویسی شود) .RE .IP \(bu 2 \f[B]service\f[R] = SERVICE (فقط یونیکس) .RS 2 .PP نام سرویس .PP نام سرویس تعیین‌شده به عنوان نام سرویس برای مقداردهی اولیه syslog و همچنین برای کتابخانه TCP Wrapper در حالت \f[I]inetd\f[R] استفاده می‌شود. اگرچه از نظر فنی می‌توان از این گزینه در بخش سرویس‌ها استفاده کرد، اما کاربرد واقعی آن منحصراً در گزینه‌های سراسری است. .PP پیش‌فرض: stunnel .RE .IP \(bu 2 \f[B]setEnv\f[R] = VAR_NAME=VALUE .RS 2 .PP تغییر یا افزودن یک متغیر محیطی برای فرآیندهای فرزند. اگر VAR_NAME از قبل وجود داشته باشد، مقدار آن به‌روزرسانی می‌شود؛ در غیر این صورت یک متغیر جدید ایجاد خواهد شد. این اصلاح تنها روی فرآیندهای فرزند اجراشده اعمال می‌شود و بر محیط فعلی تأثیری ندارد. .RE .IP \(bu 2 \f[B]syslog\f[R] = yes | no (فقط یونیکس) .RS 2 .PP فعال‌سازی ثبت گزارش از طریق سازوکار syslog .PP پیش‌فرض: yes (فعال) .RE .IP \(bu 2 \f[B]taskbar\f[R] = yes | no (فقط WIN32) .RS 2 .PP فعال‌سازی آیکون در گوشه پایین سمت راست صفحه (ناحیه اعلان‌ها) .PP پیش‌فرض: yes (فعال) .RE .SS "گزینه‌های سرویس (SERVICE-LEVEL OPTIONS)" هر بخش از پیکربندی سرویس با نام آن که در کروشه قرار می‌گیرد، آغاز می‌شود. نام سرویس برای کنترل دسترسی توسط کتابخانه libwrap (TCP wrappers) استفاده شده و همچنین امکان تفکیک سرویس‌های مختلف را در گزارش‌ها فراهم می‌کند. .PP اگر قرار است \f[B]stunnel\f[R] در حالت \f[I]inetd\f[R] استفاده شود، جایی که دریافت اتصال بر عهده برنامه دیگری است (معمولاً \f[I]inetd\f[R]، \f[I]xinetd\f[R] یا \f[I]tcpserver\f[R])، بخش \f[I]حالت INETD\f[R] را در ادامه مطالعه فرمایید. .IP \(bu 2 \f[B]accept\f[R] = [HOST:]PORT .RS 2 .PP گوش دادن به اتصالات روی آدرس و پورت مشخص‌شده .PP اگر آدرسی مشخص نشود، \f[B]stunnel\f[R] به طور پیش‌فرض روی تمام آدرس‌های IPv4 رابط‌های محلی گوش می‌دهد. .PP برای گوش دادن روی تمام آدرس‌های IPv6 از فرمت زیر استفاده کنید: .IP .EX accept = :::port .EE .RE .IP \(bu 2 \f[B]CAengine\f[R] = CA_ENGINE_ID .RS 2 .PP بارگذاری گواهی‌های معتبر مرجع صدور گواهی (CA) از یک موتور رمزنگاری .PP این گزینه امکان تعیین مکان فایل حاوی گواهی‌های مورد استفاده توسط گزینه \f[I]verifyChain\f[R] یا \f[I]verifyPeer\f[R] را فراهم می‌کند. .PP این گزینه می‌تواند چندین بار در یک بخش تکرار شود. .PP موتورهای پشتیبانی‌شده در حال حاضر: pkcs11، cng. .RE .IP \(bu 2 \f[B]CApath\f[R] = CA_DIR .RS 2 .PP بارگذاری گواهی‌های معتبر مرجع صدور گواهی از یک پوشه .PP این گزینه پوشه‌ای را مشخص می‌کند که \f[B]stunnel\f[R] در صورت استفاده از گزینه \f[I]verifyChain\f[R] یا \f[I]verifyPeer\f[R] در آن به جستجوی گواهی‌ها می‌پردازد. فایل‌های گواهی باید دارای نام‌های ویژه‌ای به صورت XXXXXXXX.0 باشند که در آن XXXXXXXX هش رمزنگاری نمایش DER نام سوژه گواهی است. .PP این گزینه همچنین می‌تواند برای ارائه گواهی root CA که برای اعتبارسنجی صحیح منگنه OCSP (OCSP stapling) در حالت سرور ضروری است، استفاده شود. .PP تابع هش در \f[B]OpenSSL 1.0.0\f[R] تغییر یافته است. هنگام تغییر نسخه از \f[B]OpenSSL 0.x.x\f[R] به \f[B]1.x.x\f[R]، باید دستور c_rehash را اجرا کنید. .PP اگر پوشه \f[I]chroot\f[R] تعریف شده باشد، مسیر \f[I]CApath\f[R] نسبت به آن پوشه در نظر گرفته می‌شود. .RE .IP \(bu 2 \f[B]CAfile\f[R] = CA_FILE .RS 2 .PP بارگذاری گواهی‌های معتبر مرجع صدور گواهی از یک فایل .PP این گزینه امکان تعیین مکان فایل حاوی گواهی‌های مورد استفاده توسط گزینه \f[I]verifyChain\f[R] یا \f[I]verifyPeer\f[R] را فراهم می‌کند. .PP این گزینه همچنین می‌تواند برای ارائه گواهی root CA که برای اعتبارسنجی صحیح منگنه OCSP (OCSP stapling) در حالت سرور ضروری است، استفاده شود. .RE .IP \(bu 2 \f[B]CAstore\f[R] = CA_URI .RS 2 .PP بارگذاری گواهی‌های معتبر مرجع صدور گواهی از منبع مشخص‌شده توسط URI .PP این گزینه امکان بارگذاری گواهی‌های CA را از یک مخزن خارجی پشتیبانی‌شده توسط سازوکار \f[I]OSSL_STORE\f[R] فراهم می‌کند، مانند یک ماژول PKCS#11 (مانند توکن سخت‌افزاری)، مخزن گواهی سیستم یا یک منبع شبکه. .PP این گزینه می‌تواند مستقل از \f[I]CAfile\f[R] و \f[I]CApath\f[R] استفاده شود و به طور مشابه برای اعتبارسنجی زنجیره گواهی با استفاده از گزینه \f[I]verifyChain\f[R] یا \f[I]verifyPeer\f[R] و همچنین برای اعتبارسنجی OCSP stapling در سمت سرور به کار می‌رود. .PP این گزینه نیازمند کتابخانه OpenSSL نسخه 3.0 یا جدیدتر است. .RE .IP \(bu 2 \f[B]cert\f[R] = CERT_FILE | URI .RS 2 .PP فایل حاوی زنجیره گواهی .PP این گزینه مکان فایل حاوی گواهی‌های مورد استفاده توسط برنامه \f[B]stunnel\f[R] برای احراز هویت در برابر طرف مقابل ارتباط را مشخص می‌کند. فایل باید شامل زنجیره کامل گواهی از گواهی سرور/کلاینت تا گواهی خودامضاشده Root CA باشد. فایل‌ها در قالب PEM یا P12 پشتیبانی می‌شوند. .PP وجود گواهی برای اجرای برنامه در حالت سرور الزامی است. در حالت کلاینت، گواهی اختیاری است. .PP گزینه \f[B]cert\f[R] می‌تواند چندین بار مشخص شود. نخستین گواهی یافت‌شده به عنوان گواهی سرور یا کلاینت استفاده می‌شود، در حالی که گواهی‌های بعدی به عنوان اعضای میانی زنجیره در نظر گرفته خواهند شد. این قابلیت نیازمند کتابخانه OpenSSL نسخه 1.0.2 یا جدیدتر است. .PP در صورت استفاده از یک موتور رمزنگاری یا provider، گزینه \f[B]cert\f[R] امکان انتخاب شناسه (PKCS#11 URI) گواهی مورد استفاده را فراهم می‌سازد. .PP توجه: استفاده از provider به OpenSSL نسخه 3.0 یا جدیدتر نیاز دارد. .RE .IP \(bu 2 \f[B]checkEmail\f[R] = EMAIL .RS 2 .PP آدرس ایمیل سوژه گواهی ارائه‌شده .PP یک بخش می‌تواند شامل چندین مورد از گزینه \f[B]checkEmail\f[R] باشد. گواهی‌ها در صورتی پذیرفته می‌شوند که بخش پیکربندی سوژه گواهی را بررسی نکند، یا آدرس ایمیل گواهی ارائه‌شده با یکی از آدرس‌های ایمیل تعیین‌شده توسط \f[B]checkEmail\f[R] مطابقت داشته باشد. .PP این گزینه نیازمند کتابخانه OpenSSL نسخه 1.0.2 یا جدیدتر است. .RE .IP \(bu 2 \f[B]checkHost\f[R] = HOST .RS 2 .PP نام هاست سوژه گواهی ارائه‌شده .PP یک بخش می‌تواند شامل چندین مورد از گزینه \f[B]checkHost\f[R] باشد. گواهی‌ها در صورتی پذیرفته می‌شوند که بخش پیکربندی سوژه گواهی را بررسی نکند، یا نام هاست گواهی ارائه‌شده با یکی از نام‌های مشخص‌شده با \f[B]checkHost\f[R] مطابقت داشته باشد. .PP این گزینه نیازمند کتابخانه OpenSSL نسخه 1.0.2 یا جدیدتر است. .RE .IP \(bu 2 \f[B]checkIP\f[R] = IP .RS 2 .PP آدرس IP سوژه گواهی ارائه‌شده .PP یک بخش می‌تواند شامل چندین مورد از گزینه \f[B]checkIP\f[R] باشد. گواهی‌ها در صورتی پذیرفته می‌شوند که بخش پیکربندی سوژه گواهی را بررسی نکند، یا آدرس IP گواهی ارائه‌شده با یکی از آدرس‌های IP مشخص‌شده با \f[B]checkIP\f[R] مطابقت داشته باشد. .PP این گزینه نیازمند کتابخانه OpenSSL نسخه 1.0.2 یا جدیدتر است. .RE .IP \(bu 2 \f[B]ciphers\f[R] = CIPHER_LIST .RS 2 .PP فهرست رمزهای مجاز برای پروتکل‌های SSLv2، SSLv3، TLSv1، TLSv1.1 و TLSv1.2 .PP این گزینه بر فهرست پارامترهای رمزنگاری برای پروتکل TLSv1.3 تأثیری ندارد. .PP پارامتر این گزینه فهرستی از رمزهایی است که هنگام برقراری اتصالات جدید TLS استفاده می‌شوند، به عنوان مثال: DES\-CBC3\-SHA:IDEA\-CBC\-MD5 .RE .IP \(bu 2 \f[B]ciphersuites\f[R] = CIPHERSUITES_LIST .RS 2 .PP فهرست پارامترهای رمزنگاری مجاز برای پروتکل TLSv1.3 .PP پارامتر این گزینه فهرستی از پارامترهای رمزنگاری به ترتیب اولویت است. .PP از نسخه \f[B]OpenSSL 3.0\f[R]، گزینه \f[I]ciphersuites\f[R] رمزهای ناشناخته را نادیده می‌گیرد. .PP گزینه \f[I]ciphersuites\f[R] از زمان \f[B]OpenSSL 1.1.1\f[R] در دسترس است. .PP پیش‌فرض: TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256 .RE .IP \(bu 2 \f[B]client\f[R] = yes | no .RS 2 .PP حالت کلاینت (سرویس راه دور از TLS استفاده می‌کند) .PP پیش‌فرض: no (حالت سرور) .RE .IP \(bu 2 \f[B]config\f[R] = COMMAND[:PARAMETER] .RS 2 .PP دستور پیکربندی \f[B]OpenSSL\f[R] .PP دستور پیکربندی \f[B]OpenSSL\f[R] با پارامتر مشخص‌شده اجرا می‌شود. این امر صدور دستورات پیکربندی \f[B]OpenSSL\f[R] را از طریق فایل پیکربندی stunnel ممکن می‌سازد. دستورات در دسترس در صفحه راهنمای \f[I]SSL_CONF_cmd(3ssl)\f[R] شرح داده شده‌اند. .PP با استفاده مکرر از دستور \f[B]config\f[R] می‌توان گزینه‌های متعددی از \f[B]OpenSSL\f[R] را مشخص کرد. .PP به جای غیرفعال کردن \f[I]config = Curves:list_curves\f[R]، از گزینه \f[I]curves\f[R] برای تنظیم منحنی‌های بیضوی استفاده کنید. .PP این گزینه نیازمند کتابخانه OpenSSL نسخه 1.0.2 یا جدیدتر است. .RE .IP \(bu 2 \f[B]connect\f[R] = [HOST:]PORT .RS 2 .PP اتصال به سرور راه دور روی پورت مشخص‌شده .PP اگر آدرسی مشخص نشود، \f[B]stunnel\f[R] به طور پیش‌فرض به سرور محلی متصل می‌شود. .PP برای دستیابی به دسترسی‌پذیری بالا یا توزیع بار میان چندین سرور، می‌توان از این دستور چندین بار در یک بخش استفاده کرد. .RE .IP \(bu 2 \f[B]CRLpath\f[R] = CRL_DIR .RS 2 .PP پوشه فهرست‌های ابطال گواهی (CRL) .PP این گزینه پوشه‌ای را مشخص می‌کند که \f[B]stunnel\f[R] در آن به جستجوی فهرست‌های CRL مورد استفاده توسط گزینه‌های \f[I]verifyChain\f[R] و \f[I]verifyPeer\f[R]، و همچنین توسط \f[I]CRLcheckChain\f[R] برای بررسی کامل زنجیره گواهی می‌پردازد. فایل‌های لیست CRL باید نام‌های خاصی به صورت XXXXXXXX.r0 داشته باشند که در آن XXXXXXXX مقدار هش فهرست CRL است. .PP تابع هش در \f[B]OpenSSL 1.0.0\f[R] تغییر یافته است. هنگام تغییر نسخه از \f[B]OpenSSL 0.x.x\f[R] به \f[B]1.x.x\f[R] باید دستور c_rehash را اجرا کنید. .PP اگر پوشه \f[I]chroot\f[R] تعریف شده باشد، مسیر \f[I]CRLpath\f[R] نسبت به آن پوشه در نظر گرفته می‌شود. .RE .IP \(bu 2 \f[B]CRLfile\f[R] = CRL_FILE .RS 2 .PP فایل فهرست‌های ابطال گواهی (CRL) .PP این گزینه مکان فایل حاوی فهرست‌های CRL مورد استفاده توسط گزینه‌های \f[I]verifyChain\f[R] و \f[I]verifyPeer\f[R]، و همچنین \f[I]CRLcheckChain\f[R] را برای بررسی کامل زنجیره گواهی مشخص می‌کند. .RE .IP \(bu 2 \f[B]CRLcheckChain\f[R] = yes | no .RS 2 .PP بررسی فهرست‌های CRL برای زنجیره کامل گواهی‌های طرف مقابل ارتباط .PP این گزینه نیازمند تنظیم \f[I]verifyChain = yes\f[R] و مشخص کردن منبع لیست‌های CRL با استفاده از \f[I]CRLfile\f[R] یا \f[I]CRLpath\f[R] است. .PP به طور پیش‌فرض، لیست‌های CRL تنها برای گواهی نهاد پایانی (برگ) طرف مقابل ارتباط بررسی می‌شوند. تنظیم \f[I]CRLcheckChain = yes\f[R] بررسی لیست‌های CRL را برای هر گواهی در زنجیره صادرکنندگان تأییدشده نیز فعال می‌کند. در حالت زنجیره کامل، اگر لیست CRL صادرکننده مربوطه موجود نباشد یا منقضی یا نامعتبر باشد، اعتبارسنجی ناموفق خواهد بود. .PP برای زنجیره‌ای مانند Root CA \-> Intermediate CA \-> Leaf Certificate، لیست CRL صادرشده توسط Intermediate CA برای بررسی گواهی پایانی و لیست CRL صادرشده توسط Root CA برای بررسی گواهی میانی مورد نیاز است. .PP پیش‌فرض: no .RE .IP \(bu 2 \f[B]curves\f[R] = list .RS 2 .PP منحنی‌های ECDH جداشده با `:' .PP توجه: این گزینه تنها بر سوکت‌ها در حالت سرور تأثیر می‌گذارد. .PP نسخه‌های OpenSSL قدیمی‌تر از 1.1.1 تنها اجازه استفاده از یک منحنی را می‌دهند. .PP فهرست منحنی‌های در دسترس را می‌توان با دستور زیر به دست آورد: .IP .EX openssl ecparam \-list_curves .EE .PP پیش‌فرض: .IP .EX X25519:P\-256:X448:P\-521:P\-384 (از زمان OpenSSL 1.1.1 به بعد) prime256v1 (OpenSSL قدیمی‌تر از 1.1.1) .EE .RE .IP \(bu 2 \f[B]logId\f[R] = TYPE .RS 2 .PP نوع شناسه اتصال کلاینت .PP این شناسه امکان تفکیک ورودی‌های ثبت‌شده در لاگ را برای تک‌تک اتصالات فراهم می‌سازد. .PP انواع پشتیبانی‌شده در حال حاضر: .IP \(bu 2 \f[I]sequential\f[R] .RS 2 .PP شماره ترتیبی اتصال تنها در یک نمونه در حال اجرای برنامه \f[B]stunnel\f[R] یکتا است، اما بسیار کوتاه است. این حالت به ویژه برای بررسی و تحلیل دستی لاگ‌ها مفید است. .RE .IP \(bu 2 \f[I]unique\f[R] .RS 2 .PP این نوع شناسه به صورت سراسری یکتا است، اما به مراتب طولانی‌تر از شماره ترتیبی اتصال است. این حالت به ویژه برای پردازش و تحلیل خودکار لاگ‌ها مناسب است. .RE .IP \(bu 2 \f[I]thread\f[R] .RS 2 .PP شناسه ریسه سیستم‌عامل، نه یکتاست (حتی در یک نمونه واحد از برنامه \f[B]stunnel\f[R]) و نه کوتاه. این نوع برای عیب‌یابی مشکلات نرم‌افزار یا خطاهای پیکربندی کاربرد دارد. .RE .IP \(bu 2 \f[I]process\f[R] .RS 2 .PP شناسه فرآیند (PID) ممکن است در حالت inetd کاربرد داشته باشد. .RE .PP پیش‌فرض: sequential .RE .IP \(bu 2 \f[B]debug\f[R] = LEVEL .RS 2 .PP میزان جزئیات لاگ‌گیری .PP سطح لاگ‌گیری را می‌توان با یکی از نام‌ها یا اعداد زیر مشخص کرد: emerg (0)، alert (1)، crit (2)، err (3)، warning (4)، notice (5)، info (6) یا debug (7). پیام‌هایی با سطح عددی کمتر یا مساوی با سطح تعیین‌شده ثبت می‌شوند. برای دستیابی به بالاترین سطح جزئیات می‌توان از گزینه \f[I]debug = debug\f[R] یا \f[I]debug = 7\f[R] استفاده کرد. سطح پیش‌فرض notice (5) است. .RE .IP \(bu 2 \f[B]delay\f[R] = yes | no .RS 2 .PP تأخیر در تفکیک آدرس DNS مشخص‌شده در گزینه \f[I]connect\f[R] .PP این گزینه برای DNS پویا یا زمانی که سرویس DNS در هنگام آغاز به کار برنامه \f[B]stunnel\f[R] در دسترس نیست (مانند کلاینت‌های VPN یا اتصالات شماره‌گیری) مفید است. .PP اگر تفکیک هر یک از آدرس‌های \f[I]connect\f[R] برای یک سرویس ناموفق باشد، تفکیک تاخیری DNS به طور خودکار فعال می‌گردد. .PP تفکیک تاخیری آدرس به طور خودکار گزینه \f[I]failover = prio\f[R] را فعال می‌کند. .PP پیش‌فرض: no .RE .IP \(bu 2 \f[B]engineId\f[R] = DEVICE_NUMBER .RS 2 .PP انتخاب موتور رمزنگاری برای سرویس .RE .IP \(bu 2 \f[B]engineNum\f[R] = DEVICE_NUMBER .RS 2 .PP انتخاب موتور رمزنگاری برای سرویس .PP دستگاه‌ها از شماره 1 به بالا شماره‌گذاری می‌شوند. .RE .IP \(bu 2 \f[B]exec\f[R] = PROGRAM_PATH .RS 2 .PP اجرای یک برنامه محلی منطبق با سوپردیمن inetd .PP اگر پوشه \f[I]chroot\f[R] تعریف شده باشد، مسیر \f[I]exec\f[R] نسبت به آن پوشه در نظر گرفته می‌شود. .PP روی پلتفرم‌های یونیکس متغیرهای محیطی زیر مقداردهی می‌شوند: REMOTE_HOST، REMOTE_PORT، SSL_CLIENT_DN، SSL_CLIENT_I_DN. .RE .IP \(bu 2 \f[B]execArgs\f[R] = $0 $1 $2 ... .RS 2 .PP آرگومان‌های ارسالی به گزینه \f[I]exec\f[R] شامل نام برنامه ($0) .PP نقل‌قول (quoting) در نسخه فعلی برنامه پشتیبانی نمی‌شود. آرگومان‌ها با هر تعداد نویسه فاصله سفید از یکدیگر تفکیک می‌شوند. .RE .IP \(bu 2 \f[B]failover\f[R] = rr | prio .RS 2 .PP راهبرد انتخاب سرورهای تعیین‌شده توسط پارامترهای \(dqconnect\(dq. .IP \(bu 2 \f[I]rr\f[R] .RS 2 .PP نوبت‌گردشی (round robin) \- توزیع متوازن و عادلانه بار .RE .IP \(bu 2 \f[I]prio\f[R] .RS 2 .PP اولویت (priority) \- استفاده از ترتیب گزینه‌ها در فایل پیکربندی .RE .PP پیش‌فرض: prio .RE .IP \(bu 2 \f[B]ident\f[R] = USERNAME .RS 2 .PP اعتبارسنجی نام کاربری راه دور با استفاده از پروتکل IDENT (مطابق با RFC 1413) .RE .IP \(bu 2 \f[B]include\f[R] = DIRECTORY .RS 2 .PP خواندن قطعات فایل‌های پیکربندی از پوشه مشخص‌شده .PP فایل‌ها به ترتیب صعودی الفبایی نام‌هایشان خوانده و اعمال می‌شوند. قاعده نام‌گذاری پیشنهادی برای فایل‌ها: .PP برای گزینه‌های سراسری: .IP .EX 00\-global.conf .EE .PP برای گزینه‌های محلی سرویس: .IP .EX 01\-service.conf 02\-service.conf .EE .RE .IP \(bu 2 \f[B]key\f[R] = KEY_FILE | URI .RS 2 .PP کلید خصوصی مربوط به گواهی مشخص‌شده در گزینه \f[I]cert\f[R] .PP کلید خصوصی برای احراز هویت دارنده گواهی الزامی است. از آنجا که این کلید باید محرمانه بماند، دسترسی خواندن آن باید منحصراً در اختیار مالک فایل باشد. در سیستم‌های یونیکس این امر با دستور زیر حاصل می‌شود: .IP .EX chmod 600 keyfile .EE .PP در صورت استفاده از یک موتور رمزنگاری یا provider، گزینه \f[B]key\f[R] امکان انتخاب شناسه (PKCS#11 URI) کلید خصوصی مورد استفاده را فراهم می‌سازد. .PP توجه: استفاده از provider به OpenSSL نسخه 3.0 یا جدیدتر نیاز دارد. .PP پیش‌فرض: مقدار گزینه \f[I]cert\f[R] .RE .IP \(bu 2 \f[B]libwrap\f[R] = yes | no .RS 2 .PP فعال یا غیرفعال کردن استفاده از فایل‌های /etc/hosts.allow و /etc/hosts.deny. .PP پیش‌فرض: no (از نسخه 5.00 به بعد) .RE .IP \(bu 2 \f[B]local\f[R] = HOST .RS 2 .PP آدرس IP مبدأ برای برقراری اتصالات راه دور .PP به طور پیش‌فرض، از آدرس IP خارجی‌ترین رابط به سمت سرور مقصد استفاده می‌شود. .RE .IP \(bu 2 \f[B]OCSP\f[R] = URL .RS 2 .PP نشانی پاسخ‌دهنده (responder) پروتکل OCSP برای اعتبارسنجی گواهی طرف مقابل .RE .IP \(bu 2 \f[B]OCSPaia\f[R] = yes | no .RS 2 .PP اعتبارسنجی گواهی‌ها با استفاده از پاسخ‌دهنده‌های AIA .PP گزینه \f[I]OCSPaia\f[R] امکان اعتبارسنجی گواهی‌ها را از طریق فهرست نشانی‌های اینترنتی پاسخ‌دهنده‌های OCSP موجود در افزونه‌های AIA (دسترسی به اطلاعات مرجع \- Authority Information Access) فراهم می‌کند. .RE .IP \(bu 2 \f[B]OCSPflag\f[R] = OCSP_FLAG .RS 2 .PP فلگ پاسخ‌دهنده OCSP .PP فلگ‌های پشتیبانی‌شده در حال حاضر: NOCERTS، NOINTERN، NOSIGS، NOCHAIN، NOVERIFY، NOEXPLICIT، NOCASIGN، NODELEGATED، NOCHECKS، TRUSTOTHER، RESPID_KEY، NOTIME .PP برای مشخص کردن چندین فلگ، گزینه \f[I]OCSPflag\f[R] را چندین بار تکرار کنید. .RE .IP \(bu 2 \f[B]OCSPnonce\f[R] = yes | no .RS 2 .PP ارسال و بررسی نانس OCSP (OCSP nonce) .PP گزینه \f[B]OCSPnonce\f[R] پروتکل OCSP را در برابر حملات بازپخش (replay attacks) محافظت می‌کند. با توجه به بار پردازشی، افزونه נانس معمولاً تنها توسط پاسخ‌دهنده‌های OCSP داخلی (مثلاً سازمانی) پشتیبانی می‌شود و نه عمومی. .RE .IP \(bu 2 \f[B]OCSPrequire\f[R] = yes | no .RS 2 .PP الزام به دریافت پاسخ قطعی از پاسخ‌دهنده OCSP .PP غیرفعال کردن این گزینه امکان پذیرش اتصال را در صورت عدم دریافت پاسخ قاطع OCSP از منگنه کردن (stapling) یا درخواست مستقیم، ممکن می‌سازد. .PP پیش‌فرض: yes .RE .IP \(bu 2 \f[B]options\f[R] = SSL_OPTIONS .RS 2 .PP گزینه‌های کتابخانه \f[B]OpenSSL\f[R] .PP پارامتر نام گزینه مطابق با توضیحات \f[I]SSL_CTX_set_options(3ssl)\f[R] بدون پیشوند \f[I]SSL_OP_\f[R] است. دستور \f[I]stunnel \-options\f[R] گزینه‌های مجاز در ترکیب جاری برنامه \f[I]stunnel\f[R] و کتابخانه \f[I]OpenSSL\f[R] را نمایش می‌دهد. .PP برای تعیین چندین گزینه، از \f[I]options\f[R] به صورت مکرر استفاده کنید. می‌توان برای غیرفعال کردن یک گزینه، قبل از نام آن یک علامت خط تیره (\(dq\-\(dq) قرار داد. .PP به عنوان مثال، برای حفظ سازگاری با اشکالات پیاده‌سازی TLS در برنامه Eudora می‌توان از گزینه زیر استفاده کرد: .IP .EX options = DONT_INSERT_EMPTY_FRAGMENTS .EE .PP پیش‌فرض: .IP .EX options = NO_SSLv2 options = NO_SSLv3 .EE .PP از زمان \f[B]OpenSSL 1.1.0\f[R]، به جای غیرفعال کردن نگارش‌های خاص پروتکل TLS از گزینه‌های \f[I]sslVersionMax\f[R] یا \f[I]sslVersionMin\f[R] استفاده کنید. .RE .IP \(bu 2 \f[B]protocol\f[R] = PROTOCOL .RS 2 .PP مذاکره TLS با پروتکل کاربردی مشخص‌شده .PP این گزینه مذاکره اولیه رمزنگاری TLS را برای پروتکل کاربردی تعیین‌شده فعال می‌کند. از گزینه \f[I]protocol\f[R] نباید برای رمزنگاری TLS روی پورت مجزا استفاده شود. .PP پروتکل‌های پشتیبانی‌شده در حال حاضر: .IP \(bu 2 \f[I]cifs\f[R] .RS 2 .PP افزونه غیرمستند پروتکل CIFS که توسط سرور Samba پشتیبانی می‌شد. پشتیبانی از این افزونه در نسخه 3.0.0 سرور Samba متوقف گردید. .RE .IP \(bu 2 \f[I]capwin\f[R] .RS 2 .PP پشتیبانی از برنامه \c .UR https://www.capwin.org .UE \c .RE .IP \(bu 2 \f[I]capwinctrl\f[R] .RS 2 .PP پشتیبانی از برنامه \c .UR https://www.capwin.org .UE \c .PP این پروتکل تنها در حالت کلاینت پشتیبانی می‌شود. .RE .IP \(bu 2 \f[I]connect\f[R] .RS 2 .PP مذاکره RFC 2817 \- \f[I]Upgrading to TLS Within HTTP/1.1\f[R]، بخش 5.2 \- \f[I]Requesting a Tunnel with CONNECT\f[R] .PP این پروتکل تنها در حالت کلاینت پشتیبانی می‌شود. .RE .IP \(bu 2 \f[I]imap\f[R] .RS 2 .PP مذاکره RFC 2595 \- \f[I]Using TLS with IMAP, POP3 and ACAP\f[R] .RE .IP \(bu 2 \f[I]ldap\f[R] .RS 2 .PP مذاکره RFC 2830 \- \f[I]Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security\f[R] .RE .IP \(bu 2 \f[I]nntp\f[R] .RS 2 .PP مذاکره RFC 4642 \- \f[I]Using Transport Layer Security (TLS) with Network News Transfer Protocol (NNTP)\f[R] .PP این پروتکل تنها در حالت کلاینت پشتیبانی می‌شود. .RE .IP \(bu 2 \f[I]pgsql\f[R] .RS 2 .PP مذاکره \c .UR https://www.postgresql.org/docs/8.3/static/protocol-flow.html#AEN73982 .UE \c .RE .IP \(bu 2 \f[I]pop3\f[R] .RS 2 .PP مذاکره RFC 2449 \- \f[I]POP3 Extension Mechanism\f[R] .RE .IP \(bu 2 \f[I]proxy\f[R] .RS 2 .PP انتقال IP اصلی کلاینت با استفاده از نگارش 1 پروتکل HAProxy PROXY \c .UR https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt .UE \c .RE .IP \(bu 2 \f[I]smtp\f[R] .RS 2 .PP مذاکره RFC 2487 \- \f[I]SMTP Service Extension for Secure SMTP over TLS\f[R] .RE .IP \(bu 2 \f[I]socks\f[R] .RS 2 .PP پروتکل SOCKS در نگارش‌های 4، 4a و 5 پشتیبانی می‌شود. پروتکل SOCKS درون پروتکل TLS کپسوله‌سازی می‌شود، بنابراین آدرس سرور مقصد برای مهاجمی که ترافیک شبکه را رهگیری می‌کند آشکار نخواهد بود. .PP \c .UR https://www.openssh.com/txt/socks4.protocol .UE \c .PP \c .UR https://www.openssh.com/txt/socks4a.protocol .UE \c .PP دستور BIND پروتکل SOCKS پشتیبانی نمی‌شود. مقدار ارسال‌شده برای پارامتر USERID نادیده گرفته می‌شود. .PP بخش «مثال‌ها» شامل نمونه پیکربندی‌های یک VPN مبتنی بر پروتکل رمزنگاری‌شده SOCKS است. .RE .RE .IP \(bu 2 \f[B]protocolAuthentication\f[R] = AUTHENTICATION .RS 2 .PP نوع احراز هویت برای مذاکره پروتکل .PP این گزینه منحصراً در پروتکل‌های کلاینت `connect' و `smtp' پشتیبانی می‌شود. .PP در پروتکل `connect' روش‌های احراز هویت `basic' و `ntlm' پشتیبانی می‌شوند. روش پیش‌فرض احراز هویت در پروتکل `connect' برابر `basic' است. .PP در پروتکل `smtp' روش‌های احراز هویت `plain' و `login' پشتیبانی می‌شوند. روش پیش‌فرض احراز هویت در پروتکل `smtp' برابر `plain' است. .RE .IP \(bu 2 \f[B]protocolDomain\f[R] = DOMAIN .RS 2 .PP دامنه برای مذاکره پروتکل .PP در نسخه فعلی، این گزینه منحصراً در پروتکل `connect' کاربرد دارد. .RE .IP \(bu 2 \f[B]protocolHeader\f[R] = HEADER .RS 2 .PP هدر برای مذاکره پروتکل .PP در نسخه فعلی، این گزینه منحصراً در پروتکل `connect' کاربرد دارد. .RE .IP \(bu 2 \f[B]protocolHost\f[R] = HOST .RS 2 .PP آدرس هاست برای مذاکره پروتکل .PP برای پروتکل `connect'، گزینه \f[I]protocolHost\f[R] سرور مقصد TLS را که پروکسی باید به آن متصل شود تعیین می‌کند. آدرس سرور پروکسی که \f[B]stunnel\f[R] به آن متصل می‌شود باید با گزینه \f[I]connect\f[R] مشخص گردد. .PP برای پروتکل `smtp'، گزینه \f[I]protocolHost\f[R] مقدار دستور HELO/EHLO را که هنگام مذاکره کلاینت ارسال می‌شود تعیین می‌کند. .RE .IP \(bu 2 \f[B]protocolPassword\f[R] = PASSWORD .RS 2 .PP گذرواژه برای مذاکره پروتکل .PP این گزینه منحصراً در پروتکل‌های کلاینت `connect' و `smtp' پشتیبانی می‌شود. .RE .IP \(bu 2 \f[B]protocolUsername\f[R] = USERNAME .RS 2 .PP نام کاربری برای مذاکره پروتکل .PP این گزینه منحصراً در پروتکل‌های کلاینت `connect' و `smtp' پشتیبانی می‌شود. .RE .IP \(bu 2 \f[B]PSKidentity\f[R] = IDENTITY .RS 2 .PP شناسه کلاینت در روش PSK (کلید پیش‌اشتراکی) .PP گزینه \f[I]PSKidentity\f[R] می‌تواند در بخش‌های کلاینت برای انتخاب هویت مورد استفاده در احراز هویت PSK به کار رود. این گزینه در بخش‌های سرور نادیده گرفته می‌شود. .PP پیش‌فرض: نخستین شناسه تعریف‌شده در فایل \f[I]PSKsecrets\f[R] .RE .IP \(bu 2 \f[B]PSKsecrets\f[R] = FILE .RS 2 .PP فایل حاوی شناسه‌ها و کلیدهای PSK .PP هر خط از فایل دارای قالب زیر است: .IP .EX IDENTITY:KEY .EE .PP کلیدهای هگزادسیمال به طور خودکار به داده دودویی تبدیل می‌شوند. کلید باید حداقل ۱۶ بایت باشد که در صورت هگزادسیمال معادل حداقل ۳۲ نویسه است. دسترسی خواندن یا نوشتن این فایل باید کاملاً محدود شود. .RE .IP \(bu 2 \f[B]pty\f[R] = yes | no (فقط یونیکس) .RS 2 .PP تخصیص شبه‌ترمینال (pseudo-terminal) برای برنامه اجرا شده توسط گزینه `exec' .RE .IP \(bu 2 \f[B]redirect\f[R] = [HOST:]PORT .RS 2 .PP هدایت مجدد کلاینتی که احراز هویت آن با گواهی ناموفق بوده است .PP این گزینه تنها در حالت سرور عمل می‌کند. بخشی از مذاکرات پروتکل با گزینه \f[I]redirect\f[R] ناسازگار هستند. .RE .IP \(bu 2 \f[B]renegotiation\f[R] = yes | no .RS 2 .PP اجازه مذاکره مجدد (renegotiation) TLS .PP کاربردهای مذاکره مجدد TLS شامل برخی سناریوهای احراز هویت و تجدید کلیدها در اتصالات طولانی‌مدت است. .PP از سوی دیگر، این ویژگی ممکن است حمله منع سرویس (DoS) پیش‌پاافتاده‌ای را با تحمیل بار پردازشی به CPU تسهیل کند: .PP \c .UR https://vincent.bernat.im/en/blog/2011-ssl-dos-mitigation.html .UE \c .PP شایان توجه است که مسدود ساختن مذاکره مجدد TLS به طور کامل مانع این حمله نمی‌شود. .PP پیش‌فرض: yes (در صورت پشتیبانی توسط \f[B]OpenSSL\f[R]) .RE .IP \(bu 2 \f[B]reset\f[R] = yes | no .RS 2 .PP اعلام رخداد خطا با استفاده از فلگ TCP RST .PP این گزینه روی برخی بسترها پشتیبانی نمی‌شود. .PP پیش‌فرض: yes .RE .IP \(bu 2 \f[B]retry\f[R] = yes | no | DELAY .RS 2 .PP اتصال مجدد بخش connect+exec پس از قطع ارتباط .PP مقدار پارامتر DELAY مدت زمان انتظار بر حسب میلی‌ثانیه را پیش از تلاش مجدد تعیین می‌کند. مقدار \(dqretry = yes\(dq معادل \(dqretry = 1000\(dq است. .PP پیش‌فرض: no .RE .IP \(bu 2 \f[B]securityLevel\f[R] = LEVEL .RS 2 .PP تنظیم سطح امنیت .PP معنای هر یک از سطوح در ادامه تشریح شده است: .IP \(bu 2 سطح 0 .RS 2 .PP همه چیز مجاز است. .RE .IP \(bu 2 سطح 1 .RS 2 .PP سطح امنیتی که حداقل ۸۰ بیت امنیت را تضمین می‌کند. هیچ پارامتر رمزنگاری با امنیت کمتر از ۸۰ بیت مجاز به استفاده نیست. بنابراین کلیدهای RSA، DSA و DH با طول کمتر از ۱۰۲۴ بیت و همچنین کلیدهای ECC کوتاه‌تر از ۱۶۰ بیت و کلیه مجموعه‌های رمز صادراتی (export) ممنوع هستند. استفاده از SSLv2 ممنوع است. کلیه لیست‌های پارامترهای رمزنگاری که از MD5 برای MAC استفاده می‌کنند ممنوع می‌باشند. از زمان OpenSSL 3.0، نسخه‌های TLS قدیمی‌تر از 1.2 غیرفعال شده‌اند. .RE .IP \(bu 2 سطح 2 .RS 2 .PP سطح امنیتی که ۱۱۲ بیت امنیت را تضمین می‌کند. بر این اساس کلیدهای RSA، DSA و DH با طول کمتر از ۲۰۴۸ بیت و کلیدهای ECC کوتاه‌تر از ۲۲۴ بیت ممنوع هستند. علاوه بر ممنوعیت‌های سطح ۱، استفاده از مجموعه‌های رمزی که از RC4 استفاده می‌کنند نیز ممنوع است. فشرده‌سازی غیرفعال است. استفاده از SSLv3 در نسخه‌های OpenSSL قدیمی‌تر از 3.0 ممنوع می‌باشد. .RE .IP \(bu 2 سطح 3 .RS 2 .PP سطح امنیتی که ۱۲۸ بیت امنیت را تضمین می‌کند. بر این اساس کلیدهای RSA، DSA و DH با طول کمتر از ۳۰۷۲ بیت و کلیدهای ECC کوتاه‌تر از ۲۵۶ بیت ممنوع هستند. علاوه بر ممنوعیت‌های سطح ۲، استفاده از مجموعه‌های رمزی که رازداری رو به جلو (forward secrecy) را فراهم نمی‌کنند نیز ممنوع است. بلیت‌های نشست (session tickets) غیرفعال هستند. نسخه‌های TLS قدیمی‌تر از 1.1 در نگارش‌های OpenSSL قبل از 3.0 ممنوع می‌باشند. .RE .IP \(bu 2 سطح 4 .RS 2 .PP سطح امنیتی که ۱۹۲ بیت امنیت را تضمین می‌کند. بر این اساس کلیدهای RSA، DSA و DH با طول کمتر از ۷۶۸۰ بیت و کلیدهای ECC کوتاه‌تر از ۳۸۴ بیت ممنوع هستند. لیست‌های پارامترهای رمزنگاری که از SHA1 برای MAC استفاده می‌کنند ممنوع می‌باشند. نسخه‌های TLS قدیمی‌تر از 1.2 در نگارش‌های OpenSSL قبل از 3.0 ممنوع هستند. .RE .IP \(bu 2 سطح 5 .RS 2 .PP سطح امنیتی که ۲۵۶ بیت امنیت را تضمین می‌کند. بر این اساس کلیدهای RSA، DSA و DH با طول کمتر از ۱۵۳۶۰ بیت و کلیدهای ECC کوتاه‌تر از ۵۱۲ بیت ممنوع هستند. .RE .IP \(bu 2 پیش‌فرض: 2 .PP گزینه \f[I]securityLevel\f[R] از زمان \f[B]OpenSSL 1.1.0\f[R] در دسترس است. .RE .IP \(bu 2 \f[B]requireCert\f[R] = yes | no .RS 2 .PP الزام ارائه گواهی کلاینت برای گزینه‌های \f[I]verifyChain\f[R] یا \f[I]verifyPeer\f[R] .PP هنگامی که گزینه \f[I]requireCert\f[R] روی \f[I]no\f[R] تنظیم شده باشد، \f[B]stunnel\f[R] اتصالات کلاینت‌هایی را که گواهی ارائه نکرده‌اند می‌پذیرد. .PP هر دو گزینه \f[I]verifyChain = yes\f[R] و \f[I]verifyPeer = yes\f[R] به طور خودکار مقدار \f[I]requireCert\f[R] را برابر \f[I]yes\f[R] قرار می‌دهند. .PP پیش‌فرض: no .RE .IP \(bu 2 \f[B]setgid\f[R] = GROUP_ID (فقط یونیکس) .RS 2 .PP شناسه گروه یونیکس .PP به عنوان گزینه سراسری: گروهی که برنامه \f[B]stunnel\f[R] با دسترسی‌های آن اجرا خواهد شد. .PP به عنوان گزینه سرویس: گروه سوکت یونیکس ایجادشده توسط گزینه \(dqaccept\(dq. .RE .IP \(bu 2 \f[B]setuid\f[R] = USER_ID (فقط یونیکس) .RS 2 .PP شناسه کاربر یونیکس .PP به عنوان گزینه سراسری: کاربری که برنامه \f[B]stunnel\f[R] با دسترسی‌های آن اجرا خواهد شد. .PP به عنوان گزینه سرویس: مالک سوکت یونیکس ایجادشده توسط گزینه \(dqaccept\(dq. .RE .IP \(bu 2 \f[B]sessionCacheSize\f[R] = CACHE_SIZE .RS 2 .PP اندازه حافظه نهان (کش) نشست‌های TLS .PP این پارامتر حداکثر تعداد ورودی‌های حافظه نهان داخلی نشست را مشخص می‌کند. .PP مقدار 0 به معنای نامحدود بودن اندازه حافظه نهان است. این مقدار برای سیستم‌های عملیاتی به دلیل ریسک بروز حملات منع سرویس (DoS) از طریق اتمام حافظه RAM توصیه نمی‌شود. .RE .IP \(bu 2 \f[B]sessionCacheTimeout\f[R] = SECONDS .RS 2 .PP مدت زمان انقضای حافظه نهان نشست‌های TLS .PP این پارامتر مدت زمان بر حسب ثانیه را مشخص می‌کند که پس از آن نشست TLS از حافظه نهان حذف می‌گردد. .RE .IP \(bu 2 \f[B]sessionResume\f[R] = yes | no .RS 2 .PP اجازه یا عدم اجازه برای ازسرگیری نشست (session resumption) .PP پیش‌فرض: yes .RE .IP \(bu 2 \f[B]sessiond\f[R] = HOST:PORT .RS 2 .PP آدرس سرور sessiond \- سرور حافظه نهان نشست‌های TLS .RE .IP \(bu 2 \f[B]sni\f[R] = SERVICE_NAME:SERVER_NAME_PATTERN (حالت سرور) .RS 2 .PP استفاده از سرویس به عنوان سرویس زیرمجموعه (سرور مجازی) برای افزونه Server Name Indication در TLS (مطابق با RFC 3546). .PP مقدار \f[I]SERVICE_NAME\f[R] به سرویس والد اشاره دارد که اتصالات کلاینت‌ها را از طریق گزینه \f[I]accept\f[R] دریافت می‌کند. مقدار \f[I]SERVER_NAME_PATTERN\f[R] نام سرور مجازی را مشخص می‌کند. این الگو می‌تواند با نویسه `*' آغاز شود، به عنوان مثال: \(cq*.example.com\(dq. معمولاً چندین سرویس زیرمجموعه به یک سرویس والد واحد مرتبط می‌شوند. گزینه \f[I]sni\f[R] همچنین می‌تواند چندین بار در چارچوب یک سرویس زیرمجموعه تعریف شود. .PP نه سرویس والد و نه سرویس زیرمجموعه نباید در حالت کلاینت پیکربندی شوند. .PP گزینه \f[I]connect\f[R] در سرویس زیرمجموعه در صورت همراهی با گزینه \f[I]protocol\f[R] نادیده گرفته می‌شود، زیرا در این حالت اتصال به سرور راه دور پیش از مذاکره TLS برقرار می‌گردد. .PP احراز هویت با استفاده از کتابخانه libwrap دو بار انجام می‌پذیرد: ابتدا برای سرویس والد پس از دریافت اتصال TCP، و سپس برای سرویس زیرمجموعه در حین مذاکره TLS. .PP گزینه \f[I]sni\f[R] از زمان \f[B]OpenSSL 1.0.0\f[R] در دسترس است. .RE .IP \(bu 2 \f[B]sni\f[R] = SERVER_NAME (حالت کلاینت) .RS 2 .PP استفاده از پارامتر به عنوان مقدار افزونه Server Name Indication در پروتکل TLS (مطابق با RFC 3546). .PP مقدار خالی برای پارامتر SERVER_NAME ارسال افزونه SNI را غیرفعال می‌سازد. .PP گزینه \f[I]sni\f[R] از زمان \f[B]OpenSSL 1.0.0\f[R] در دسترس است. .RE .IP \(bu 2 \f[B]socket\f[R] = a|l|r:OPTION=VALUE[:VALUE] .RS 2 .PP تنظیم گزینه روی سوکت پذیرنده/محلی/راه دور .PP برای گزینه‌های linger مقادیر به صورت l_onoff:l_linger هستند. برای گزینه‌های time مقادیر به صورت tv_sec:tv_usec می‌باشند. .PP مثال‌ها: .IP .EX socket = l:SO_LINGER=1:60 تنظیم مهلت انقضای یک دقیقه‌ای هنگام بستن سوکت محلی socket = r:SO_OOBINLINE=yes قرار دادن داده‌های خارج از باند (out\-of\-band) مستقیماً در جریان داده‌های ورودی برای سوکت‌های راه دور socket = a:SO_REUSEADDR=no غیرفعال کردن استفاده مجدد از پورت (به طور پیش‌فرض فعال است) socket = a:SO_BINDTODEVICE=lo پذیرش اتصالات منحصراً روی رابط محلی (loopback) .EE .RE .IP \(bu 2 \f[B]sslVersion\f[R] = SSL_VERSION .RS 2 .PP نسخه پروتکل TLS .PP نسخه‌های پشتیبانی‌شده: all، SSLv2، SSLv3، TLSv1، TLSv1.1، TLSv1.2، TLSv1.3 .PP در دسترس بودن پروتکل‌های خاص به نگارش OpenSSL مورد استفاده بستگی دارد. نسخه‌های قدیمی‌تر OpenSSL از پروتکل‌های TLSv1.1، TLSv1.2، TLSv1.3 پشتیبانی نمی‌کنند. نسخه‌های جدیدتر OpenSSL از پروتکل SSLv2 پشتیبانی نمی‌کنند. .PP پروتکل‌های منسوخ‌شده SSLv2 و SSLv3 به طور پیش‌فرض غیرفعال هستند. .PP از زمان \f[B]OpenSSL 1.1.0\f[R]، تنظیم .IP .EX sslVersion = SSL_VERSION .EE .PP معادل گزینه‌های زیر است: .IP .EX sslVersionMax = SSL_VERSION sslVersionMin = SSL_VERSION .EE .RE .IP \(bu 2 \f[B]sslVersionMax\f[R] = SSL_VERSION .RS 2 .PP حداکثر نسخه پشتیبانی‌شده پروتکل TLS .PP نسخه‌های پشتیبانی‌شده: all، SSLv3، TLSv1، TLSv1.1، TLSv1.2، TLSv1.3 .PP مقدار \f[I]all\f[R] تمامی نسخه‌های پروتکل را تا حداکثر نسخه پشتیبانی‌شده توسط کتابخانه OpenSSL فعال می‌سازد. .PP در دسترس بودن پروتکل‌های خاص به نگارش OpenSSL مورد استفاده وابسته است. .PP گزینه \f[I]sslVersionMax\f[R] از زمان \f[B]OpenSSL 1.1.0\f[R] در دسترس است. .PP پیش‌فرض: all .RE .IP \(bu 2 \f[B]sslVersionMin\f[R] = SSL_VERSION .RS 2 .PP حداقل نسخه پشتیبانی‌شده پروتکل TLS .PP نسخه‌های پشتیبانی‌شده: all، SSLv3، TLSv1، TLSv1.1، TLSv1.2، TLSv1.3 .PP مقدار \f[I]all\f[R] تمامی نسخه‌های پروتکل را تا حداقل نسخه پشتیبانی‌شده توسط کتابخانه OpenSSL فعال می‌سازد. .PP در دسترس بودن پروتکل‌های خاص به نگارش OpenSSL مورد استفاده وابسته است. .PP گزینه \f[I]sslVersionMin\f[R] از زمان \f[B]OpenSSL 1.1.0\f[R] در دسترس است. .PP پیش‌فرض: TLSv1 .RE .IP \(bu 2 \f[B]stack\f[R] = BYTES (به استثنای مدل FORK) .RS 2 .PP اندازه پشته پردازنده برای ریسه‌های ایجادشده .PP پشته بیش از حد بزرگ میزان مصرف حافظه مجازی را افزایش می‌دهد. پشته بسیار کوچک ممکن است سبب بروز اختلال در پایداری برنامه گردد. .PP پیش‌فرض: 65536 بایت (کافی برای پلتفرم‌های آزمایش‌شده) .RE .IP \(bu 2 \f[B]ticketKeySecret\f[R] = SECRET .RS 2 .PP کلید متقارن هگزادسیمال مورد استفاده سرور برای تضمین محرمانگی بلیت‌های نشست .PP بلیت‌های نشست تعریف‌شده در RFC 5077 قابلیت ارتقایافته‌ای برای ازسرگیری نشست ارائه می‌کنند که در آن نیازی به حفظ وضعیت نشست توسط سرور نیست. .PP استفاده همزمان از گزینه‌های \f[I]ticketKeySecret\f[R] و \f[I]ticketMacSecret\f[R] امکان ازسرگیری نشست را روی کلاستری از سرورها یا پس از راه‌اندازی مجدد سرور میسر می‌سازد. .PP کلید باید به اندازه ۱۶ یا ۳۲ بایت باشد که دقیقاً معادل ۳۲ یا ۶۴ رقم هگزادسیمال است. بایت‌ها می‌توانند به صورت اختیاری با دو نقطه از هم جدا شوند. .PP این گزینه منحصراً در حالت سرور عمل می‌کند. .PP گزینه \f[I]ticketKeySecret\f[R] از زمان \f[B]OpenSSL 1.0.0\f[R] در دسترس است. .PP غیرفعال‌سازی گزینه \f[I]NO_TICKET\f[R] برای پشتیبانی از بلیت‌های نشست در OpenSSL قدیمی‌تر از 1.1.1 الزامی است، اما این گزینه با \f[I]redirect\f[R] ناسازگار است. .RE .IP \(bu 2 \f[B]ticketMacSecret\f[R] = SECRET .RS 2 .PP کلید متقارن هگزادسیمال مورد استفاده سرور برای تضمین یکپارچگی بلیت‌های نشست .PP کلید باید به اندازه ۱۶ یا ۳۲ بایت باشد که دقیقاً معادل ۳۲ یا ۶۴ رقم هگزادسیمال است. بایت‌ها می‌توانند به صورت اختیاری با دو نقطه از هم جدا شوند. .PP این گزینه منحصراً در حالت سرور عمل می‌کند. .PP گزینه \f[I]ticketMacSecret\f[R] از زمان \f[B]OpenSSL 1.0.0\f[R] در دسترس است. .RE .IP \(bu 2 \f[B]TIMEOUTbusy\f[R] = SECONDS .RS 2 .PP مدت زمان انتظار برای دریافت داده‌های مورد انتظار .RE .IP \(bu 2 \f[B]TIMEOUTclose\f[R] = SECONDS .RS 2 .PP مدت زمان انتظار برای اعلان close_notify (در صورتی که کلاینت MSIE است روی 0 تنظیم شود) .RE .IP \(bu 2 \f[B]TIMEOUTconnect\f[R] = SECONDS .RS 2 .PP مدت زمان انتظار برای برقراری اتصال .RE .IP \(bu 2 \f[B]TIMEOUTidle\f[R] = SECONDS .RS 2 .PP حداکثر مدت زمان مجاز برای باز نگه داشتن یک اتصال بیکار .RE .IP \(bu 2 \f[B]TIMEOUTocsp\f[R] = SECONDS .RS 2 .PP مدت زمان انتظار برای برقراری اتصال با سرور پاسخ‌دهنده OCSP .RE .IP \(bu 2 \f[B]transport\f[R] = tcp | udp .RS 2 .PP انتخاب پروتکل لایه انتقال .PP مقادیر پشتیبانی‌شده: .IP \(bu 2 \f[I]tcp\f[R] .RS 2 .PP پروتکل استاندارد TLS روی بستر TCP (پیش‌فرض). .RE .IP \(bu 2 \f[I]udp\f[R] .RS 2 .PP پروتکل DTLS روی بستر UDP. .PP هر دیتاگرام یک اتصال منطقی جدید را در چارچوب سرویس ایجاد می‌کند. سرور برای هر کلاینت از یک سوکت متصل مجزا استفاده کرده و کوکی‌های DTLS از حملات منع سرویس توزیع‌شده (DDoS) بازتابی محافظت می‌کنند. .RE .PP پیش‌فرض: tcp .RE .IP \(bu 2 \f[B]transparent\f[R] = none | source | destination | both (فقط یونیکس) .RS 2 .PP حالت پروکسی شفاف روی پلتفرم‌های پشتیبانی‌شده .PP مقادیر پشتیبانی‌شده: .IP \(bu 2 \f[B]none\f[R] .RS 2 .PP غیرفعال کردن پشتیبانی از پروکسی شفاف. این مقدار پیش‌فرض است. .RE .IP \(bu 2 \f[B]source\f[R] .RS 2 .PP بازنویسی آدرس مبدأ به گونه‌ای که به نظر برسد اتصال مستقیماً از سوی کلاینت برقرار شده است، نه از برنامه \f[B]stunnel\f[R]. .PP این گزینه در حال حاضر پشتیبانی می‌شود در: .IP \(bu 2 حالت راه دور (گزینه \f[I]connect\f[R]) در سامانه \f[I]Linux >=2.6.28\f[R] .RS 2 .PP پیکربندی نیازمند اعمال تنظیمات iptables و مسیریابی زیر است (برای نمونه در فایل /etc/rc.local یا نظیر آن): .IP .EX iptables \-t mangle \-N DIVERT iptables \-t mangle \-A PREROUTING \-p tcp \-m socket \-j DIVERT iptables \-t mangle \-A DIVERT \-j MARK \-\-set\-mark 1 iptables \-t mangle \-A DIVERT \-j ACCEPT ip rule add fwmark 1 lookup 100 ip route add local 0.0.0.0/0 dev lo table 100 echo 0 >/proc/sys/net/ipv4/conf/lo/rp_filter .EE .PP این پیکربندی مستلزم اجرای \f[B]stunnel\f[R] به عنوان کاربر root و بدون گزینه \f[I]setuid\f[R] است. .RE .IP \(bu 2 حالت راه دور (گزینه \f[I]connect\f[R]) در سامانه \f[I]Linux 2.2.x\f[R] .RS 2 .PP این پیکربندی نیازمند کامپایل هسته لینوکس با گزینه \f[I]transparent proxy\f[R] است. سرویس مقصد باید روی دستگاه مجزایی مستقر باشد که مسیر دستیابی به آن از طریق سرور \f[B]stunnel\f[R] عبور کند. .PP علاوه بر این، \f[B]stunnel\f[R] باید به عنوان root و بدون گزینه \f[I]setuid\f[R] اجرا گردد. .RE .IP \(bu 2 حالت راه دور (گزینه \f[I]connect\f[R]) در سامانه \f[I]FreeBSD >=8.0\f[R] .RS 2 .PP این پیکربندی نیازمند تنظیم فایروال و مسیریابی است. برنامه \f[B]stunnel\f[R] باید به عنوان کاربر root و بدون گزینه \f[I]setuid\f[R] اجرا شود. .RE .IP \(bu 2 حالت محلی (گزینه \f[I]exec\f[R]) .RS 2 .PP این پیکربندی به کمک کتابخانه \f[I]libstunnel.so\f[R] محقق می‌گردد. برای بارگذاری این کتابخانه از متغیر محیطی _RLD_LIST در پلتفرم Tru64 یا LD_PRELOAD در سایر پلتفرم‌ها استفاده می‌شود. .RE .RE .IP \(bu 2 \f[I]destination\f[R] .RS 2 .PP آدرس مقصد اصلی به جای گزینه \f[I]connect\f[R] استفاده می‌شود. .PP نمونه پیکربندی برای آدرس مقصد شفاف: .IP .EX [transparent] client = yes accept = transparent = destination .EE .PP این پیکربندی نیازمند تنظیمات iptables است، برای نمونه در فایل /etc/rc.local یا مشابه آن. .PP در صورت استقرار سرویس مقصد روی همان دستگاه محلی: .IP .EX /sbin/iptables \-t nat \-I OUTPUT \-p tcp \-\-dport \(rs \-m ! \-\-uid\-owner \(rs \-j DNAT \-\-to\-destination : .EE .PP در صورت استقرار سرویس مقصد روی یک دستگاه راه دور: .IP .EX /sbin/iptables \-I INPUT \-i eth0 \-p tcp \-\-dport \-j ACCEPT /sbin/iptables \-t nat \-I PREROUTING \-p tcp \-\-dport \(rs \-i eth0 \-j DNAT \-\-to\-destination : .EE .PP آدرس مقصد شفاف در حال حاضر منحصراً در سیستم‌عامل لینوکس پشتیبانی می‌شود. .RE .IP \(bu 2 \f[I]both\f[R] .RS 2 .PP استفاده از پروکسی شفاف هم برای آدرس مبدأ و هم برای آدرس مقصد. .RE .PP جهت حفظ سازگاری با نگارش‌های پیشین، دو گزینه زیر نیز پشتیبانی می‌شوند: .IP \(bu 2 \f[I]yes\f[R] .RS 2 .PP نام این گزینه به \f[I]source\f[R] تغییر یافته است. .RE .IP \(bu 2 \f[I]no\f[R] .RS 2 .PP نام این گزینه به \f[I]none\f[R] تغییر یافته است. .RE .RE .IP \(bu 2 \f[B]verify\f[R] = LEVEL .RS 2 .PP اعتبارسنجی گواهی طرف مقابل ارتباط .PP این گزینه منسوخ شده و باید با گزینه‌های \f[I]verifyChain\f[R] و \f[I]verifyPeer\f[R] جایگزین گردد. .IP \(bu 2 \f[I]سطح 0\f[R] .RS 2 .PP درخواست گواهی و نادیده گرفتن آن .RE .IP \(bu 2 \f[I]سطح 1\f[R] .RS 2 .PP اعتبارسنجی در صورت ارائه گواهی .RE .IP \(bu 2 \f[I]سطح 2\f[R] .RS 2 .PP اعتبارسنجی با گواهی نصب‌شده مرجع صدور گواهی (CA) .RE .IP \(bu 2 \f[I]سطح 3\f[R] .RS 2 .PP اعتبارسنجی با گواهی طرف مقابل که به صورت محلی نصب شده است .RE .IP \(bu 2 \f[I]سطح 4\f[R] .RS 2 .PP اعتبارسنجی با گواهی طرف مقابل با نادیده گرفتن زنجیره CA .RE .IP \(bu 2 \f[I]پیش‌فرض\f[R] .RS 2 .PP عدم اعتبارسنجی .RE .RE .IP \(bu 2 \f[B]verifyChain\f[R] = yes | no .RS 2 .PP اعتبارسنجی زنجیره گواهی‌های طرف مقابل ارتباط .PP برای اعتبارسنجی گواهی سرور، الزام به یک گواهی خاص با استفاده از گزینه‌های \f[I]checkHost\f[R] یا \f[I]checkIP\f[R] امری حیاتی است. .PP گواهی خودامضاشده مرجع اصلی صدور گواهی (Root CA) باید در فایل مشخص‌شده در گزینه \f[I]CAfile\f[R] یا در پوشه مشخص‌شده در گزینه \f[I]CApath\f[R] قرار داده شود. .PP پیش‌فرض: no .RE .IP \(bu 2 \f[B]verifyPeer\f[R] = yes | no .RS 2 .PP اعتبارسنجی گواهی طرف مقابل ارتباط .PP گواهی طرف مقابل باید در فایل مشخص‌شده در گزینه \f[I]CAfile\f[R] یا در پوشه مشخص‌شده در گزینه \f[I]CApath\f[R] قرار داده شود. .PP پیش‌فرض: no .RE .SH "کدهای بازگشت (RETURN VALUE)" برنامه \f[B]stunnel\f[R] در صورت موفقیت مقدار صفر و در صورت بروز خطا مقدار غیرصفر برمی‌گرداند. .SH "سیگنال‌ها (SIGNALS)" سیگنال‌های زیر را می‌توان برای کنترل برنامه در سیستم‌عامل‌های یونیکس به کار برد: .IP \(bu 2 SIGHUP .RS 2 .PP بارگذاری مجدد فایل پیکربندی. .PP برخی از گزینه‌های سراسری مجدداً بارگذاری نخواهند شد: .IP \(bu 2 chroot .IP \(bu 2 foreground .IP \(bu 2 pid .IP \(bu 2 setgid .IP \(bu 2 setuid .PP در صورت استفاده از گزینه `setuid'، برنامه \f[B]stunnel\f[R] قادر به بارگذاری مجدد پیکربندی‌هایی که از پورت‌های ممتاز (<1024) استفاده می‌کنند نخواهد بود. .PP در صورت استفاده از گزینه `chroot'، برنامه \f[B]stunnel\f[R] کلیه فایل‌های مورد نیاز (از جمله فایل پیکربندی، گواهی‌ها، لاگ و فایل pid) را در درون پوشه مشخص‌شده با `chroot' جستجو خواهد کرد. .RE .IP \(bu 2 SIGUSR1 .RS 2 .PP بستن و باز کردن مجدد فایل لاگ. این ویژگی می‌تواند در اسکریپت‌های چرخش لاگ (log rotation) برنامه \f[B]stunnel\f[R] مورد استفاده قرار گیرد. .RE .IP \(bu 2 SIGUSR2 .RS 2 .PP ثبت فهرست اتصالات فعال در فایل لاگ. .RE .IP \(bu 2 SIGTERM, SIGQUIT, SIGINT .RS 2 .PP خاتمه دادن به اجرای برنامه. .RE .PP پیامد ارسال سایر سیگنال‌ها تعریف‌نشده است. .SH "مثال‌ها (EXAMPLES)" برای رمزنگاری اتصالات به یک سرور محلی \f[I]imapd\f[R] می‌توان از تنظیمات زیر استفاده کرد: .IP .EX [imapd] accept = 993 exec = /usr/sbin/imapd execArgs = imapd .EE .PP یا در حالت راه دور: .IP .EX [imapd] accept = 993 connect = 143 .EE .PP برای فعال‌سازی دریافت ایمیل از طریق TLS توسط یک کلاینت ایمیل محلی از سرور \f[I]imapd\f[R]، کلاینت را برای دریافت ایمیل از localhost و پورت 119 تنظیم کرده و از پیکربندی زیر استفاده کنید: .IP .EX [imap] client = yes accept = 143 connect = server:993 .EE .PP در ترکیب با برنامه \f[I]pppd\f[R]، برنامه \f[B]stunnel\f[R] امکان برپایی یک شبکه خصوصی مجازی (VPN) ساده را فراهم می‌سازد. در سمت سرور که روی پورت 2020 گوش می‌دهد، پیکربندی می‌تواند به این صورت باشد: .IP .EX [vpn] accept = 2020 exec = /usr/sbin/pppd execArgs = pppd local pty = yes .EE .PP فایل پیکربندی زیر می‌تواند برای اجرای برنامه \f[B]stunnel\f[R] در حالت \f[I]inetd\f[R] به کار رود. شایان توجه است که در این فایل پیکربندی هیچ بخشی با نام \f[I][نام_سرویس]\f[R] وجود ندارد. .IP .EX exec = /usr/sbin/imapd execArgs = imapd .EE .PP برای پیکربندی VPN می‌توان از تنظیمات کلاینت زیر استفاده کرد: .IP .EX [socks_client] client = yes accept = 127.0.0.1:1080 connect = vpn_server:9080 verifyPeer = yes CAfile = stunnel.pem .EE .PP پیکربندی متناظر سرور vpn_server: .IP .EX [socks_server] protocol = socks accept = 9080 cert = stunnel.pem key = stunnel.key .EE .PP برای آزمایش این پیکربندی می‌توان روی ماشین کلاینت دستور زیر را اجرا کرد: .IP .EX curl \-\-socks4a localhost http://www.example.com .EE .PP نمونه پیکربندی سرور SNI: .IP .EX [virtual] ; سرویس والد accept = 443 cert = default.pem connect = default.internal.mydomain.com:8080 [sni1] ; سرویس زیرمجموعه ۱ sni = virtual:server1.mydomain.com cert = server1.pem connect = server1.internal.mydomain.com:8081 [sni2] ; سرویس زیرمجموعه ۲ sni = virtual:server2.mydomain.com cert = server2.pem connect = server2.internal.mydomain.com:8082 verifyPeer = yes CAfile = server2\-allowed\-clients.pem .EE .PP نمونه پیکربندی برای احراز هویت با استفاده از کلید خصوصی ذخیره‌شده در مخزن گواهی ویندوز (Windows Certificate Store، فقط ویندوز): .IP .EX engine = capi [service] engineId = capi client = yes accept = 127.0.0.1:8080 connect = example.com:8443 .EE .PP در صورت استفاده از موتور CAPI، گزینه cert نباید تنظیم شود، زیرا کلید کلاینت به طور خودکار بر اساس گواهی‌های CA معتبر ارائه‌شده توسط سرور از Certificate Store واکشی خواهد شد. .PP نمونه پیکربندی برای استفاده از گواهی و کلید خصوصی از دستگاه پشتیبانی‌شده توسط موتور pkcs11: .IP .EX engine = pkcs11 engineCtrl = MODULE_PATH:opensc\-pkcs11.so engineCtrl = PIN:123456 [service] engineId = pkcs11 client = yes accept = 127.0.0.1:8080 connect = example.com:843 cert = pkcs11:token=MyToken;object=MyCert key = pkcs11:token=MyToken;object=MyKey .EE .PP نمونه پیکربندی برای استفاده از گواهی و کلید خصوصی مستقر روی توکن SoftHSM: .IP .EX engine = pkcs11 engineCtrl = MODULE_PATH:softhsm2.dll engineCtrl = PIN:12345 [service] engineId = pkcs11 client = yes accept = 127.0.0.1:8080 connect = example.com:843 cert = pkcs11:token=MyToken;object=KeyCert .EE .PP نمونه پیکربندی برای استفاده از گواهی و کلید خصوصی از دستگاه پشتیبانی‌شده توسط ارائه‌دهنده \(gapkcs11prov\(ga: .PP توجه: نیازمند OpenSSL نسخه 3.0 یا جدیدتر است .IP .EX setEnv = PKCS11_MODULE_PATH=opensc\-pkcs11.dll setEnv = PKCS11_PIN:123456 provider = pkcs11prov [service] client = yes accept = 127.0.0.1:8080 connect = example.com:843 cert = pkcs11:token=MyToken;object=MyCert key = pkcs11:token=MyToken;object=MyKey .EE .PP توجه: نیازمند OpenSSL نسخه 3.5 یا جدیدتر است .IP .EX provider = pkcs11prov providerParameter = pkcs11prov:pkcs11_module=opensc\-pkcs11.dll providerParameter = pkcs11prov:pin=123456 [service] client = yes accept = 127.0.0.1:8080 connect = example.com:843 cert = pkcs11:token=MyToken;object=MyCert key = pkcs11:token=MyToken;object=MyKey .EE .PP در سیستم‌عامل ویندوز، کتابخانه PKCS#11 باید در پوشه \(gaossl\-modules\(ga قرار داشته باشد، یا باید مسیر کامل مطلق آن در \(gaPKCS11_MODULE_PATH\(ga یا در پارامتر \(gapkcs11_module\(ga تعیین شود. .SH "نکات (NOTES)" .SS "محدودیت‌ها (RESTRICTIONS)" برنامه \f[B]stunnel\f[R] را نمی‌توان برای رمزنگاری پروتکل \f[I]FTP\f[R] استفاده کرد، زیرا این پروتکل برای انتقال فایل‌ها از اتصالات اضافی با شماره پورت‌های پویا استفاده می‌کند. با این وجود، نسخه‌های ویژه‌ای از کلاینت‌ها و سرورهای FTP وجود دارند که امکان رمزنگاری داده‌های ارسالی با استفاده از پروتکل \f[I]TLS\f[R] را فراهم می‌سازند. .SS "حالت INETD (فقط یونیکس) (INETD MODE)" در بیشتر کاربردها، \f[B]stunnel\f[R] خود به طور مستقل روی پورت مشخص‌شده در فایل پیکربندی گوش فرا داده و اتصالی را به پورت دیگری که در گزینه \f[I]connect\f[R] مشخص شده یا برنامه جدیدی که در گزینه \f[I]exec\f[R] تعیین گردیده برقرار می‌سازد. با این حال، برخی ترجیح می‌دهند از برنامه جداگانه‌ای استفاده کنند که اتصالات را دریافت کرده و سپس برنامه \f[B]stunnel\f[R] را اجرا نماید. نمونه‌هایی از این برنامه‌ها عبارتند از inetd، xinetd و tcpserver. .PP یک خط نمونه در فایل /etc/inetd.conf می‌تواند به این صورت باشد: .IP .EX imaps stream tcp nowait root \(atbindir\(at/stunnel stunnel \(atsysconfdir\(at/stunnel/imaps.conf .EE .PP از آنجا که در این موارد اتصال روی پورت تعریف‌شده (در اینجا \f[I]imaps\f[R]) توسط برنامه دیگری (در اینجا \f[I]inetd\f[R]) برقرار می‌شود، \f[B]stunnel\f[R] نمی‌تواند از گزینه \f[I]accept\f[R] استفاده کند. در فایل پیکربندی نیز نباید هیچ سرویسی تعریف شود (\f[I][نام_سرویس]\f[R])، زیرا این نوع پیکربندی تنها اجازه برقراری یک اتصال را می‌دهد. تمام \f[I]گزینه‌های سرویس\f[R] باید همراه با گزینه‌های سراسری قرار داده شوند. نمونه‌ای از این پیکربندی در بخش \f[I]مثال‌ها\f[R] آورده شده است. .SS "گواهی‌ها (CERTIFICATES)" پروتکل TLS ایجاب می‌کند که هر سرور خود را با یک گواهی معتبر X.509 به کلاینت متصل‌شونده معرفی نماید. تأیید هویت سرور بر این اساس است که نشان دهد کلید خصوصی متناظر با گواهی را در اختیار دارد. ساده‌ترین روش برای به دست آوردن گواهی، تولید آن با استفاده از بسته نرم‌افزاری آزاد \f[B]OpenSSL\f[R] است. اطلاعات بیشتر درباره تولید گواهی‌ها را می‌توان در صفحات اینترنتی ذکر شده در ادامه یافت. .PP فایل \f[I].pem\f[R] باید شامل کلید خصوصی و گواهی امضاشده باشد (نه درخواست گواهی). فایل حاصل باید دارای قالب زیر باشد: .IP .EX \-\-\-\-\-BEGIN RSA PRIVATE KEY\-\-\-\-\- [کلید رمزنگاری‌شده] \-\-\-\-\-END RSA PRIVATE KEY\-\-\-\-\- \-\-\-\-\-BEGIN CERTIFICATE\-\-\-\-\- [گواهی رمزنگاری‌شده] \-\-\-\-\-END CERTIFICATE\-\-\-\-\- .EE .SS "تولید اعداد تصادفی (RANDOMNESS)" برنامه \f[B]stunnel\f[R] نیاز به مقداردهی اولیه PRNG (مولد اعداد شبه‌تصادفی) دارد، زیرا پروتکل TLS برای امنیت رمزنگاری به یک منبع خوب تصادفی متکی است. منابع زیر تا زمان به دست آمدن آنتروپی کافی به ترتیب خوانده می‌شوند: .IP \(bu 2 محتوای فایل مشخص‌شده در گزینه \f[I]RNDfile\f[R]. .IP \(bu 2 محتوای فایل با نام تعیین‌شده توسط متغیر محیطی RANDFILE، در صورت تنظیم بودن آن. .IP \(bu 2 فایل .rnd قرار گرفته در پوشه خانگی کاربر، در صورتی که متغیر RANDFILE تنظیم نشده باشد. .IP \(bu 2 فایل مشخص‌شده در گزینه `\-\-with\-random' در هنگام پیکربندی و ساخت برنامه. .IP \(bu 2 محتوای صفحه نمایش در سیستم‌عامل ویندوز. .IP \(bu 2 سوکت egd، در صورتی که گزینه \f[I]EGD\f[R] استفاده شده باشد. .IP \(bu 2 سوکت egd مشخص‌شده در گزینه `\-\-with\-egd\-socket' در هنگام پیکربندی برنامه. .IP \(bu 2 دستگاه /dev/urandom. .PP شایان توجه است که در دستگاه‌های مجهز به سیستم‌عامل ویندوز که کاربری پشت کنسول آن‌ها کار نمی‌کند، محتوای صفحه نمایش به اندازه کافی متغیر نیست تا PRNG را مقداردهی کند. در این حالت باید از گزینه \f[I]RNDfile\f[R] برای مقداردهی مولد استفاده نمود. .PP فایل \f[I]RNDfile\f[R] باید حاوی داده‌های تصادفی باشد، به این معنی که با هر بار اجرای برنامه \f[B]stunnel\f[R] این مقادیر باید متفاوت باشند. در صورتی که گزینه \f[I]RNDoverwrite\f[R] استفاده نشده باشد، این عمل به طور خودکار انجام می‌پذیرد. برای ایجاد دستی چنین فایلی می‌توان از دستور \f[I]openssl rand\f[R] همراه با نسخه‌های امروزی بسته \f[B]OpenSSL\f[R] استفاده کرد. .PP نکته مهم دیگر این است که اگر دستگاه \f[I]/dev/urandom\f[R] در دسترس باشد، کتابخانه \f[B]OpenSSL\f[R] تمایل دارد در هنگام بررسی وضعیت مولد، PRNG را با آن تغذیه کند. در سیستم‌های دارای \f[I]/dev/urandom\f[R] به احتمال زیاد از این دستگاه استفاده خواهد شد، با اینکه در انتهای فهرست فوق قرار دارد. این از ویژگی‌های کتابخانه \f[B]OpenSSL\f[R] است و نه برنامه \f[B]stunnel\f[R]. .SS "پارامترهای DH (DH PARAMETERS)" از نسخه 4.40، برنامه \f[B]stunnel\f[R] شامل پارامترهای 2048 بیتی DH درون کد منبع است. از نسخه 5.18، این مقادیر اولیه با پارامترهای موقت تولیدشده خودکار جایگزین می‌شوند. تولید پارامترهای DH ممکن است تا چند دقیقه به طول انجامد. .PP همچنین می‌توان پارامترهای DH را درون فایل به همراه گواهی قرار داد که تولید پارامترهای موقت را غیرفعال می‌سازد: .IP .EX openssl dhparam 2048 >> stunnel.pem .EE .SH "فایل‌ها (FILES)" .IP \(bu 2 \f[I]\(atsysconfdir\(at/stunnel/stunnel.conf\f[R] .RS 2 .PP فایل پیکربندی برنامه .RE .SH "اشکالات (BUGS)" گزینه \f[I]execArgs\f[R] و خط فرمان Win32 از نقل‌قول (quoting) پشتیبانی نمی‌کنند. .SH "همچنین ببینید (SEE ALSO)" .IP \(bu 2 \c .UR https://www.stunnel.org .UE \c .RS 2 .PP برنامه \f[B]stunnel\f[R] .RE .IP \(bu 2 \c .UR https://openssl-library.org .UE \c .RS 2 .PP کتابخانه \f[B]OpenSSL\f[R] .RE .SH "نویسنده (AUTHOR)" .IP \(bu 2 Michał Trojnara .RS 2 .PP \c .MT Michal.Trojnara@stunnel.org .ME \c .RE