OPENSSL-CA(1ssl) OpenSSL OPENSSL-CA(1ssl)

openssl-ca - برنامه ساده و کمینه مرجع صدور گواهی (CA)

openssl ca [-help] [-verbose] [-quiet] [-config filename] [-name section] [-section section] [-gencrl] [-revoke file] [-valid file] [-status serial] [-updatedb] [-crl_reason reason] [-crl_hold instruction] [-crl_compromise time] [-crl_CA_compromise time] [-crl_lastupdate date] [-crl_nextupdate date] [-crldays days] [-crlhours hours] [-crlsec seconds] [-crlexts section] [-startdate date] [-not_before date] [-enddate date] [-not_after date] [-days arg] [-md arg] [-policy arg] [-keyfile filename|uri] [-keyform DER|PEM|P12|ENGINE] [-key arg] [-passin arg] [-cert file] [-certform DER|PEM|P12] [-selfsign] [-in file] [-inform DER|<PEM>] [-out file] [-notext] [-dateopt] [-outdir dir] [-infiles] [-spkac file] [-ss_cert file] [-preserveDN] [-noemailDN] [-batch] [-msie_hack] [-extensions section] [-extfile section] [-subj arg] [-utf8] [-sigopt nm:v] [-vfyopt nm:v] [-create_serial] [-rand_serial] [-multivalue-rdn] [-rand files] [-writerand file] [-engine id] [-provider name] [-provider-path path] [-provparam [name:]key=value] [-propquery propq] [certreq...]

این دستور یک برنامه مرجع صدور گواهی (CA) را شبیه‌سازی می‌کند. به‌ویژه هنگام تصمیم‌گیری برای استفاده از آن در محیط عملیاتی، بخش WARNINGS را مشاهده کنید.

این دستور گواهی‌های مبتنی بر نسخه ۳ استاندارد X.509 تولید می‌کند. مگر در مواردی که خلاف آن مشخص شده باشد، افزونه‌های شناسه کلید مطابق با آنچه در x509v3_config(5) توصیف شده است، گنجانده می‌شوند.

از این دستور می‌توان برای امضای درخواست‌های امضای گواهی (CSR) در قالب‌های گوناگون و ایجاد فهرست‌های ابطال گواهی (CRL) استفاده کرد. همچنین این ابزار یک پایگاه داده متنی از گواهی‌های صادرشده و وضعیت آن‌ها را نگهداری می‌کند. هنگام امضای گواهی‌ها، می‌توان یک درخواست منفرد را با گزینه -in مشخص کرد، یا اینکه چندین درخواست را با تعیین مجموعه‌ای از فایل‌های certreq پس از تمام گزینه‌ها پردازش نمود.

توجه داشته باشید که روش‌های بسیار سبک‌تری نیز برای تولید گواهی‌ها وجود دارد: دستورهای req و x509 را می‌توان برای ایجاد مستقیم گواهی‌ها استفاده کرد. برای جزئیات بیشتر به openssl-req(1) و openssl-x509(1) مراجعه کنید.

توضیحات گزینه‌های دستور ca بر اساس اهداف و کاربردهای آن‌ها تقسیم‌بندی شده است.

پیام راهنمای نحوه استفاده را چاپ می‌کند.
جزئیات بیشتری را درباره عملیات در حال انجام چاپ می‌کند.
جزئیات کمتری را درباره عملیات در حال انجام چاپ می‌کند که ممکن است در اسکریپت‌های دسته‌ای (batch) یا خطوط لوله (pipelines) کاربردی باشد.
فایل پیکربندی مورد استفاده را تعیین می‌کند. اختیاری است؛ برای شرح مقدار پیش‌فرض، بخش "COMMAND SUMMARY" در openssl(1) را ببینید.
بخش فایل پیکربندی مورد استفاده را مشخص می‌کند (بر default_ca در بخش ca اولویت دارد و آن را بازنویسی می‌کند).
نام فایل ورودی حاوی یک درخواست گواهی (CSR) تکی جهت امضا توسط CA.
قالب مورد استفاده هنگام بارگذاری فایل‌های ورودی درخواست گواهی (CSR)؛ به‌طور پیش‌فرض ابتدا PEM آزموده می‌شود. برای جزئیات openssl-format-options(1) را ببینید.
یک گواهی خودامضا تکی جهت امضا شدن توسط CA.
فایلی حاوی یک کلید عمومی امضاشده نت‌اسکیپ و چالش (challenge) و مقادیر فیلدهای اضافی برای امضا توسط CA. برای اطلاعات درباره قالب ورودی و خروجی مورد نیاز، بخش SPKAC FORMAT را ببینید.
در صورت حضور باید آخرین گزینه باشد، تمام آرگومان‌های پس از آن به‌عنوان نام فایل‌های حاوی درخواست‌های گواهی در نظر گرفته می‌شوند.
فایل خروجی برای نوشتن گواهی‌ها در آن. مقدار پیش‌فرض، خروجی استاندارد است. جزئیات گواهی نیز با قالب PEM در این فایل چاپ خواهد شد (به جز اینکه -spkac با قالب DER خروجی می‌دهد).
دایرکتوری / پوشه خروجی برای نوشتن گواهی‌ها در آن. گواهی در فایلی نوشته خواهد شد که نام آن از شماره سریال به مبنای ۱۶ (هگز) به همراه پسوند .pem تشکیل شده است.
گواهی CA، که باید با -keyfile مطابقت داشته باشد.
قالب داده‌ها در فایل‌های ورودی گواهی؛ به‌طور پیش‌فرض تعیین‌نشده است. برای جزئیات openssl-format-options(1) را ببینید.
کلید خصوصی CA برای امضا کردن درخواست‌های گواهی. این باید با -cert مطابقت داشته باشد.
قالب فایل ورودی کلید خصوصی؛ به‌طور پیش‌فرض تعیین‌نشده است. برای جزئیات openssl-format-options(1) را ببینید.
ارسال گزینه‌ها به الگوریتم امضا در طول عملیات امضا. نام‌ها و مقادیر این گزینه‌ها مختص الگوریتم هستند و در بخش "Signature parameters" در provider-signature(7) مستند شده‌اند.
ارسال گزینه‌ها به الگوریتم امضا در طول عملیات راستی‌آزمایی (verify). نام‌ها و مقادیر این گزینه‌ها مختص الگوریتم هستند.

