| OPENSSL-REQ(1ssl) | OpenSSL | OPENSSL-REQ(1ssl) |
نام (NAME)
openssl-req - دستور تولید گواهی و درخواست گواهی PKCS#10
خلاصه دستور (SYNOPSIS)
openssl req [-help] [-cipher] [-inform DER|PEM] [-outform DER|PEM] [-in filename] [-passin arg] [-out filename] [-passout arg] [-text] [-pubkey] [-noout] [-verify] [-modulus] [-new] [-newkey arg] [-pkeyopt opt:value] [-noenc] [-nodes] [-key filename|uri] [-keyform DER|PEM|P12|ENGINE] [-keyout filename] [-keygen_engine id] [-digest] [-config filename] [-section name] [-x509] [-x509v1] [-CA filename|uri] [-CAkey filename|uri] [-not_before date] [-not_after date] [-days n] [-set_serial n] [-newhdr] [-copy_extensions arg] [-extensions section] [-reqexts section] [-addext ext] [-precert] [-utf8] [-reqopt] [-subject] [-subj arg] [-multivalue-rdn] [-sigopt nm:v] [-vfyopt nm:v] [-batch] [-verbose] [-quiet] [-nameopt option] [-rand files] [-writerand file] [-engine id] [-provider name] [-provider-path path] [-provparam [name:]key=value] [-propquery propq]
توضیحات (DESCRIPTION)
این دستور عمدتاً برای ایجاد و پردازش درخواستهای گواهی (CSR) در قالب PKCS#10 به کار میرود. همچنین میتواند گواهیهای خودامضا، مثلاً برای استفاده به عنوان CAهای ریشه (Root CA)، ایجاد کند.
گزینهها (OPTIONS)
- -help
- پیام راهنمای نحوه استفاده را چاپ میکند.
- -inform DER|PEM
- قالب فایل ورودی CSR مورد استفاده؛ بهطور پیشفرض ابتدا PEM آزموده میشود. برای جزئیات openssl-format-options(1) را ببینید.
- -outform DER|PEM
- قالب
خروجی؛
بهطور
پیشفرض
نامشخص است.
برای
جزئیات
openssl-format-options(1) را
ببینید.
داده یک شیء PKCS#10 است.
- -cipher name
- رمزنگاری مورد استفاده برای رمزگذاری کلید خصوصی را تعیین میکند. اگر رمزی مشخص نشود، بهطور پیشفرض AES-256-CBC استفاده خواهد شد. میتوانید با ارائه هر نام رمزنگاری معتبر OpenSSL این مقدار را بازنویسی کنید.
- -in filename
- نام فایل ورودی را برای خواندن یک درخواست مشخص میکند. در صورتی که -x509 یا -CA مشخص نشده باشد، بهطور پیشفرض از ورودی استاندارد خوانده میشود. یک درخواست تنها در صورتی خوانده میشود که گزینههای ایجاد (-new یا -newkey یا -precert) مشخص نشده باشند.
- -sigopt nm:v
- گزینهها را در طول عملیات امضا به الگوریتم امضا ارسال میکند. نامها و مقادیر این گزینهها وابسته به الگوریتم هستند.
- -vfyopt nm:v
- گزینهها را در طول عملیات اعتبارسنجی به الگوریتم امضا ارسال میکند. نامها و مقادیر این گزینهها وابسته به الگوریتم هستند.
- -passin arg
- منبع گذرواژه برای ورودی کلید خصوصی و گواهی. برای اطلاعات بیشتر درباره قالب arg به openssl-passphrase-options(1) مراجعه کنید.
- -passout arg
- منبع گذرواژه برای فایل خروجی. برای اطلاعات بیشتر درباره قالب arg به openssl-passphrase-options(1) مراجعه کنید.
- -out filename
- نام فایل خروجی برای نوشتن را تعیین میکند؛ بهطور پیشفرض خروجی استاندارد است.
- -text
- درخواست گواهی را در قالب متنی چاپ میکند.
- -subject
- نام موضوع (subject) درخواست گواهی را چاپ میکند (یا موضوع گواهی، در صورتی که -x509 در حال استفاده باشد).
- -pubkey
- کلید عمومی را چاپ میکند.
- -noout
- این گزینه از خروجی دادن نسخه کدگذاریشده درخواست گواهی جلوگیری میکند.
- -modulus
- مقدار مدول کلید عمومی موجود در درخواست را چاپ میکند.
- -verify
- خودامضایی روی درخواست را اعتبارسنجی میکند. در صورت ناموفق بودن اعتبارسنجی، برنامه بلافاصله خارج میشود، یعنی پردازش گزینههای بعدی (مانند -text) نادیده گرفته خواهد شد.
- -new
- این گزینه
یک درخواست
گواهی جدید
تولید
میکند. از
کاربر برای
مقادیر
فیلدهای
مربوطه
درخواست
ورودی
میکند.
فیلدهای
واقعی که
درخواست
میشوند و
حداقل و
حداکثر
اندازههای
آنها در
فایل
پیکربندی و
هرگونه
افزونه
درخواستی
تعیین
شدهاند.
اگر گزینه -key داده نشود، یک کلید خصوصی جدید با استفاده از اطلاعات مشخصشده در فایل پیکربندی یا دادهشده با گزینههای -newkey و -pkeyopt تولید خواهد شد؛ در غیر این صورت بهطور پیشفرض یک کلید RSA با طول ۲۰۴۸ بیت ایجاد میشود.
- -newkey arg
- این گزینه
برای تولید
یک کلید
خصوصی جدید
استفاده
میشود مگر
اینکه -key
داده شده
باشد. سپس
بهگونهای
استفاده
میشود که
گویی با
گزینه -key
ارائه شده
است.
این گزینه متضمن فلگ -new برای ایجاد یک درخواست گواهی جدید، یا یک گواهی جدید در صورت استفاده از -x509 است.
آرگومان یکی از چندین قالب را میپذیرد.
[rsa:]nbits یک کلید RSA با اندازه nbits تولید میکند. اگر nbits حذف شود، یعنی -newkey rsa مشخص شود، اندازه کلید پیشفرضِ مشخصشده در فایل پیکربندی با گزینه default_bits در صورت وجود، وگرنه ۲۰۴۸ استفاده میشود.
سایر الگوریتمها از قالب -newkey algname:file پشتیبانی میکنند، که در آن file یک فایل پارامتر الگوریتم است که با "openssl genpkey -genparam" یا یک گواهی X.509 برای کلیدی با الگوریتم مناسب ایجاد شده است.
param:file با استفاده از فایل پارامتر یا گواهی file کلیدی تولید میکند؛ الگوریتم بر اساس پارامترها تعیین میشود.
algname[:file] با استفاده از الگوریتم دادهشده algname کلیدی تولید میکند. اگر یک فایل پارامتر file داده شود، پارامترهای مشخصشده در آن استفاده میشوند، بهطوری که پارامترهای الگوریتم باید با algname مطابقت داشته باشند. اگر پارامترهای الگوریتم داده نشوند، هر پارامتر ضروری باید از طریق گزینه -pkeyopt تعیین شود.
dsa:filename با استفاده از پارامترهای موجود در فایل filename یک کلید DSA تولید میکند. ec:filename کلید EC تولید میکند (قابل استفاده با هر دو الگوریتم ECDSA یا ECDH)، gost2001:filename کلید GOST R 34.10-2001 تولید میکند (نیازمند موتور gost پیکربندیشده در فایل پیکربندی است). اگر فقط gost2001 مشخص شود، یک مجموعه پارامتر باید توسط -pkeyopt paramset:X تعیین گردد.
- -pkeyopt opt:value
- گزینه الگوریتم کلید عمومی opt را روی value تنظیم میکند. مجموعه دقیق گزینههای پشتیبانیشده به الگوریتم کلید عمومی مورد استفاده و پیادهسازی آن بستگی دارد. برای جزئیات بیشتر به بخش "KEY GENERATION OPTIONS" در openssl-genpkey(1) مراجعه کنید.
- -key filename|uri
- این گزینه
کلید خصوصی
را برای
امضای
گواهی جدید
یا درخواست
گواهی
فراهم
میکند. مگر
اینکه -in
داده شده
باشد، کلید
عمومی
مربوطه در
گواهی جدید
یا درخواست
گواهی قرار
داده
میشود که
منجر به یک
خودامضایی
میگردد.
برای امضای گواهی، گزینه -CA بر این گزینه اولویت داشته و آن را بازنویسی میکند.
این گزینه همچنین کلیدهای خصوصی در قالب PKCS#8 را برای فایلهای قالب PEM میپذیرد.
- -keyform DER|PEM|P12|ENGINE
- قالب کلید خصوصی؛ بهطور پیشفرض نامشخص است. برای جزئیات openssl-format-options(1) را ببینید.
- -keyout filename
- نام فایلی را مشخص میکند که هر کلید خصوصی تازهتولیدشده یا خواندهشده از -key در آن نوشته شود. اگر نه گزینه -keyout و نه گزینه -key ارائه نشده باشند، نام فایل مشخصشده در فایل پیکربندی با گزینه default_keyfile در صورت وجود استفاده میشود. بنابراین، اگر میخواهید کلید خصوصی را بنویسید و گزینه -key فراهم شده است، باید گزینه -keyout را صراحتاً ارائه دهید. اگر کلید جدیدی تولید شود و هیچ نام فایلی مشخص نشده باشد، کلید در خروجی استاندارد نوشته میشود.
- -noenc
- اگر این گزینه مشخص شود، در صورت ایجاد کلید خصوصی، آن کلید رمزگذاری نخواهد شد.
- -nodes
- این گزینه از زمان OpenSSL 3.0 منسوخ شده است؛ بهجای آن از -noenc استفاده کنید.
- -digest
- چکیده پیام
(digest) را برای
امضای
درخواست
مشخص
میکند. هر
چکیدهای
که توسط
دستور dgst در
OpenSSL پشتیبانی
شود قابل
استفاده
است. این
مقدار،
الگوریتم
چکیده
مشخصشده
در فایل
پیکربندی
را
بازنویسی
میکند.
برخی الگوریتمهای کلید عمومی ممکن است این انتخاب را بازنویسی کنند. برای نمونه، امضاهای DSA همیشه از SHA1 استفاده میکنند، امضاهای GOST R 34.10 همیشه از GOST R 34.11-94 (-md_gost94) استفاده میکنند، و Ed25519 و Ed448 هرگز از هیچ چکیدهای استفاده نمیکنند.
- -config filename
- امکان تعیین یک فایل پیکربندی جایگزین را فراهم میکند. اختیاری است؛ برای شرح مقدار پیشفرض، بخش "COMMAND SUMMARY" در openssl(1) را ببینید.
- -section name
- نام بخش مورد استفاده را مشخص میکند؛ پیشفرض req است.
- -subj arg
- نام موضوع
(subject) را برای
درخواست
جدید تنظیم
میکند یا
هنگام
پردازش یک
درخواست
گواهی،
جایگزین
نام موضوع
میشود.
آرگومان باید بهصورت "/type0=value0/type1=value1/type2=..." قالببندی شود. نویسههای خاص میتوانند با "\" (بکاسلش) اسکیپ شوند؛ فاصلههای خالی حفظ میشوند. مقادیر خالی مجاز هستند، اما نوع مربوطه در درخواست گنجانده نخواهد شد. ارائه یک "/" منفرد منجر به یک توالی خالی از RDNها (یک NULL-DN) میشود. RDNهای چندمقداری را میتوان با قرار دادن نویسه "+" بهجای "/" بین AttributeValueAssertionها (AVAs) که اعضای مجموعه را تعیین میکنند، تشکیل داد. مثال:
"/DC=org/DC=OpenSSL/DC=users/UID=123456+CN=John Doe"
- -multivalue-rdn
- این گزینه منسوخ شده و هیچ تاثیری ندارد.
- -x509
- این گزینه
بهجای
درخواست
گواهی، یک
گواهی را در
خروجی
تولید
میکند. این
گزینه
معمولاً
برای تولید
گواهیهای
آزمایشی
استفاده
میشود. این
مورد توسط
گزینه -CA
بهطور
ضمنی فعال
میشود.
اگر -in داده نشود، این گزینه متضمن فلگ -new است.
اگر یک درخواست موجود با گزینه -in مشخص شود، به یک گواهی تبدیل میگردد؛ در غیر این صورت یک درخواست از ابتدا ایجاد میشود.
مگر اینکه با استفاده از گزینه -set_serial مشخص شده باشد، یک عدد تصادفی بزرگ برای شماره سریال استفاده خواهد شد.
مگر اینکه از گزینه -copy_extensions استفاده شود، افزونههای X.509 از هیچ فایل ورودی درخواست ارائهشدهای کپی نمیشوند.
افزونههای X.509 برای اضافه شدن میتوانند در فایل پیکربندی (احتمالاً با استفاده از گزینههای -config و -extensions) و/یا با استفاده از گزینه -addext مشخص شوند.
مگر اینکه -x509v1 داده شود، گواهیهای تولیدشده نسخه ۳ از X.509 را دارند. مگر اینکه خلاف آن مشخص شود، افزونههای شناسه کلید همانطور که در x509v3_config(5) توضیح داده شده است گنجانده میشوند.
- -x509v1
- درخواست تولید گواهیهایی با نسخه ۱ از X.509 را میدهد. این گزینه متضمن -x509 است. اگر افزونههای X.509 ارائه شوند، در هر صورت نسخه ۳ از X.509 تنظیم میشود.
- -CA filename|uri
- گواهی "CA" مورد استفاده برای امضای گواهی جدید را مشخص میکند و متضمن استفاده از -x509 است. هنگام حضور، مانند یک "micro CA" بهشرح زیر عمل میکند: نام موضوع گواهی "CA" بهعنوان نام صادرکننده در گواهی جدید قرار میگیرد، که سپس با استفاده از کلید "CA" دادهشده مطابق آنچه در زیر مشخص شده است، امضا میشود.
- -CAkey filename|uri
- کلید خصوصی "CA" را برای امضای گواهی تنظیم میکند. کلید خصوصی باید با کلید عمومی گواهی دادهشده با -CA مطابقت داشته باشد. اگر این گزینه ارائه نشود، کلید باید در ورودی -CA موجود باشد.
- -not_before date
- هنگامی که -x509 در حال استفاده است، این گزینه امکان تنظیم صریح تاریخ شروع را فراهم میکند، در غیر این صورت نادیده گرفته میشود. قالب date بهصورت YYMMDDHHMMSSZ (همانند یک ساختار ASN1 UTCTime) یا YYYYMMDDHHMMSSZ (همانند یک ساختار ASN1 GeneralizedTime) است. در هر دو قالب، ثانیهها SS و منطقه زمانی Z باید وجود داشته باشند. بهعنوان جایگزین، میتوانید از "today" نیز استفاده کنید.
- -not_after date
- هنگامی که
-x509 در حال
استفاده
است، این
گزینه
امکان
تنظیم صریح
تاریخ
انقضا را
فراهم
میکند، در
غیر این
صورت
نادیده
گرفته
میشود.
قالب date
بهصورت YYMMDDHHMMSSZ
(همانند یک
ساختار ASN1 UTCTime)
یا YYYYMMDDHHMMSSZ
(همانند یک
ساختار ASN1 GeneralizedTime)
است. در هر
دو قالب،
ثانیهها SS
و منطقه
زمانی Z
باید وجود
داشته
باشند.
بهعنوان
جایگزین،
میتوانید
از "today" نیز
استفاده
کنید.
این گزینه بر گزینه -days اولویت دارد و آن را بازنویسی میکند.
- -days n
- هنگامی که
-x509 در حال
استفاده
است، این
گزینه
تعداد
روزها از
امروز را
برای
اعتباربخشی
به گواهی
مشخص
میکند، در
غیر این
صورت
نادیده
گرفته
میشود. n
باید یک عدد
صحیح مثبت
باشد.
پیشفرض ۳۰
روز است.
صرفنظر از گزینه -not_before، روزها همیشه از امروز شمرده میشوند. هنگامی که همراه با گزینه -not_after استفاده شود، تاریخ انقضای صریح اولویت دارد.
- -set_serial n
- شماره سریالی که هنگام خروجی دادن یک گواهی خودامضا استفاده میشود. این مقدار میتواند بهصورت دهدهی یا هگزادسیمال در صورت شروع با "0x" مشخص شود. اگر داده نشود، یک عدد تصادفی بزرگ استفاده خواهد شد.
- -copy_extensions arg
- نحوه
مدیریت
افزونههای
X.509 در
درخواستهای
گواهی را
هنگام
استفاده از
-x509 تعیین
میکند. اگر
arg برابر با
none باشد یا
این گزینه
وجود
نداشته
باشد،
افزونهها
نادیده
گرفته
میشوند.
اگر arg
برابر با copy
یا copyall باشد،
تمامی
افزونههای
موجود در
درخواست به
گواهی کپی
میشوند.
کاربرد اصلی این گزینه اجازه دادن به یک درخواست گواهی برای ارائه مقادیر برای برخی افزونهها مانند subjectAltName است.
- -extensions section, -reqexts section
- میتواند برای بازنویسی نام بخش فایل پیکربندی که افزونههای X.509 از آن در گواهی (هنگام استفاده از -x509) یا درخواست گواهی گنجانده میشوند، استفاده شود. این امکان را فراهم میکند که چندین بخش مختلف در یک فایل پیکربندی برای مشخص کردن درخواستها با اهداف گوناگون استفاده شوند.
- -addext ext
- یک افزونه
مشخص را به
گواهی (اگر
-x509 در حال
استفاده
باشد) یا
درخواست
گواهی
اضافه
میکند.
آرگومان
باید به شکل
یک جفت
"key=value"
باشد،
همانطور
که در فایل
پیکربندی
ظاهر
میشود.
اگر افزونهای با استفاده از این گزینه اضافه شود که OID آن با یکی از موارد تعریفشده در بخش افزونه فایل پیکربندی یکسان باشد، آن را بازنویسی میکند.
این گزینه میتواند چندین بار مشخص شود. در این صورت، یک کلید یکسان نباید بیش از یک بار داده شود.
- -precert
- یک افزونه
مسمومکننده
(poison extension) به
گواهی
اضافه
میشود که
آن را به یک
"پیشگواهی"
(pre-certificate، به RFC6962
مراجعه
کنید) تبدیل
میکند. این
پیشگواهی
میتواند
به
گزارشهای
شفافیت
گواهی (Certificate Transparency)
ارسال شود
تا
برچسبهای
زمانی
گواهی
امضاشده (SCTs)
دریافت
گردند. این
SCTها سپس
میتوانند
قبل از حذف
افزونه
مسمومکننده
و امضای
گواهی،
بهعنوان
یک افزونه
درون
پیشگواهی
تعبیه شوند.
این گزینه متضمن فلگ -new است.
- -utf8
- این گزینه باعث میشود مقادیر فیلدها بهعنوان رشتههای UTF8 تفسیر شوند؛ بهطور پیشفرض آنها بهعنوان ASCII تفسیر میشوند. این بدان معناست که مقادیر فیلدها، چه از ترمینال پرسیده شوند و چه از یک فایل پیکربندی به دست آیند، باید رشتههای UTF8 معتبر باشند.
- -reqopt option
- قالب چاپ
مورد
استفاده با
-text را
سفارشی
میکند.
آرگومان option
میتواند
یک گزینه
منفرد یا
چندین
گزینه
جداشده با
کاما باشد.
به بحث پارامتر -certopt در دستور openssl-x509(1) مراجعه کنید.
- -newhdr
- کلمه NEW را به خطوط سرایند (header) و پانویس (footer) فایل PEM در درخواست خروجی اضافه میکند. برخی نرمافزارها (مانند سرور گواهی نتاسکیپ) و برخی CAها به این نیاز دارند.
- -batch
- حالت غیرتعاملی.
- -verbose
- چاپ جزئیات بیشتر درباره عملیات در حال انجام.
- -quiet
- چاپ جزئیات کمتر درباره عملیات در حال انجام، که ممکن است در طول اسکریپتهای دستهای یا خطوط لوله سودمند باشد (بهویژه از چاپ «نقاط پیشرفت» در طول تولید کلید جلوگیری میشود).
- -keygen_engine id
- یک موتور را (با رشته شناسه یکتای id آن) مشخص میکند که برای عملیات تولید کلید استفاده خواهد شد.
- -nameopt option
- نحوه نمایش نامهای موضوع یا صادرکننده را مشخص میکند. برای جزئیات openssl-namedisplay-options(1) را ببینید.
- -rand files, -writerand file
- برای جزئیات به "Random State Options" در openssl(1) مراجعه کنید.
- -engine id
- به "Engine Options" در openssl(1) مراجعه کنید. این گزینه منسوخ شده است.
- -provider name
- -provider-path path
- -provparam [name:]key=value
- -propquery propq
- به "Provider Options" در openssl(1)، provider(7) و property(7) مراجعه کنید.
قالب فایل پیکربندی (CONFIGURATION FILE FORMAT)
گزینههای پیکربندی در بخش req فایل پیکربندی مشخص میشوند. با استفاده از گزینه -section میتوان نام دیگری را تعیین کرد. همانند تمام فایلهای پیکربندی، اگر مقداری در بخش مشخصشده تعیین نشده باشد، بخش اولیه بدون نام یا بخش default نیز جستجو میشود.
گزینههای موجود بهتفصیل در زیر شرح داده شدهاند.
- input_password, output_password
- گذرواژهها برای فایل کلید خصوصی ورودی (در صورت وجود) و فایل کلید خصوصی خروجی (اگر یکی ایجاد شود). گزینههای خط فرمان passin و passout بر مقادیر فایل پیکربندی اولویت دارند و آنها را بازنویسی میکنند.
- default_bits
- اندازه
پیشفرض
کلید را بر
حسب بیت
مشخص
میکند.
این گزینه در کنار گزینه -new برای تولید یک کلید جدید استفاده میشود. میتوان آن را با تعیین یک اندازه کلید صریح در گزینه -newkey بازنویسی کرد. کوچکترین اندازه کلید پذیرفتهشده ۵۱۲ بیت است. اگر هیچ اندازه کلیدی مشخص نشود، ۲۰۴۸ بیت استفاده میشود.
- default_keyfile
- این نام فایل پیشفرض برای نوشتن کلید خصوصی در آن است. اگر مشخص نشود، کلید در خروجی استاندارد نوشته میشود. این مورد میتواند توسط گزینه -keyout بازنویسی شود.
- oid_file
- فایلی حاوی شناسههای شیء اضافی (OBJECT IDENTIFIERS) را مشخص میکند. هر خط فایل باید شامل شکل عددی شناسه شیء و به دنبال آن فاصله سفید، سپس نام کوتاه و به دنبال آن فاصله سفید و در نهایت نام طولانی باشد.
- oid_section
- بخشی را در فایل پیکربندی مشخص میکند که حاوی شناسههای شیء اضافی است. هر خط باید شامل نام کوتاه شناسه شیء و به دنبال آن = و شکل عددی باشد. هنگام استفاده از این گزینه، نام کوتاه و نام طولانی یکسان هستند.
- RANDFILE
- در هنگام شروع، فایل مشخصشده در مولد اعداد تصادفی بارگذاری میشود، و در هنگام خروج، ۲۵۶ بایت در آن نوشته خواهد شد. این فایل برای تولید کلید خصوصی استفاده میشود.
- encrypt_key
- اگر روی no تنظیم شود، در صورت تولید کلید خصوصی، آن کلید رمزگذاری نخواهد شد. این معادل گزینه خط فرمان -noenc است. برای سازگاری، encrypt_rsa_key یک گزینه معادل محسوب میشود.
- default_md
- این گزینه الگوریتم چکیده را برای استفاده مشخص میکند. هر چکیدهای که توسط دستور dgst در OpenSSL پشتیبانی شود قابل استفاده است. این گزینه میتواند در خط فرمان بازنویسی شود. برخی از الگوریتمهای امضا (مانند Ed25519 و Ed448) هرگونه چکیده تنظیمشده را نادیده خواهند گرفت.
- string_mask
- این گزینه استفاده از انواع خاصی از رشتهها را در فیلدهای مشخصی فیلتر (ماسک) میکند. بیشتر کاربران نیازی به تغییر این گزینه نخواهند داشت. این گزینه میتواند روی چندین مقدار تنظیم شود:
توجه داشته باشید که utf8only توصیه PKIX در RFC 5280 و string_mask پیشفرض است؛ مقدار default گزینه پیشفرض نیست. مقدار nombstr یک راهکار موقت برای برخی نرمافزارها است که با رشتههای BMPString و UTF8String با اندازه متغیر مشکل دارند.
- req_extensions
- بخش فایل پیکربندی حاوی فهرستی از افزونهها را برای اضافه شدن به درخواست گواهی مشخص میکند. این گزینه میتواند توسط سوییچ خط فرمان -reqexts (یا -extensions) بازنویسی شود. برای جزئیات قالب بخش افزونهها، صفحه راهنمای x509v3_config(5) را ببینید.
- x509_extensions
- بخش فایل پیکربندی حاوی فهرستی از افزونهها را برای اضافه شدن به گواهی تولیدشده در هنگام استفاده از -x509 مشخص میکند. این گزینه میتواند توسط سوییچ خط فرمان -extensions بازنویسی شود.
- prompt
- اگر روی مقدار no تنظیم شود، پرسیدن مقادیر فیلدهای گواهی را غیرفعال کرده و مقادیر را مستقیماً از فایل پیکربندی میگیرد. همچنین قالب مورد انتظار بخشهای distinguished_name و attributes را تغییر میدهد.
- utf8
- اگر روی مقدار yes تنظیم شود، مقادیر فیلدها بهعنوان رشتههای UTF8 تفسیر میشوند؛ بهطور پیشفرض آنها بهعنوان ASCII تفسیر میگردند. این بدان معناست که مقادیر فیلدها، چه از طریق ترمینال پرسیده شوند و چه از یک فایل پیکربندی به دست آیند، باید رشتههای معتبر UTF8 باشند.
- attributes
- بخشی را مشخص میکند که حاوی هرگونه صفت درخواستی است: قالب آن مشابه distinguished_name است. معمولاً اینها ممکن است حاوی انواع challengePassword یا unstructuredName باشند. این مقادیر در حال حاضر توسط ابزارهای امضای درخواست در OpenSSL نادیده گرفته میشوند، اما برخی CAها ممکن است به آنها نیاز داشته باشند.
- distinguished_name
- بخشی را مشخص میکند که حاوی فیلدهای نام متمایز (DN) برای پرسیدن ورودی در هنگام تولید یک گواهی یا درخواست گواهی است. قالب آن در بخش بعدی شرح داده شده است.
قالب بخشهای نام متمایز و صفتها (DISTINGUISHED NAME AND ATTRIBUTE SECTION FORMAT)
دو قالب مجزا برای بخشهای نام متمایز (DN) و صفتها وجود دارد. اگر گزینه prompt روی no تنظیم شده باشد، این بخشها تنها از نامهای فیلد و مقادیر آنها تشکیل میشوند؛ برای مثال:
CN=My Name OU=My Organization emailAddress=someone@somewhere.org
این قابلیت به برنامههای خارجی (مانند برنامههای گرافیکی) امکان میدهد یک فایل الگو با تمام نامها و مقادیر فیلدها تولید کرده و آن را به این دستور ارسال کنند. یک نمونه از این نوع فایل پیکربندی در بخش مثالها (EXAMPLES) آمده است.
در حالت دیگر، اگر گزینه prompt وجود نداشته باشد یا روی no تنظیم نشده باشد، فایل حاوی اطلاعات درخواست ورودی فیلدها خواهد بود. این ساختار از خطوطی به شکل زیر تشکیل میشود:
fieldName="prompt" fieldName_default="default field value" fieldName_min= 2 fieldName_max= 4
عبارت "fieldName" نام فیلد مورد استفاده است؛ برای مثال commonName (یا CN). رشته "prompt" برای درخواست از کاربر جهت وارد کردن جزئیات مربوطه استفاده میشود. اگر کاربر چیزی وارد نکند، در صورت وجود، مقدار پیشفرض استفاده میشود و اگر مقدار پیشفرضی وجود نداشته باشد، فیلد حذف خواهد شد. حتی در صورت وجود مقدار پیشفرض، اگر کاربر صرفاً نویسه '.' را وارد کند، فیلد همچنان حذف میشود.
تعداد نویسههای واردشده باید میان محدودیتهای fieldName_min و fieldName_max باشد: ممکن است محدودیتهای دیگری بر اساس فیلد مورد استفاده وجود داشته باشد (برای مثال countryName فقط میتواند دو نویسه باشد و باید در یک PrintableString بگنجد).
برخی فیلدها (مانند organizationName) میتوانند بیش از یک بار در یک DN استفاده شوند. این امر مشکلی ایجاد میکند چرا که فایلهای پیکربندی تکرار یک نام یکسان را تشخیص نمیدهند. برای جلوگیری از این مشکل، اگر fieldName حاوی نویسههایی باشد که به یک نقطه ختم میشوند، آنها نادیده گرفته خواهند شد. بنابراین برای مثال میتوان organizationName دوم را با نامیدن آن بهصورت "1.organizationName" وارد کرد.
نامهای فیلد مجاز واقعی، هر نام کوتاه یا طولانی شناسه شیء (OID) هستند. این نامها در OpenSSL کامپایل شدهاند و شامل مقادیر متداولی مانند commonName، countryName، localityName، organizationName، organizationalUnitName و stateOrProvinceName میباشند. علاوه بر این، emailAddress و همچنین name، surname، givenName، initials و dnQualifier نیز گنجانده شدهاند.
شناسههای شیء اضافی را میتوان با گزینههای oid_file یا oid_section در فایل پیکربندی تعریف کرد. با هرگونه فیلد اضافی بهگونهای رفتار میشود که گویی یک DirectoryString هستند.
مثالها (EXAMPLES)
بررسی و اعتبارسنجی درخواست گواهی:
openssl req -in req.pem -text -verify -noout
تعیین رمزنگاری مورد استفاده برای رمزگذاری کلید خصوصی:
openssl req -newkey rsa:2048 -keyout privatekey.pem -out request.csr -cipher aes-256-cbc
ایجاد یک کلید خصوصی و سپس تولید یک درخواست گواهی از آن:
openssl genrsa -out key.pem 2048 openssl req -new -key key.pem -out req.pem
همان کار اما فقط با استفاده از req:
openssl req -newkey rsa:2048 -keyout key.pem -out req.pem
تولید یک گواهی ریشه خودامضا:
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out req.pem
ایجاد یک کلید خصوصی SM2 و سپس تولید یک درخواست گواهی از آن:
openssl ecparam -genkey -name SM2 -out sm2.key openssl req -new -key sm2.key -out sm2.csr -sm3 -sigopt "distid:1234567812345678"
بررسی و اعتبارسنجی یک درخواست گواهی SM2:
openssl req -verify -in sm2.csr -sm3 -vfyopt "distid:1234567812345678"
نمونهای از یک فایل که توسط گزینه oid_file به آن اشاره شده است:
1.2.3.4 shortName A longer Name 1.2.3.6 otherName Other longer Name
نمونهای از بخشی که توسط oid_section با استفاده از بسط متغیر به آن اشاره شده است:
testoid1=1.2.3.5
testoid2=${testoid1}.6
نمونه فایل پیکربندی برای پرسیدن مقادیر فیلدها از کاربر:
[ req ] default_bits = 2048 default_keyfile = privkey.pem distinguished_name = req_distinguished_name attributes = req_attributes req_extensions = v3_ca dirstring_type = nombstr [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = AU countryName_min = 2 countryName_max = 2 localityName = Locality Name (eg, city) organizationalUnitName = Organizational Unit Name (eg, section) commonName = Common Name (eg, YOUR name) commonName_max = 64 emailAddress = Email Address emailAddress_max = 40 [ req_attributes ] challengePassword = A challenge password challengePassword_min = 4 challengePassword_max = 20 [ v3_ca ] subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer:always basicConstraints = critical, CA:true
نمونه پیکربندی شامل تمام مقادیر فیلدها:
[ req ] default_bits = 2048 default_keyfile = keyfile.pem distinguished_name = req_distinguished_name attributes = req_attributes prompt = no output_password = mypass [ req_distinguished_name ] C = GB ST = Test State or Province L = Test Locality O = Organization Name OU = Organizational Unit Name CN = Common Name emailAddress = test@email.address [ req_attributes ] challengePassword = A challenge password
نمونه ارائه متداولترین صفتها (موضوع و افزونهها) در خط فرمان:
openssl req -new -subj "/C=GB/CN=foo" \
-addext "subjectAltName = DNS:foo.co.uk" \
-addext "certificatePolicies = 1.2.3.4" \
-newkey rsa:2048 -keyout key.pem -out req.pem
نکات (NOTES)
درخواستهای گواهی تولیدشده توسط Xenroll با MSIE دارای افزونههایی هستند. این شامل افزونه keyUsage است که نوع کلید (فقط امضا یا استفاده عمومی) را تعیین میکند و هر OID اضافی واردشده توسط اسکریپت در یک افزونه extendedKeyUsage قرار میگیرد.
عیبیابی (DIAGNOSTICS)
پیامهای زیر معمولاً مورد پرسش قرار میگیرند:
Using configuration from /some/path/openssl.cnf Unable to load config info
این پیام مدتی بعد با پیام زیر دنبال میشود:
unable to find 'distinguished_name' in config problems making Certificate Request
اولین پیام خطا سرنخ اصلی است: نمیتواند فایل پیکربندی را پیدا کند! برخی عملیات (مانند بررسی یک درخواست گواهی) نیازی به فایل پیکربندی ندارند، بنابراین استفاده از آن اجباری نیست. با این حال، تولید گواهیها یا درخواستها به فایل پیکربندی نیاز دارد. این موضوع میتواند بهعنوان یک اشکال در نظر گرفته شود.
پیام گیجکننده دیگر این است:
Attributes:
a0:00
این پیام زمانی نمایش داده میشود که هیچ صفتی وجود نداشته باشد و درخواست شامل ساختار خالی و صحیح SET OF باشد (که کدگذاری DER آن 0xa0 0x00 است). اگر صرفاً مشاهده کنید:
Attributes:
در این صورت SET OF وجود ندارد و کدگذاری از نظر فنی نامعتبر است (اما تحمل میشود). برای اطلاعات بیشتر، شرح گزینه خط فرمان -asn1-kludge را ببینید.
اشکالات (BUGS)
نحوه مدیریت T61Stringها (یا TeletexString) در OpenSSL دارای اشکال است: در عمل با آنها مانند ISO-8859-1 (Latin 1) رفتار میکند، و Netscape و MSIE نیز رفتار مشابهی دارند. این امر در صورتی که به نویسههایی نیاز داشته باشید که در PrintableStringها موجود نیستند و مایل یا قادر به استفاده از BMPStringها نباشید، میتواند مشکلساز شود.
در نتیجه این نحوه مدیریت T61String، تنها روش صحیح برای نمایش نویسههای دارای اکسنت در OpenSSL استفاده از یک BMPString است: متاسفانه در حال حاضر Netscape روی اینها با خطا مواجه میشود. اگر مجبورید از نویسههای دارای اکسنت با Netscape و MSIE استفاده کنید، در حال حاضر باید از قالب نامعتبر T61String بهره بگیرید.
شیوه فعلی دریافت ورودی تعاملی چندان کاربرپسند نیست. این روش به شما اجازه نمیدهد آنچه وارد کردهاید را تایید کنید. موارد دیگر مانند افزونهها در درخواستهای گواهی بهصورت ایستا در فایل پیکربندی تعریف شدهاند. برخی از این موارد، مانند یک آدرس ایمیل در subjectAltName، باید توسط کاربر وارد شوند.
همچنین ببینید (SEE ALSO)
openssl(1), openssl-x509(1), openssl-ca(1), openssl-genrsa(1), openssl-gendsa(1), config(5), x509v3_config(5)
تاریخچه (HISTORY)
رمزنگاری پیشفرض از 3DES به AES-256 در OpenSSL 3.5 تغییر یافت.
گزینه -section در OpenSSL 3.0.0 اضافه شد.
گزینه -multivalue-rdn در OpenSSL 3.0.0 منسوخ شد و هیچ تاثیری ندارد.
گزینه -engine در OpenSSL 3.0 منسوخ شد. گزینه -nodes نیز در OpenSSL 3.0 منسوخ شد؛ بهجای آن از -noenc استفاده کنید.
گزینه -reqexts در OpenSSL 3.2 بهعنوان نام مستعار -extensions قرار گرفت.
از زمان OpenSSL 3.2، گواهیهای تولیدشده دارای نسخه ۳ از X.509 هستند مگر اینکه -x509v1 داده شود، و افزونههای شناسه کلید بهطور پیشفرض گنجانده میشوند.
از زمان OpenSSL 3.3، گزینه -verify در صورت شکست با کد ۱ خارج میشود.
حق نشر (COPYRIGHT)
حق نشر ۲۰۰۰-۲۰۲۵ متعلق به پدیدآورندگان پروژه OpenSSL است. کلیه حقوق محفوظ است.
تحت مجوز آپاچی نسخه ۲.۰ ("مجوز") ارائه شده است. شما نمیتوانید از این فایل مگر در انطباق با این مجوز استفاده کنید. میتوانید نسخهای از مجوز را در فایل LICENSE در توزیع مبدا یا در نشانی زیر دریافت کنید: https://www.openssl.org/source/license.html.
| 2026-08-25 | 3.6.4 |