CONFIG(5ssl) OpenSSL CONFIG(5ssl)

config - فایل‌های پیکربندی کتابخانه CONF در OpenSSL

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

بخش اول نحو کلی فایل‌های پیکربندی را شرح می‌دهد و بخش‌های بعدی معناشناسی (semantics) ماژول‌های مجزا را بیان می‌کنند. سایر ماژول‌ها در fips_config(5) و x509v3_config(5) توضیح داده شده‌اند. نحو تعریف مقادیر ASN.1 در ASN1_generate_nconf(3) شرح داده شده است.

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

برای کنترل تجزیه فایل‌های پیکربندی می‌توان از دو دستورالعمل استفاده کرد: .include و .pragma.

برای سازگاری با نسخه‌های قدیمی‌تر OpenSSL، علامت مساوی پس از دستورالعمل نادیده گرفته می‌شود. نسخه‌های قدیمی‌تر آن را به عنوان یک انتساب (assignment) در نظر می‌گیرند، بنابراین اگر تفاوت معنایی اهمیت دارد، باید احتیاط کرد.

یک فایل می‌تواند با استفاده از نحو include فایل‌های دیگر را شامل شود:

.include [=] pathname

اگر pathname یک نام فایل ساده باشد، آن فایل مستقیماً در همان نقطه درج می‌شود. فایل‌های درج‌شده نیز می‌توانند دارای عبارات .include باشند که فایل‌های دیگری را مشخص می‌کنند. اگر pathname یک دایرکتوری باشد، تمام فایل‌های درون آن دایرکتوری که پسوند ".cnf" یا ".conf" دارند گنجانده خواهند شد. (این ویژگی تنها روی سیستم‌هایی با پشتیبانی از POSIX IO در دسترس است.) زیردایرکتوری‌های درون pathname به طور کامل نادیده گرفته می‌شوند. به طور مشابه، اگر فایلی هنگام پیمایش یک دایرکتوری باز شود و آن فایل دارای دستورالعمل .include باشد که دایرکتوری دیگری را مشخص کند، آن نیز نادیده گرفته خواهد شد.

به عنوان یک قاعده کلی، pathname باید یک مسیر مطلق باشد؛ این مورد را می‌توان با عملگرهای کاربردی (pragma) abspath و includedir که در ادامه شرح داده شده‌اند، تحمیل کرد. متغیر محیطی OPENSSL_CONF_INCLUDE، در صورت وجود، به ابتدای تمام مسیرهای نسبی اضافه می‌شود. اگر مسیر همچنان نسبی باشد، بر اساس دایرکتوری کاری فعلی تفسیر خواهد شد.

برای الزام تمام فایل‌های درج‌شده به استفاده از مسیرهای مطلق، از دستورالعمل زیر استفاده کنید:

.pragma [=] abspath:value

رفتار پیش‌فرض، که در آن value برابر false یا off است، اجازه استفاده از مسیرهای نسبی را می‌دهد. برای الزام تمام مسیرهای .include به مطلق بودن، از مقدار (value) true یا on استفاده کنید.

در این فایل‌ها، علامت دلار $ برای ارجاع به یک متغیر استفاده می‌شود، همان‌طور که در ادامه توضیح داده شده است. با این حال، در برخی پلتفرم‌ها معمول است که $ به عنوان یک نویسه معمولی در نام نمادها در نظر گرفته شود. پشتیبانی از این رفتار را می‌توان با دستورالعمل زیر انجام داد:

.pragma [=] dollarid:value

رفتار پیش‌فرض، که در آن value برابر false یا off است، علامت دلار را نشان‌دهنده نام متغیر در نظر می‌گیرد؛ "foo$bar" به عنوان "foo" به دنبال گسترش متغیر "bar" تفسیر می‌شود. اگر value برابر true یا on باشد، آنگاه "foo$bar" یک نام هفت‌نویسه‌ای واحد است و گسترش‌های متغیر باید با استفاده از آکولاد یا پرانتز مشخص شوند.

.pragma [=] includedir:value

اگر یک مسیر نسبی در دستورالعمل .include مشخص شده باشد و متغیر محیطی OPENSSL_CONF_INCLUDE وجود نداشته باشد، مقدار pragmaی includedir در صورت وجود به ابتدای مسیر اضافه می‌شود.

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