این گزینه اغلب در زمان امضا نیز باید مشخص شود، زیرا امضای خودیِ یک درخواست گواهی (CSR) در برابر کلید عمومی موجود در آن راستی‌آزمایی می‌شود، و آن راستی‌آزمایی ممکن است به گزینه‌های مختص خود نیاز داشته باشد.

گذرواژه مورد استفاده برای رمزگذاری کلید خصوصی. از آنجا که در برخی سیستم‌ها آرگومان‌های خط فرمان قابل مشاهده هستند (مثلاً هنگام استفاده از ps(1) در یونیکس)، این گزینه باید با احتیاط استفاده شود. بهتر است از -passin استفاده شود.
منبع گذرواژه کلید برای فایل‌های کلید و فایل‌های PKCS#12 گواهی. برای اطلاعات بیشتر درباره قالب arg به openssl-passphrase-options(1) مراجعه کنید.
نشان می‌دهد که گواهی‌های صادرشده باید با همان کلیدی امضا شوند که درخواست‌های گواهی با آن امضا شده بودند (ارائه‌شده با -keyfile). درخواست‌های گواهی امضاشده با کلیدی متفاوت نادیده گرفته می‌شوند. در صورت ارائه -spkac، -ss_cert یا -gencrl، گزینه -selfsign نادیده گرفته می‌شود.

پیامد استفاده از -selfsign این است که گواهی خودامضا در میان رکوردهای پایگاه داده گواهی ظاهر می‌شود (گزینه پیکربندی database را ببینید)، و از همان شمارنده شماره سریال سایر گواهی‌های امضاشده با گواهی خودامضا استفاده می‌کند.

از نوشتن شکل متنی گواهی در فایل خروجی خودداری می‌کند.
قالب تاریخ خروجی را مشخص می‌کند. مقادیر عبارتند از: rfc_822 و iso_8601. پیش‌فرض، rfc_822 است.
این گزینه امکان تنظیم صریح تاریخ شروع را فراهم می‌کند. قالب تاریخ به‌صورت YYMMDDHHMMSSZ (مشابه ساختار ASN1 UTCTime) یا YYYYMMDDHHMMSSZ (مشابه ساختار ASN1 GeneralizedTime) است. در هر دو قالب، ثانیه‌های SS و منطقه زمانی Z باید حضور داشته باشند. به‌عنوان روش جایگزین، می‌توانید از "today" نیز استفاده کنید.
این گزینه امکان تنظیم صریح تاریخ انقضا را فراهم می‌کند. قالب تاریخ به‌صورت YYMMDDHHMMSSZ (مشابه ساختار ASN1 UTCTime) یا YYYYMMDDHHMMSSZ (مشابه ساختار ASN1 GeneralizedTime) است. در هر دو قالب، ثانیه‌های SS و منطقه زمانی Z باید حضور داشته باشند. به‌عنوان روش جایگزین، می‌توانید از "today" نیز استفاده کنید.

این گزینه بر گزینه -days تقدم دارد و آن را نادیده می‌گیرد.

تعداد روزهایی از امروز که گواهی برای آن مدت تأیید و صادر می‌شود.

صرف‌نظر از گزینه -not_before، روزها همیشه از امروز شمارش می‌شوند. هنگامی که همراه با گزینه -not_after/-startdate استفاده شود، تاریخ انقضای صریح اولویت دارد.

خلاصه پیام (Digest) مورد استفاده. هر خلاصه پیامی (digest) که توسط دستور openssl-dgst(1) پشتیبانی شود می‌تواند مورد استفاده قرار گیرد. برای الگوریتم‌های امضایی که از خلاصه پیام پشتیبانی نمی‌کنند (مانند Ed25519 و Ed448)، هر خلاصه پیام تنظیم‌شده‌ای نادیده گرفته می‌شود. این گزینه در مورد CRLها نیز اعمال می‌شود.
این گزینه «خط‌مشی» (policy) مربوط به CA را برای استفاده تعریف می‌کند. این بخش، بخشی در پرونده پیکربندی است که تعیین می‌کند کدام فیلدها باید اجباری باشند یا با گواهی CA مطابقت داشته باشند. برای اطلاعات بیشتر، بخش POLICY FORMAT را بررسی کنید.
این گزینه‌ای منسوخ‌شده است تا این دستور بتواند با نسخه‌های بسیار قدیمی کنترل ثبت گواهی اینترنت اکسپلورر (IE) با عنوان "certenr3" کار کند. این کنترل تقریباً برای همه چیز از UniversalStringها استفاده می‌کرد. از آنجا که این کنترل قدیمی دارای اشکالات امنیتی گوناگونی است، استفاده از آن اکیداً توصیه نمی‌شود.
به‌طور معمول ترتیب فیلدهای نام متمایز (DN) یک گواهی با ترتیب فیلدها در بخش خط‌مشی (policy) مربوطه یکسان است. هنگامی که این گزینه تنظیم شود، ترتیب فیلدها مشابه درخواست خواهد بود. این ویژگی عمدتاً برای سازگاری با کنترل ثبت قدیمی‌تر IE است که تنها در صورتی گواهی‌ها را می‌پذیرفت که DNهای آن‌ها با ترتیب درخواست مطابقت داشتند. این مورد برای Xenroll لازم نیست.
نام متمایز (DN) یک گواهی می‌تواند شامل فیلد EMAIL باشد، در صورتی که در DN درخواست وجود داشته باشد؛ با این حال، خط‌مشی مناسب این است که رایانامه (e-mail) تنها در افزونه altName گواهی تنظیم شود. هنگامی که این گزینه تنظیم شود، فیلد EMAIL از موضوع (Subject) گواهی حذف شده و تنها در افزونه‌های موجود (در صورت وجود) تنظیم می‌گردد. کلیدواژه email_in_dn می‌تواند در پرونده پیکربندی برای فعال‌سازی این رفتار استفاده شود.
این گزینه حالت دسته‌ای (batch mode) را تنظیم می‌کند. در این حالت هیچ سؤالی پرسیده نخواهد شد و تمام گواهی‌ها به‌طور خودکار تأیید و صادر می‌شوند.
بخشی از پرونده پیکربندی حاوی افزونه‌های گواهی (certificate extensions) که هنگام صدور گواهی افزوده می‌شوند (پیش‌فرض آن x509_extensions است، مگر آنکه گزینه -extfile استفاده شود).

برای جزئیات قالب بخش افزونه‌ها، به صفحه راهنمای x509v3_config(5) مراجعه کنید.

یک پرونده پیکربندی اضافی برای خواندن افزونه‌های گواهی از آن (که از بخش پیش‌فرض استفاده می‌کند مگر آنکه گزینه -extensions نیز استفاده شده باشد).
نام موضوع (Subject) ارائه‌شده در درخواست را جایگزین می‌کند.

آرگومان باید به‌صورت "/type0=value0/type1=value1/type2=..." قالب‌بندی شود. نویسه‌های خاص می‌توانند با "\" (بک‌اسلش) اسکیپ شوند؛ فاصله‌های خالی حفظ می‌شوند. مقادیر خالی مجاز هستند، اما نوع مربوطه در گواهی حاصل گنجانده نخواهد شد. ارائه یک "/" منفرد منجر به یک توالی خالی از RDNها (یک NULL-DN) می‌شود. RDNهای چندمقداری را می‌توان با قرار دادن نویسه "+" به‌جای "/" میان AttributeValueAssertionها (AVAها) که اعضای مجموعه را مشخص می‌کنند، ایجاد کرد. مثال:

"/DC=org/DC=OpenSSL/DC=users/UID=123456+CN=John Doe"