اولین بخش یک فایل پیکربندی خاص است و بخش default (پیش‌فرض) نامیده می‌شود. این بخش معمولاً بدون نام است و از ابتدای فایل تا اولین بخش نام‌گذاری‌شده ادامه دارد. هنگامی که یک نام جستجو می‌شود، ابتدا در بخش فعلی یا نام‌گذاری‌شده، و سپس در صورت نیاز در بخش پیش‌فرض جستجو می‌شود.

محیط سیستم بر روی بخشی به نام ENV نگاشت می‌شود.

درون یک بخش، مجموعه‌ای از انتساب‌های نام/مقدار (name/value) قرار دارد که در ادامه با جزئیات بیشتر شرح داده شده است. یادآوری می‌شود که قلاب‌های نشان داده شده در این مثال الزامی هستند، نه اختیاری:

[ section ]
name1 = This is value1
name2 = Another value
...
[ newsection ]
name1 = New value1
name3 = Value 3

مقدار name می‌تواند شامل هر نویسه الفبایی-عددی و همچنین چند علامت نگارشی مانند .، ,، ; و _ باشد. فاصله‌های خالی پس از نام و قبل از علامت مساوی نادیده گرفته می‌شوند.

اگر یک نام در همان بخش تکرار شود، تمام مقادیر به جز آخرین مقدار نادیده گرفته می‌شوند. در شرایط خاصی، مانند DNهای گواهی (Certificate DNs)، ممکن است یک فیلد چندین بار تکرار شود. برای پشتیبانی از این حالت، دستوراتی مانند openssl-req(1) هر متن ابتدایی را که بعد از آن یک نقطه آمده باشد نادیده می‌گیرند. به عنوان مثال:

1.OU = First OU
2.OU = Second OU

مقدار value شامل رشته‌ای است که پس از نویسه = تا انتهای خط قرار دارد و تمام فاصله‌های خالی ابتدا و انتهای آن حذف می‌شود.

رشته مقدار تحت گسترش متغیرها (variable expansion) قرار می‌گیرد. متن $var یا "${var}" مقدار متغیر نام‌برده را از بخش فعلی درج می‌کند. برای استفاده از یک مقدار از بخش دیگر، از $section::name یا "${section::name}" استفاده کنید. با استفاده از $ENV::name، مقدار متغیر محیطی مشخص‌شده جایگزین خواهد شد.

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

هرگونه تنظیمات نام/مقدار در بخش ENV برای فایل پیکربندی در دسترس است، اما به محیط سیستم منتقل (propagate) نمی‌شود.

اگر طول مقدار در نهایت بیش از ۶۴ کیلوبایت شود، یک خطا محسوب می‌شود.

می‌توان نویسه‌های خاصی را با استفاده از نقل‌قول تکی ' یا دوتایی " در اطراف مقدار، یا با استفاده از بک‌اسلش \ قبل از نویسه، گریز داد (escape کرد). با قرار دادن \ به عنوان آخرین نویسه یک خط، یک رشته value می‌تواند در چندین خط گسترش یابد. علاوه بر این، توالی‌های \n، \r، \b و \t شناسایی می‌شوند.

قواعد گسترش و گریز که در بالا برای value توضیح داده شد، برای مسیر فایل (pathname) در دستورالعمل .include نیز اعمال می‌شوند.

بخش‌های زیر از اصطلاح غیررسمی ماژول (module) برای ارجاع به بخشی از عملکردهای OpenSSL استفاده می‌کنند. این مفهوم با اصطلاح رسمی مانند ماژول FIPS یکسان نیست.

پیکربندی OpenSSL مقدار openssl_conf را در بخش پیش‌فرض جستجو کرده و آن را به عنوان نام بخشی در نظر می‌گیرد که نحوه پیکربندی هر ماژول در کتابخانه را مشخص می‌کند. باقی گذاشتن هر ماژول در پیکربندی پیش‌فرض خود خطا نیست. یک برنامه می‌تواند مستقیماً نام دیگری را با فراخوانی CONF_modules_load_file()، به عنوان مثال، مشخص کند.