این گزینه باعث می‌شود که مقادیر فیلدها به‌عنوان رشته‌های UTF8 تفسیر شوند؛ به‌طور پیش‌فرض آن‌ها به‌عنوان ASCII تفسیر می‌شوند. این بدان معناست که مقادیر فیلدها، چه از طریق ترمینال پرسیده شده باشند و چه از یک پرونده پیکربندی دریافت شوند، باید رشته‌های معتبر UTF8 باشند.
اگر خواندن شماره سریال از پرونده متنی مشخص‌شده در پیکربندی با شکست مواجه شود، مشخص کردن این گزینه یک شماره سریال تصادفی جدید ایجاد می‌کند تا به‌عنوان شماره سریال بعدی استفاده شود. برای به‌دست آوردن شماره سریال‌های تصادفی، به‌جای آن از فلگ -rand_serial استفاده کنید؛ این گزینه تنها باید برای بازیابی ساده از خطا استفاده شود.
یک عدد تصادفی بزرگ برای استفاده به‌عنوان شماره سریال تولید می‌کند. این گزینه بر هر گزینه یا پیکربندی دیگری برای استفاده از پرونده شماره سریال اولویت دارد.
این گزینه منسوخ شده است و هیچ اثری ندارد.
برای جزئیات به بخش "Random State Options" در openssl(1) مراجعه کنید.
به بخش "Engine Options" در openssl(1) مراجعه کنید. این گزینه منسوخ شده است.
به "Provider Options" در openssl(1)، provider(7) و property(7) مراجعه کنید.

این گزینه بر اساس اطلاعات موجود در فایل نمایه، یک فهرست ابطال گواهی (CRL) تولید می‌کند.
امکان تنظیم صریح مقدار فیلد lastUpdate مربوط به CRL را فراهم می‌کند؛ اگر این گزینه مشخص نشود، از زمان جاری استفاده می‌شود. این گزینه زمان را در قالب YYMMDDHHMMSSZ (مشابه ساختار ASN1 UTCTime) یا قالب YYYYMMDDHHMMSSZ (مشابه ساختار ASN1 GeneralizedTime) می‌پذیرد.
امکان تنظیم صریح مقدار فیلد nextUpdate مربوط به CRL را فراهم می‌کند؛ اگر این گزینه مشخص شود، هر مقداری که برای -crldays، -crlhours و -crlsec تعیین شده باشد نادیده گرفته می‌شود. این گزینه زمان را در همان قالب‌های -crl_lastupdate می‌پذیرد.
تعداد روزهای باقی‌مانده تا سررسید CRL بعدی. یعنی تعداد روزها از زمان فعلی برای قرار دادن در فیلد nextUpdate در CRL.
تعداد ساعت‌های باقی‌مانده تا سررسید CRL بعدی.
تعداد ثانیه‌های باقی‌مانده تا سررسید CRL بعدی.
نام فایلی که حاوی گواهی جهت ابطال است.
نام فایلی حاوی یک گواهی برای افزودن مدخل یک گواهی معتبر (Valid).
وضعیت ابطال گواهی با شماره سریال مشخص‌شده را نمایش می‌دهد و خارج می‌شود.
نمایه پایگاه‌داده را برای پاکسازی گواهی‌های منقضی‌شده به‌روزرسانی می‌کند.
دلیل ابطال، که در آن reason یکی از موارد زیر است: unspecified، keyCompromise، CACompromise، affiliationChanged، superseded، cessationOfOperation، certificateHold یا removeFromCRL. تطابق reason به بزرگی و کوچکی حروف حساس نیست. تنظیم هر دلیل ابطالی باعث می‌شود CRL از نوع نسخه ۲ (v2) شود.

در عمل removeFromCRL کاربرد چندانی ندارد زیرا تنها در CRLهای دلتا (delta CRL) استفاده می‌شود که در حال حاضر پیاده‌سازی نشده‌اند.

این گزینه کد دلیل ابطال CRL را روی certificateHold و دستورالعمل تعلیق (hold instruction) را روی instruction تنظیم می‌کند که باید یک شناسه شیء (OID) باشد. اگرچه هر OIDای می‌تواند استفاده شود، اما معمولاً تنها از holdInstructionNone (که استفاده از آن در RFC 5280 منسوخ شده است)، holdInstructionCallIssuer یا holdInstructionReject استفاده می‌شود.
این گزینه دلیل ابطال را روی keyCompromise و زمان افشا/به‌خطر‌افتادن کلید را روی time تنظیم می‌کند. مقدار time باید در قالب GeneralizedTime یعنی به صورت YYYYMMDDHHMMSSZ باشد.
مشابه crl_compromise است، با این تفاوت که دلیل ابطال روی CACompromise تنظیم می‌شود.
بخشی از فایل پیکربندی که حاوی افزونه‌های CRL برای گنجاندن است. اگر هیچ بخش افزونه CRLای وجود نداشته باشد، یک CRL نسخه ۱ (V1) ایجاد می‌شود؛ اگر بخش افزونه‌های CRL موجود باشد (حتی اگر خالی باشد)، آنگاه یک CRL نسخه ۲ (V2) ایجاد می‌شود. افزونه‌های CRL مشخص‌شده از نوع افزونه‌های CRL هستند و نه افزونه‌های مدخل CRL. باید توجه داشت که برخی از نرم‌افزارها (برای مثال Netscape) نمی‌توانند CRLهای V2 را پشتیبانی کنند. برای جزئیات قالب بخش افزونه، صفحه راهنمای x509v3_config(5) را ببینید.

بخشی از فایل پیکربندی که شامل گزینه‌های این دستور است به شرح زیر مشخص می‌شود: اگر گزینه خط فرمان -name استفاده شود، نام بخشی که باید استفاده شود را تعیین می‌کند. در غیر این صورت بخشی که باید استفاده شود باید در گزینه default_ca از بخش ca در فایل پیکربندی (یا در بخش پیش‌فرض فایل پیکربندی) مشخص شده باشد. علاوه بر default_ca، گزینه‌های زیر مستقیماً از بخش ca خوانده می‌شوند:
RANDFILE
preserve
msie_hack به استثنای RANDFILE، این مورد احتمالاً یک اشکال است و ممکن است در انتشارها و نسخه‌های بعدی تغییر کند.

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

این گزینه فایلی را مشخص می‌کند که حاوی OBJECT IDENTIFIERS (شناسه‌های شیء) اضافی است. هر خط از فایل باید شامل شکل عددی شناسه شیء و به دنبال آن نویسه فاصله، سپس نام کوتاه و به دنبال آن نویسه فاصله و در نهایت نام کامل باشد.
این گزینه بخشی را در فایل پیکربندی مشخص می‌کند که حاوی شناسه‌های شیء اضافی است. هر خط باید از نام کوتاه شناسه شیء به همراه = و شکل عددی تشکیل شود. هنگام استفاده از این گزینه، نام کوتاه و نام کامل یکسان خواهند بود.
مشابه گزینه خط فرمان -outdir است. دایرکتوری محل قرارگیری گواهی‌های جدید را مشخص می‌کند. الزامی است.
مشابه گزینه -cert است. فایلی را که حاوی گواهی CA است ارائه می‌دهد. الزامی است.
مشابه گزینه -keyfile است. فایلی که حاوی کلید خصوصی CA است. الزامی است.
در هنگام راه‌اندازی، فایل مشخص‌شده در مولد اعداد تصادفی بارگذاری می‌شود و هنگام خروج ۲۵۶ بایت در آن نوشته خواهد شد. (توجه: استفاده از RANDFILE دیگر ضروری نیست، بخش "HISTORY" را ببینید).
مشابه گزینه -days است. تعداد روزها از امروز برای تعیین مدت اعتبار صدور گواهی.
مشابه گزینه -startdate است. تاریخ شروع اعتبار برای صدور گواهی. در صورت عدم تنظیم، از زمان جاری استفاده می‌شود.
مشابه گزینه -enddate است. وجود این گزینه یا default_days (یا معادل‌های خط فرمان آن‌ها) الزامی است.
مشابه گزینه‌های -crlhours و -crldays است. این موارد تنها در صورتی استفاده خواهند شد که هیچ‌یک از گزینه‌های خط فرمان مشخص نشده باشند. برای تولید یک CRL، حداقل یکی از این گزینه‌ها باید وجود داشته باشد.
مشابه گزینه -md است. الزامی است، به جز مواردی که الگوریتم امضا نیازی به چکیده (digest) نداشته باشد (مانند Ed25519 و Ed448).
فایل متنی پایگاه داده برای استفاده. الزامی است. این فایل باید وجود داشته باشد اگرچه در ابتدا خالی خواهد بود.
اگر مقدار yes داده شود، ورودی‌های معتبر گواهی در پایگاه داده باید دارای موضوع یکتا (unique subject) باشند. اگر مقدار no داده شود، چندین ورودی معتبر گواهی ممکن است دقیقاً دارای یک موضوع مشابه باشند. مقدار پیش‌فرض جهت سازگاری با نسخه‌های قدیمی‌تر OpenSSL (پیش از 0.9.8)، yes است. با این حال، برای آسان‌تر کردن جایگزینی / تمدید دوره‌ای (roll-over) گواهی CA، توصیه می‌شود از مقدار no استفاده شود، به‌ویژه اگر با گزینه خط فرمان -selfsign ترکیب شده باشد.

توجه داشته باشید که در برخی شرایط، ایجاد گواهی‌ها بدون هیچ‌گونه موضوعی معتبر است. در حالتی که چندین گواهی بدون موضوع وجود داشته باشد، این مورد به عنوان تکراری محسوب نمی‌شود.