همچنین OpenSSL مقدار config_diagnostics را جستجو می‌کند. اگر این گزینه وجود داشته باشد و مقدار عددی غیر صفر داشته باشد، هر پرچم نادیده‌گیری خطا که به CONF_modules_load() ارسال شده باشد، نادیده گرفته خواهد شد. این گزینه برای عیب‌یابی پیکربندی‌های نادرست مفید است، اما استفاده از آن در محیط عملیاتی (production) نیازمند بررسی بیشتر است. با فعال بودن این گزینه، یک خطای پیکربندی کاملاً از دسترسی به یک سرویس جلوگیری می‌کند. بدون این گزینه و در صورت بروز خطای پیکربندی، دسترسی مجاز خواهد بود اما پیکربندی مورد نظر اعمال نخواهد شد.

# این مقادیر باید در بخش پیش‌فرض باشند
config_diagnostics = 1
openssl_conf = openssl_init
[openssl_init]
oid_section = oids
providers = providers
alg_section = evp_properties
ssl_conf = ssl_configuration
engines = engines
random = random
[oids]
... oids جدید در اینجا ...
[providers]
... موارد ارائه‌دهنده در اینجا ...
[evp_properties]
... ویژگی‌های EVP در اینجا ...
[ssl_configuration]
... ویژگی‌های پیکربندی SSL/TLS در اینجا ...
[engines]
... ویژگی‌های engine در اینجا ...
[random]
... ویژگی‌های random در اینجا ...

معناشناسی هر ماژول در ادامه شرح داده شده است. عبارت «در بخش مقداردهی اولیه» به بخشی اشاره دارد که توسط openssl_conf یا نام دیگر (که در مثال بالا به صورت openssl_init آمده است) مشخص شده است. مثال‌های زیر فرض می‌کنند که از پیکربندی بالا برای مشخص کردن بخش‌های مجزا استفاده شده است.

نام oid_section در بخش مقداردهی اولیه، نام بخشی را مشخص می‌کند که شامل جفت‌های نام/مقدار مربوط به OIDها است. نام، همان نام کوتاه است؛ مقدار، یک نام طولانی اختیاری به همراه یک کاما و سپس مقدار عددی است. در حالی که برخی دستورات OpenSSL بخش اختصاصی خود را برای مشخص کردن OIDها دارند، این بخش آن‌ها را برای تمام دستورات و برنامه‌ها در دسترس قرار می‌دهد.

[oids]
shortName = a very long OID name, 1.2.3.4
newoid1 = 1.2.3.4.1
some_other_oid = 1.2.3.5

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

OPENSSL_CONF=example.cnf openssl asn1parse -genstr OID:1.2.3.4.1

خروجی زیر را تولید خواهد کرد:

0:d=0  hl=2 l=   4 prim: OBJECT            :newoid1

که نشان می‌دهد OID با عنوان "newoid1" به عنوان "1.2.3.4.1" افزوده شده است.

نام providers در بخش مقداردهی اولیه، نام بخشی را مشخص می‌کند که شامل پیکربندی ارائه‌دهنده رمزنگاری (cryptographic provider) است. انتساب‌های نام/مقدار در این بخش هر کدام یک ارائه‌دهنده را نام برده و به بخش پیکربندی آن ارائه‌دهنده اشاره می‌کنند. بخش اختصاصی ارائه‌دهنده برای مشخص کردن نحوه بارگذاری ماژول، فعال‌سازی آن و تنظیم سایر پارامترها استفاده می‌شود.

درون بخش یک ارائه‌دهنده، نام‌های زیر دارای معنا هستند:

برای مشخص کردن یک نام جایگزین استفاده می‌شود و نام پیش‌فرض مشخص‌شده در لیست ارائه‌دهندگان را بازنویسی می‌کند. برای مثال:
[providers]
foo = foo_provider
[foo_provider]
identity = my_fips_module
مسیر فایل ماژول (معمولاً یک کتابخانه مشترک - shared library) را برای بارگذاری مشخص می‌کند.
اگر وجود داشته باشد و روی یکی از مقادیر yes، on، true یا 1 تنظیم شود، ارائه‌دهنده مرتبط فعال خواهد شد. برعکس، تنظیم این مقدار روی no، off، false یا 0 از فعال شدن ارائه‌دهنده جلوگیری می‌کند. تنظیمات را می‌توان با حروف کوچک یا بزرگ نوشت. تنظیم activate روی هر مقدار دیگری، یا حذف مقدار، منجر به خطا خواهد شد.

= item soft_load