یک فایل متنی حاوی شماره سریال بعدی برای استفاده در مبنای شانزده (hex). الزامی است. این فایل باید وجود داشته باشد و شامل یک شماره سریال معتبر باشد.
یک فایل متنی حاوی شماره CRL بعدی برای استفاده در مبنای شانزده (hex). شماره CRL تنها در صورتی در CRLها درج خواهد شد که این فایل وجود داشته باشد. اگر این فایل موجود باشد، باید حاوی یک شماره CRL معتبر باشد.
یک جایگزین پیش‌فرض برای گزینه -extensions.
یک جایگزین پیش‌فرض برای گزینه -crlexts.
مشابه گزینه -preserveDN است.
مشابه گزینه -noemailDN است. اگر می‌خواهید فیلد EMAIL از DN گواهی حذف شود، کافی است این گزینه را روی 'no' تنظیم کنید. در صورت عدم وجود، حالت پیش‌فرض این است که فیلد EMAIL در DN گواهی مجاز باشد.
مشابه گزینه -msie_hack است.
مشابه گزینه -policy است. الزامی است. برای اطلاعات بیشتر بخش POLICY FORMAT را ببینید.
این گزینه‌ها قالبی را مشخص می‌کنند که برای نمایش جزئیات گواهی هنگام درخواست تایید امضا از کاربر استفاده می‌شود. تمام گزینه‌های پشتیبانی‌شده توسط سوییچ‌های -nameopt و -certopt در ابزار x509 را می‌توان در اینجا استفاده کرد، به جز no_signame و no_sigdump که به طور دائم تنظیم شده‌اند و نمی‌توان آن‌ها را غیرفعال کرد (زیرا امضای گواهی در این مرحله قابل نمایش نیست، چرا که گواهی هنوز امضا نشده است).

برای سهولت، مقدار ca_default توسط هر دو گزینه پذیرفته می‌شود تا خروجی مناسبی تولید شود.

اگر هیچ‌یک از این دو گزینه مشخص نشده باشد، از قالبی که در نسخه‌های قدیمی‌تر OpenSSL وجود داشت استفاده می‌شود. استفاده از قالب قدیمی اکیداً منع شده است زیرا تنها فیلدهای ذکرشده در بخش policy را نمایش می‌دهد، انواع رشته‌های چندکاراکتری را به نادرستی پردازش می‌کند و افزونه‌ها را نمایش نمی‌دهد.

نحوه برخورد با افزونه‌ها در درخواست‌های گواهی را تعیین می‌کند. اگر روی none تنظیم شود یا این گزینه مشخص نشده باشد، افزونه‌ها نادیده گرفته شده و در گواهی رونوشت نمی‌شوند. اگر روی copy تنظیم شود، هر افزونه موجود در درخواست که قبلاً در گواهی وجود نداشته باشد، به گواهی رونوشت می‌شود. اگر روی copyall تنظیم شود، تمامی افزونه‌های موجود در درخواست به گواهی رونوشت می‌شوند: اگر افزونه از قبل در گواهی وجود داشته باشد، ابتدا حذف می‌شود. پیش از استفاده از این گزینه بخش WARNINGS را مطالعه کنید.

کاربرد اصلی این گزینه این است که به درخواست گواهی اجازه می‌دهد مقادیری را برای افزونه‌های خاصی مانند subjectAltName ارائه دهد.

بخش خط‌مشی شامل مجموعه‌ای از متغیرهای متناظر با فیلدهای DN گواهی است. اگر مقدار "match" باشد، مقدار فیلد باید دقیقاً با همان فیلد در گواهی CA یکسان باشد. اگر مقدار "supplied" باشد، باید حتماً وجود داشته باشد. اگر مقدار "optional" باشد، وجود آن اختیاری است. هر فیلدی که در بخش خط‌مشی ذکر نشده باشد، به صورت بی‌صدا حذف می‌شود، مگر اینکه گزینه -preserveDN تنظیم شده باشد که این مورد را نیز بیشتر می‌توان یک رفتار غیرمنتظره و عجیب در نظر گرفت تا یک عملکرد هدفمند.

ورودی گزینه خط فرمان -spkac یک کلید عمومی امضاشده و چالش نت‌اسکیپ (SPKAC) است. این ورودی معمولاً از تگ KEYGEN در یک فرم HTML برای ایجاد یک کلید خصوصی جدید حاصل می‌شود. با این حال، ایجاد SPKACها با استفاده از openssl-spkac(1) نیز امکان‌پذیر است.

این فایل باید حاوی متغیر SPKAC باشد که مقدار آن برابر با SPKAC قرار گرفته است و همچنین شامل مؤلفه‌های مورد نیاز DN به صورت جفت‌های نام و مقدار باشد. اگر لازم است مؤلفه‌ای یکسان را دو بار بگنجانید، می‌توان یک عدد و یک '.' را پیش از آن قرار داد.

هنگام پردازش قالب SPKAC، در صورت استفاده از فلگ -out خروجی به صورت DER خواهد بود، اما در صورت ارسال به خروجی استاندارد (stdout) یا استفاده از فلگ -outdir، قالب خروجی PEM خواهد بود.

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