در صورت فعال بودن، به کتابخانه اطلاع می‌دهد که در صورت عدم موفقیت در فعال‌سازی ارائه‌دهنده درخواستی، پشته خطا (error stack) را پاک کند. مقدار 1، yes، true یا on (با حروف کوچک یا بزرگ) این تنظیم را فعال می‌کند، در حالی که مقدار 0، no، false یا off (مجدداً با حروف کوچک یا بزرگ) این تنظیم را غیرفعال خواهد کرد. هر مقدار دیگری خطا تولید می‌کند. توجه داشته باشید که اگر این تنظیم ارائه نشود، پیش‌فرض آن off است.

تمام پارامترهای موجود در این بخش و همچنین زیربخش‌ها در اختیار ارائه‌دهنده قرار می‌گیرند.

ارائه‌دهنده پیش‌فرض و فعال‌سازی آن

اگر هیچ ارائه‌دهنده‌ای به صورت صریح فعال نشود، ارائه‌دهنده پیش‌فرض به صورت ضمنی فعال خواهد شد. برای جزئیات بیشتر به OSSL_PROVIDER-default(7) مراجعه کنید.

اگر بخشی را اضافه کنید که صریحاً ارائه‌دهنده(های) دیگری را فعال کند، به احتمال زیاد نیاز دارید که ارائه‌دهنده پیش‌فرض را نیز به صورت صریح فعال کنید، در غیر این صورت در openssl در دسترس نخواهد بود. این امر ممکن است سیستم را از راه دور غیرقابل دسترس کند.

نام alg_section در بخش مقداردهی اولیه، نام بخش حاوی ویژگی‌های الگوریتمی هنگام استفاده از رابط برنامه‌نویسی EVP را مشخص می‌کند.

درون بخش ویژگی‌های الگوریتم، نام‌های زیر دارای معنا هستند:

مقدار می‌تواند هر چیزی باشد که به عنوان یک رشته پرسمان ویژگی (property query string) برای EVP_set_default_properties() قابل قبول است.
مقدار یک بولی است که می‌تواند yes یا no باشد. اگر مقدار yes باشد، این دقیقاً معادل دستور زیر است:
default_properties = fips=yes

اگر مقدار no باشد، هیچ اتفاقی نمی‌افتد. استفاده از این نام منسوخ شده است و در صورت استفاده، باید تنها نام موجود در آن بخش باشد.

نام ssl_conf در بخش مقداردهی اولیه، نام بخش حاوی فهرست پیکربندی‌های SSL/TLS را مشخص می‌کند. همانند ارائه‌دهنده‌ها، هر نام در این بخش، بخشی را با پیکربندی مربوط به آن نام مشخص می‌کند. به عنوان مثال:

[ssl_configuration]
server = server_tls_config
client = client_tls_config
system_default = tls_system_default
[server_tls_config]
... پیکربندی برای سرورهای SSL/TLS ...
[client_tls_config]
... پیکربندی برای کلاینت‌های SSL/TLS ...

نام پیکربندی system_default دارای معنای خاصی است. اگر وجود داشته باشد، هر زمان که یک شیء SSL_CTX ایجاد شود، اعمال می‌گردد. به عنوان مثال، برای اعمال حداقل نسخه پروتکل TLS و DTLS در سطح سیستم:

[tls_system_default]
MinProtocol = TLSv1.2
MinProtocol = DTLSv1.2

حداقل پروتکل TLS روی اشیاء SSL_CTX که مبتنی بر TLS هستند اعمال می‌شود و حداقل پروتکل DTLS روی اشیایی که مبتنی بر DTLS هستند اعمال می‌گردد. همین مورد برای حداکثر نسخه‌های تعیین‌شده با MaxProtocol نیز صدق می‌کند.

هر بخش پیکربندی شامل جفت‌های نام/مقدار است که توسط SSL_CONF_cmd(3) تجزیه می‌شوند، که بر حسب مورد توسط SSL_CTX_config() یا SSL_config() فراخوانی خواهد شد. توجه داشته باشید که هر نویسه‌ای قبل از نقطه اولیه در بخش پیکربندی نادیده گرفته می‌شود، به طوری که می‌توان از یک دستور چندین بار استفاده کرد. این ویژگی احتمالاً برای بارگذاری انواع مختلف کلید بسیار مفید است، همان‌طور که در اینجا نشان داده شده است:

[server_tls_config]
RSA.Certificate = server-rsa.pem
ECDSA.Certificate = server-ecdsa.pem

نام engines در بخش مقداردهی اولیه، نام بخش حاوی فهرست پیکربندی‌های ENGINE را مشخص می‌کند. همانند ارائه‌دهنده‌ها، هر نام در این بخش یک engine را به همراه پیکربندی آن مشخص می‌کند. بخش اختصاصی engine برای تعیین نحوه بارگذاری engine، فعال‌سازی آن و تنظیم سایر پارامترها استفاده می‌شود.

درون بخش engine، نام‌های زیر دارای معنا هستند:

برای تعیین یک نام جایگزین استفاده می‌شود و نام پیش‌فرض مشخص‌شده در لیست engineها را بازنویسی می‌کند. در صورت وجود، باید اولین مورد باشد. برای مثال:
[engines]
foo = foo_engine
[foo_engine]
engine_id = myfoo
یک ENGINE را از مسیر داده‌شده بارگذاری و اضافه می‌کند. این معادل ارسال ctrlهای SO_PATH با آرگومان مسیر، و به دنبال آن LIST_ADD با مقدار 2 و LOAD به ENGINE پویا است. اگر این رفتار مورد نظر نیست، می‌توان ctrlهای جایگزین را مستقیماً با استفاده از دستورات ctrl به ENGINE پویا ارسال کرد.
مشخص می‌کند که آیا ENGINE مقداردهی اولیه شود یا خیر. اگر مقدار 0 باشد، ENGINE مقداردهی اولیه نخواهد شد؛ اگر مقدار 1 باشد، تلاشی برای مقداردهی اولیه فوری ENGINE صورت می‌گیرد. اگر دستور init وجود نداشته باشد، پس از پردازش تمام دستورات موجود در بخش آن، تلاشی برای مقداردهی اولیه ENGINE انجام خواهد شد.
الگوریتم‌های پیش‌فرضی را که یک ENGINE با استفاده از تابع ENGINE_set_default_string() ارائه می‌دهد، تنظیم می‌کند.

تمام نام‌های دیگر به عنوان نام یک دستور ctrl که به ENGINE ارسال می‌شود در نظر گرفته می‌شوند و مقدار آن‌ها، آرگومان ارسال‌شده همراه با دستور است. مقدار ویژه EMPTY به این معنی است که هیچ مقداری همراه با دستور ارسال نمی‌شود. برای مثال:

[engines]
foo = foo_engine
[foo_engine]
dynamic_path = /some/path/fooengine.so
some_ctrl = some_value
default_algorithms = ALL
other_ctrl = EMPTY

نام random در بخش مقداردهی اولیه، نام بخش حاوی تنظیمات مولد اعداد تصادفی را مشخص می‌کند.

درون بخش random، نام‌های زیر دارای معنا هستند:

برای تعیین مولد بیت‌های تصادفی (random bit generator) استفاده می‌شود. برای مثال:
[random]
random = CTR-DRBG

مولدهای بیت تصادفی در دسترس عبارتند از:

مشخص می‌کند که مولد بیت تصادفی CTR-DRBG از چه رمزی (cipher) استفاده خواهد کرد. سایر مولدهای بیت تصادفی این نام را نادیده می‌گیرند. مقدار پیش‌فرض AES-256-CTR است.
مشخص می‌کند که مولدهای بیت تصادفی HASH-DRBG یا HMAC-DRBG از چه دایجست (خلاصه‌ساز) استفاده خواهند کرد. سایر مولدهای بیت تصادفی این نام را نادیده می‌گیرند.
پرسمان ویژگی (property query) مورد استفاده هنگام واکشی مولد بیت تصادفی و هرگونه الگوریتم زیربنایی را تنظیم می‌کند.
منبع تصادفی‌سازی را که باید استفاده شود تنظیم می‌کند. به طور پیش‌فرض SEED-SRC خارج از ارائه‌دهنده FIPS استفاده خواهد شد. ارائه‌دهنده FIPS از callbackها برای دسترسی به همان منابع تصادفی‌سازی از خارج از مرز اعتبارسنجی‌شده استفاده می‌کند.
پرسمان ویژگی مورد استفاده هنگام واکشی منبع تصادفی‌سازی را تنظیم می‌کند.
ارائه‌دهنده‌ای را که باید برای فراخوانی‌های RAND_bytes(3) به جای منابع آنتروپی داخلی استفاده شود، تعیین می‌کند. مقدار پیش‌فرض آن "fips" است. اگر ارائه‌دهنده نام‌برده بارگذاری نشده باشد، از منابع آنتروپی داخلی استفاده خواهد شد.