برای استفاده از فایل پیکربندی نمونه زیر، دایرکتوری‌های demoCA، demoCA/private و demoCA/newcerts ایجاد می‌شوند. گواهی CA در demoCA/cacert.pem و کلید خصوصی آن در demoCA/private/cakey.pem کپی می‌شود. یک فایل demoCA/serial ایجاد می‌شود که برای مثال حاوی "01" و فایل نمایه خالی demoCA/index.txt خواهد بود.

امضای یک درخواست گواهی:

openssl ca -in req.pem -out newcert.pem

امضای یک درخواست گواهی SM2:

openssl ca -in sm2.csr -out sm2.crt -md sm3 \
        -sigopt "distid:1234567812345678" \
        -vfyopt "distid:1234567812345678"

امضای یک درخواست گواهی با استفاده از افزونه‌های CA:

openssl ca -in req.pem -extensions v3_ca -out newcert.pem

تولید یک فهرست ابطال گواهی (CRL):

openssl ca -gencrl -out crl.pem

امضای چندین درخواست:

openssl ca -infiles req1.pem req2.pem req3.pem

صدور گواهی برای یک SPKAC نت‌اسکیپ:

openssl ca -spkac spkac.txt

یک فایل نمونه SPKAC (خط SPKAC برای وضوح بیشتر کوتاه شده است):

SPKAC=MIG0MGAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAn7PDhCeV/xIxUg8V70YRxK2A5
CN=Steve Test
emailAddress=steve@openssl.org
0.OU=OpenSSL Group
1.OU=Another Group

یک فایل پیکربندی نمونه با بخش‌های مربوطه برای این دستور:

[ ca ]
default_ca      = CA_default            # The default ca section
[ CA_default ]
dir            = ./demoCA              # top dir
database       = $dir/index.txt        # index file.
new_certs_dir  = $dir/newcerts         # new certs dir
certificate    = $dir/cacert.pem       # The CA cert
serial         = $dir/serial           # serial no file
#rand_serial    = yes                  # for random serial#'s
private_key    = $dir/private/cakey.pem# CA private key
default_days   = 365                   # how long to certify for
default_crl_days= 30                   # how long before next CRL
default_md     = sha256                # md to use
policy         = policy_any            # default policy
email_in_dn    = no                    # Don't add the email into cert DN
name_opt       = ca_default            # Subject name display option
cert_opt       = ca_default            # Certificate display option
copy_extensions = none                 # Don't copy extensions from request
[ policy_any ]
countryName            = supplied
stateOrProvinceName    = optional
organizationName       = optional
organizationalUnitName = optional
commonName             = supplied
emailAddress           = optional

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

/usr/local/ssl/lib/openssl.cnf - فایل پیکربندی اصلی
./demoCA                       - دایرکتوری اصلی CA
./demoCA/cacert.pem            - گواهی CA
./demoCA/private/cakey.pem     - کلید خصوصی CA
./demoCA/serial                - فایل شماره سریال CA
./demoCA/serial.old            - فایل پشتیبان شماره سریال CA
./demoCA/index.txt             - فایل پایگاه‌داده متنی CA
./demoCA/index.txt.old         - فایل پشتیبان پایگاه‌داده متنی CA
./demoCA/certs                 - فایل خروجی گواهی

فایل ایندکس پایگاه‌داده متنی بخش حیاتی این فرآیند است و در صورت خرابی، ترمیم آن می‌تواند دشوار باشد. از نظر تئوری امکان بازسازی فایل ایندکس از روی تمامی گواهی‌های صادرشده و یک CRL جاری وجود دارد؛ با این حال هیچ گزینه‌ای برای انجام این کار وجود ندارد.

قابلیت‌های V2 CRL مانند CRLهای دلتا (delta CRLs) در حال حاضر پشتیبانی نمی‌شوند.

اگرچه می‌توان چندین درخواست را به طور همزمان ورودی داد و پردازش کرد، اما تنها گنجاندن یک SPKAC یا گواهی خودامضاشده (self-signed) امکان‌پذیر است.

این دستور رفتارهای عجیب و غیرمنتظره‌ای دارد و گاهی اوقات کاملاً غیرکاربرپسند است.

استفاده از یک پایگاه‌داده متنی مقیم در حافظه (in-memory) در زمان وجود شمار بالایی از گواهی‌ها می‌تواند مشکلاتی ایجاد کند، زیرا همان‌طور که از نامش پیداست، پایگاه‌داده باید در حافظه نگهداری شود.

این دستور واقعاً نیازمند بازنویسی است یا اینکه قابلیت‌های مورد نیاز باید در سطح دستور یا رابط کاربری ارائه شوند تا جایگزینی کاربرپسندتر بتواند کارها را به درستی انجام دهد. اسکریپت CA.pl کمی کمک می‌کند، اما نه خیلی زیاد.

هر فیلدی در درخواست که در شیوه‌نامه (policy) وجود نداشته باشد، به آرامی و بدون اعلان حذف می‌شود. در صورت استفاده از گزینه -preserveDN این اتفاق نمی‌افتد. برای اعمال نبود فیلد EMAIL در DN، همان‌طور که توسط RFCها پیشنهاد شده است، صرف‌نظر از محتوای موضوع درخواست می‌توان از گزینه -noemailDN استفاده کرد. این رفتار باید کاربرپسندتر و قابل‌پیکربندی‌تر باشد.

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

این دستور در اصل به عنوان مثالی از نحوه انجام امور در یک CA در نظر گرفته شده بود. کد آن کیفیت مناسب محیط عملیاتی ندارد. قرار نبوده که خود به عنوان یک CA تمام‌عیار مورد استفاده قرار گیرد، با این وجود برخی افراد حداقل به صورت داخلی برای این منظور از آن استفاده می‌کنند. هنگام انجام چنین کاری، باید دقت ویژه‌ای صورت گیرد تا کلید(های) خصوصی مورد استفاده برای امضای گواهی‌ها به درستی ایمن شوند. توصیه می‌شود آن‌ها را در یک حافظه سخت‌افزاری امن مانند کارت هوشمند یا HSM نگهداری کرده و از طریق یک engine یا ارائه‌دهنده رمزنگاری مناسب به آن‌ها دسترسی پیدا کنید.

این دستور عملاً یک دستور تک‌کاربره است: هیچ قفل‌گذاری روی فایل‌های مختلف انجام نمی‌شود و تلاش برای اجرای بیش از یک دستور openssl ca روی همان پایگاه‌داده می‌تواند نتایج غیرقابل پیش‌بینی در پی داشته باشد.

گزینه copy_extensions باید با احتیاط استفاده شود. اگر دقت کافی نشود، می‌تواند یک ریسک امنیتی باشد. برای مثال اگر یک درخواست گواهی حاوی افزونه basicConstraints با مقدار CA:TRUE باشد و مقدار copy_extensions روی copyall تنظیم شده باشد و کاربر هنگام نمایش گواهی متوجه این موضوع نشود، یک گواهی معتبر CA به درخواست‌کننده تحویل داده خواهد شد. با تنظیم copy_extensions روی copy و گنجاندن basicConstraints با مقدار CA:FALSE در فایل پیکربندی می‌توان از این وضعیت جلوگیری کرد. سپس اگر درخواست حاوی افزونه basicConstraints باشد، نادیده گرفته خواهد شد.

همچنین توصیه می‌شود مقادیری برای سایر افزونه‌ها مانند keyUsage در نظر گرفته شود تا از ارائه مقادیر دلخواه توسط درخواست جلوگیری به عمل آید.

محدودیت‌های بیشتری را می‌توان روی خود گواهی CA اعمال کرد. به عنوان مثال، اگر گواهی CA دارای مشخصه زیر باشد:

basicConstraints = CA:TRUE, pathlen:0

آنگاه حتی اگر گواهی با CA:TRUE صادر شود، نامعتبر خواهد بود.

از نسخه 1.1.1 اوپن‌اس‌اس‌ال، این برنامه از RFC5280 پیروی می‌کند. به ویژه، دوره اعتبار گواهی (تعیین‌شده توسط هر یک از گزینه‌های -startdate، -enddate و -days) و زمان آخرین/بعدی به‌روزرسانی CRL (تعیین‌شده توسط هر یک از گزینه‌های -crl_lastupdate، -crl_nextupdate، -crldays، -crlhours و -crlsec) چنانچه تاریخ‌ها زودتر از سال ۲۰۴۹ (شامل آن) باشند به صورت UTCTime، و چنانچه در سال ۲۰۵۰ یا بعد از آن باشند به صورت GeneralizedTime کدگذاری خواهند شد.

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

گزینه -section در نسخه 3.0.0 اوپن‌اس‌اس‌ال اضافه شد.

گزینه -multivalue-rdn در نسخه 3.0.0 اوپن‌اس‌اس‌ال منسوخ شد و هیچ تاثیری ندارد.

گزینه -engine در نسخه 3.0 اوپن‌اس‌اس‌ال منسوخ شد.

از نسخه 3.2 اوپن‌اس‌اس‌ال، گواهی‌های تولیدشده از نسخه ۳ فرمت X.509 بهره می‌برند و افزونه‌های شناسه کلید به طور پیش‌فرض گنجانده می‌شوند.

openssl(1), openssl-req(1), openssl-spkac(1), openssl-x509(1), CA.pl(1), config(5), x509v3_config(5)

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

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

2026-08-25 3.6.4