این مثال نحوه استفاده از نقل‌قول و گریزدهی (escaping) را نشان می‌دهد.

# این بخش پیش‌فرض است.
HOME = /temp
configdir = $ENV::HOME/config
[ section_one ]
# نقل‌قول‌ها اجازه استفاده از فاصله‌های خالی ابتدا و انتها را می‌دهند
any = " any variable name "
other = A string that can \
cover several lines \
by including \\ characters
message = Hello World\n
[ section_two ]
greeting = $section_one::message

این مثال نحوه گسترش ایمن متغیرهای محیطی را نشان می‌دهد. در این مثال، متغیر tempfile قرار است به یک فایل موقت اشاره کند و متغیرهای محیطی TEMP یا TMP در صورت وجود، دایرکتوری محل قرارگیری فایل را مشخص می‌کنند. از آنجا که اگر متغیری وجود نداشته باشد بخش پیش‌فرض بررسی می‌شود، می‌توان TMP را به عنوان پیش‌فرض روی /tmp و TEMP را به عنوان پیش‌فرض روی TMP تنظیم کرد.

# این دو خط باید در بخش پیش‌فرض باشند.
TMP = /tmp
TEMP = $ENV::TMP
# این مورد در هر جایی قابل استفاده است
tmpfile = ${ENV::TEMP}/tmp.filename

این مثال نحوه تحمیل حالت FIPS را برای برنامه sample نشان می‌دهد.

sample = fips_config
[fips_config]
alg_section = evp_properties
[evp_properties]
default_properties = "fips=yes"

مسیر فایل پیکربندی، یا یک رشته خالی برای عدم استفاده از آن. در برنامه‌های با set-user-ID و set-group-ID نادیده گرفته می‌شود.
مسیر دایرکتوری engines. در برنامه‌های با set-user-ID و set-group-ID نادیده گرفته می‌شود.
مسیر دایرکتوری حاوی ماژول‌های OpenSSL مانند ارائه‌دهنده‌ها (providers). در برنامه‌های با set-user-ID و set-group-ID نادیده گرفته می‌شود.
مسیر اختیاری برای اضافه شدن به ابتدای تمام مسیرهای .include.

هیچ راهی برای درج نویسه‌ها با استفاده از قالب هشت‌هشتی (اکتال) \nnn وجود ندارد. رشته‌ها همگی به نویسه null ختم می‌شوند، بنابراین نویسه‌های null نمی‌توانند بخشی از مقدار باشند.

گریزدهی (escaping) کاملاً بی‌نقص نیست: اگر می‌خواهید از توالی‌هایی مانند \n استفاده کنید، نمی‌توانید از هیچ‌گونه نقل‌قولی در همان خط استفاده نمایید.

این محدودیت که تنها یک دایرکتوری می‌تواند در یک زمان باز و خوانده شود را می‌توان یک باگ در نظر گرفت و باید برطرف شود.

یک API مستند‌نشده به نام NCONF_WIN32() از مجموعه قوانین تجزیه کمی متفاوتی استفاده می‌کرد که برای پلتفرم Microsoft Windows سفارشی شده بود. به طور خاص، نویسه بک‌اسلش یک نویسه گریز نبود و می‌توانست در مسیرها استفاده شود، تنها نویسه نقل‌قول دوتایی شناسایی می‌شد و توضیحات با نقطه-ویرگول (semi-colon) شروع می‌شدند. این تابع در OpenSSL 3.0 منسوخ شد؛ برنامه‌هایی که فایل‌های پیکربندی آن‌ها از آن نحو استفاده می‌کنند باید اصلاح شوند.

openssl-x509(1), openssl-req(1), openssl-ca(1), openssl-fipsinstall(1), ASN1_generate_nconf(3), EVP_set_default_properties(3), CONF_modules_load(3), CONF_modules_load_file(3), RAND_bytes(3), fips_config(5), and x509v3_config(5).

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

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

2026-08-25 3.6.4