OPENSSL-CA(1ssl) OpenSSL OPENSSL-CA(1ssl) نام (NAME) openssl-ca - برنامه ساده و کمینه مرجع صدور گواهی (CA) خلاصه دستور (SYNOPSIS) 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|] [-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...] توضیحات (DESCRIPTION) این دستور یک برنامه مرجع صدور گواهی (CA) را شبیه‌سازی می‌کند. به‌ویژه هنگام تصمیم‌گیری برای استفاده از آن در محیط عملیاتی، بخش WARNINGS را مشاهده کنید. این دستور گواهی‌های مبتنی بر نسخه ۳ استاندارد X.509 تولید می‌کند. مگر در مواردی که خلاف آن مشخص شده باشد، افزونه‌های شناسه کلید مطابق با آنچه در x509v3_config(5) توصیف شده است، گنجانده می‌شوند. از این دستور می‌توان برای امضای درخواست‌های امضای گواهی (CSR) در قالب‌های گوناگون و ایجاد فهرست‌های ابطال گواهی (CRL) استفاده کرد. همچنین این ابزار یک پایگاه داده متنی از گواهی‌های صادرشده و وضعیت آن‌ها را نگهداری می‌کند. هنگام امضای گواهی‌ها، می‌توان یک درخواست منفرد را با گزینه -in مشخص کرد، یا اینکه چندین درخواست را با تعیین مجموعه‌ای از فایل‌های certreq پس از تمام گزینه‌ها پردازش نمود. توجه داشته باشید که روش‌های بسیار سبک‌تری نیز برای تولید گواهی‌ها وجود دارد: دستورهای req و x509 را می‌توان برای ایجاد مستقیم گواهی‌ها استفاده کرد. برای جزئیات بیشتر به openssl-req(1) و openssl-x509(1) مراجعه کنید. توضیحات گزینه‌های دستور ca بر اساس اهداف و کاربردهای آن‌ها تقسیم‌بندی شده است. گزینه‌ها (OPTIONS) -help پیام راهنمای نحوه استفاده را چاپ می‌کند. -verbose جزئیات بیشتری را درباره عملیات در حال انجام چاپ می‌کند. -quiet جزئیات کمتری را درباره عملیات در حال انجام چاپ می‌کند که ممکن است در اسکریپت‌های دسته‌ای (batch) یا خطوط لوله (pipelines) کاربردی باشد. -config filename فایل پیکربندی مورد استفاده را تعیین می‌کند. اختیاری است؛ برای شرح مقدار پیش‌فرض، بخش "COMMAND SUMMARY" در openssl(1) را ببینید. -name section, -section section بخش فایل پیکربندی مورد استفاده را مشخص می‌کند (بر default_ca در بخش ca اولویت دارد و آن را بازنویسی می‌کند). -in filename نام فایل ورودی حاوی یک درخواست گواهی (CSR) تکی جهت امضا توسط CA. -inform DER|PEM قالب مورد استفاده هنگام بارگذاری فایل‌های ورودی درخواست گواهی (CSR)؛ به‌طور پیش‌فرض ابتدا PEM آزموده می‌شود. برای جزئیات openssl-format-options(1) را ببینید. -ss_cert filename یک گواهی خودامضا تکی جهت امضا شدن توسط CA. -spkac filename فایلی حاوی یک کلید عمومی امضاشده نت‌اسکیپ و چالش (challenge) و مقادیر فیلدهای اضافی برای امضا توسط CA. برای اطلاعات درباره قالب ورودی و خروجی مورد نیاز، بخش SPKAC FORMAT را ببینید. -infiles در صورت حضور باید آخرین گزینه باشد، تمام آرگومان‌های پس از آن به‌عنوان نام فایل‌های حاوی درخواست‌های گواهی در نظر گرفته می‌شوند. -out filename فایل خروجی برای نوشتن گواهی‌ها در آن. مقدار پیش‌فرض، خروجی استاندارد است. جزئیات گواهی نیز با قالب PEM در این فایل چاپ خواهد شد (به جز اینکه -spkac با قالب DER خروجی می‌دهد). -outdir directory دایرکتوری / پوشه خروجی برای نوشتن گواهی‌ها در آن. گواهی در فایلی نوشته خواهد شد که نام آن از شماره سریال به مبنای ۱۶ (هگز) به همراه پسوند .pem تشکیل شده است. -cert filename گواهی CA، که باید با -keyfile مطابقت داشته باشد. -certform DER|PEM|P12 قالب داده‌ها در فایل‌های ورودی گواهی؛ به‌طور پیش‌فرض تعیین‌نشده است. برای جزئیات openssl-format-options(1) را ببینید. -keyfile filename|uri کلید خصوصی CA برای امضا کردن درخواست‌های گواهی. این باید با -cert مطابقت داشته باشد. -keyform DER|PEM|P12|ENGINE قالب فایل ورودی کلید خصوصی؛ به‌طور پیش‌فرض تعیین‌نشده است. برای جزئیات openssl-format-options(1) را ببینید. -sigopt nm:v ارسال گزینه‌ها به الگوریتم امضا در طول عملیات امضا. نام‌ها و مقادیر این گزینه‌ها مختص الگوریتم هستند و در بخش "Signature parameters" در provider-signature(7) مستند شده‌اند. -vfyopt nm:v ارسال گزینه‌ها به الگوریتم امضا در طول عملیات راستی‌آزمایی (verify). نام‌ها و مقادیر این گزینه‌ها مختص الگوریتم هستند. این گزینه اغلب در زمان امضا نیز باید مشخص شود، زیرا امضای خودیِ یک درخواست گواهی (CSR) در برابر کلید عمومی موجود در آن راستی‌آزمایی می‌شود، و آن راستی‌آزمایی ممکن است به گزینه‌های مختص خود نیاز داشته باشد. -key password گذرواژه مورد استفاده برای رمزگذاری کلید خصوصی. از آنجا که در برخی سیستم‌ها آرگومان‌های خط فرمان قابل مشاهده هستند (مثلاً هنگام استفاده از ps(1) در یونیکس)، این گزینه باید با احتیاط استفاده شود. بهتر است از -passin استفاده شود. -passin arg منبع گذرواژه کلید برای فایل‌های کلید و فایل‌های PKCS#12 گواهی. برای اطلاعات بیشتر درباره قالب arg به openssl-passphrase-options(1) مراجعه کنید. -selfsign نشان می‌دهد که گواهی‌های صادرشده باید با همان کلیدی امضا شوند که درخواست‌های گواهی با آن امضا شده بودند (ارائه‌شده با -keyfile). درخواست‌های گواهی امضاشده با کلیدی متفاوت نادیده گرفته می‌شوند. در صورت ارائه -spkac، -ss_cert یا -gencrl، گزینه -selfsign نادیده گرفته می‌شود. پیامد استفاده از -selfsign این است که گواهی خودامضا در میان رکوردهای پایگاه داده گواهی ظاهر می‌شود (گزینه پیکربندی database را ببینید)، و از همان شمارنده شماره سریال سایر گواهی‌های امضاشده با گواهی خودامضا استفاده می‌کند. -notext از نوشتن شکل متنی گواهی در فایل خروجی خودداری می‌کند. -dateopt قالب تاریخ خروجی را مشخص می‌کند. مقادیر عبارتند از: rfc_822 و iso_8601. پیش‌فرض، rfc_822 است. -startdate date, -not_before date این گزینه امکان تنظیم صریح تاریخ شروع را فراهم می‌کند. قالب تاریخ به‌صورت YYMMDDHHMMSSZ (مشابه ساختار ASN1 UTCTime) یا YYYYMMDDHHMMSSZ (مشابه ساختار ASN1 GeneralizedTime) است. در هر دو قالب، ثانیه‌های SS و منطقه زمانی Z باید حضور داشته باشند. به‌عنوان روش جایگزین، می‌توانید از "today" نیز استفاده کنید. -enddate date, -not_after date این گزینه امکان تنظیم صریح تاریخ انقضا را فراهم می‌کند. قالب تاریخ به‌صورت YYMMDDHHMMSSZ (مشابه ساختار ASN1 UTCTime) یا YYYYMMDDHHMMSSZ (مشابه ساختار ASN1 GeneralizedTime) است. در هر دو قالب، ثانیه‌های SS و منطقه زمانی Z باید حضور داشته باشند. به‌عنوان روش جایگزین، می‌توانید از "today" نیز استفاده کنید. این گزینه بر گزینه -days تقدم دارد و آن را نادیده می‌گیرد. -days arg تعداد روزهایی از امروز که گواهی برای آن مدت تأیید و صادر می‌شود. صرف‌نظر از گزینه -not_before، روزها همیشه از امروز شمارش می‌شوند. هنگامی که همراه با گزینه -not_after/-startdate استفاده شود، تاریخ انقضای صریح اولویت دارد. -md alg خلاصه پیام (Digest) مورد استفاده. هر خلاصه پیامی (digest) که توسط دستور openssl-dgst(1) پشتیبانی شود می‌تواند مورد استفاده قرار گیرد. برای الگوریتم‌های امضایی که از خلاصه پیام پشتیبانی نمی‌کنند (مانند Ed25519 و Ed448)، هر خلاصه پیام تنظیم‌شده‌ای نادیده گرفته می‌شود. این گزینه در مورد CRLها نیز اعمال می‌شود. -policy arg این گزینه «خط‌مشی» (policy) مربوط به CA را برای استفاده تعریف می‌کند. این بخش، بخشی در پرونده پیکربندی است که تعیین می‌کند کدام فیلدها باید اجباری باشند یا با گواهی CA مطابقت داشته باشند. برای اطلاعات بیشتر، بخش POLICY FORMAT را بررسی کنید. -msie_hack این گزینه‌ای منسوخ‌شده است تا این دستور بتواند با نسخه‌های بسیار قدیمی کنترل ثبت گواهی اینترنت اکسپلورر (IE) با عنوان "certenr3" کار کند. این کنترل تقریباً برای همه چیز از UniversalStringها استفاده می‌کرد. از آنجا که این کنترل قدیمی دارای اشکالات امنیتی گوناگونی است، استفاده از آن اکیداً توصیه نمی‌شود. -preserveDN به‌طور معمول ترتیب فیلدهای نام متمایز (DN) یک گواهی با ترتیب فیلدها در بخش خط‌مشی (policy) مربوطه یکسان است. هنگامی که این گزینه تنظیم شود، ترتیب فیلدها مشابه درخواست خواهد بود. این ویژگی عمدتاً برای سازگاری با کنترل ثبت قدیمی‌تر IE است که تنها در صورتی گواهی‌ها را می‌پذیرفت که DNهای آن‌ها با ترتیب درخواست مطابقت داشتند. این مورد برای Xenroll لازم نیست. -noemailDN نام متمایز (DN) یک گواهی می‌تواند شامل فیلد EMAIL باشد، در صورتی که در DN درخواست وجود داشته باشد؛ با این حال، خط‌مشی مناسب این است که رایانامه (e-mail) تنها در افزونه altName گواهی تنظیم شود. هنگامی که این گزینه تنظیم شود، فیلد EMAIL از موضوع (Subject) گواهی حذف شده و تنها در افزونه‌های موجود (در صورت وجود) تنظیم می‌گردد. کلیدواژه email_in_dn می‌تواند در پرونده پیکربندی برای فعال‌سازی این رفتار استفاده شود. -batch این گزینه حالت دسته‌ای (batch mode) را تنظیم می‌کند. در این حالت هیچ سؤالی پرسیده نخواهد شد و تمام گواهی‌ها به‌طور خودکار تأیید و صادر می‌شوند. -extensions section بخشی از پرونده پیکربندی حاوی افزونه‌های گواهی (certificate extensions) که هنگام صدور گواهی افزوده می‌شوند (پیش‌فرض آن x509_extensions است، مگر آنکه گزینه -extfile استفاده شود). برای جزئیات قالب بخش افزونه‌ها، به صفحه راهنمای x509v3_config(5) مراجعه کنید. -extfile file یک پرونده پیکربندی اضافی برای خواندن افزونه‌های گواهی از آن (که از بخش پیش‌فرض استفاده می‌کند مگر آنکه گزینه -extensions نیز استفاده شده باشد). -subj arg نام موضوع (Subject) ارائه‌شده در درخواست را جایگزین می‌کند. آرگومان باید به‌صورت "/type0=value0/type1=value1/type2=..." قالب‌بندی شود. نویسه‌های خاص می‌توانند با "\" (بک‌اسلش) اسکیپ شوند؛ فاصله‌های خالی حفظ می‌شوند. مقادیر خالی مجاز هستند، اما نوع مربوطه در گواهی حاصل گنجانده نخواهد شد. ارائه یک "/" منفرد منجر به یک توالی خالی از RDNها (یک NULL-DN) می‌شود. RDNهای چندمقداری را می‌توان با قرار دادن نویسه "+" به‌جای "/" میان AttributeValueAssertionها (AVAها) که اعضای مجموعه را مشخص می‌کنند، ایجاد کرد. مثال: "/DC=org/DC=OpenSSL/DC=users/UID=123456+CN=John Doe" -utf8 این گزینه باعث می‌شود که مقادیر فیلدها به‌عنوان رشته‌های UTF8 تفسیر شوند؛ به‌طور پیش‌فرض آن‌ها به‌عنوان ASCII تفسیر می‌شوند. این بدان معناست که مقادیر فیلدها، چه از طریق ترمینال پرسیده شده باشند و چه از یک پرونده پیکربندی دریافت شوند، باید رشته‌های معتبر UTF8 باشند. -create_serial اگر خواندن شماره سریال از پرونده متنی مشخص‌شده در پیکربندی با شکست مواجه شود، مشخص کردن این گزینه یک شماره سریال تصادفی جدید ایجاد می‌کند تا به‌عنوان شماره سریال بعدی استفاده شود. برای به‌دست آوردن شماره سریال‌های تصادفی، به‌جای آن از فلگ -rand_serial استفاده کنید؛ این گزینه تنها باید برای بازیابی ساده از خطا استفاده شود. -rand_serial یک عدد تصادفی بزرگ برای استفاده به‌عنوان شماره سریال تولید می‌کند. این گزینه بر هر گزینه یا پیکربندی دیگری برای استفاده از پرونده شماره سریال اولویت دارد. -multivalue-rdn این گزینه منسوخ شده است و هیچ اثری ندارد. -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) مراجعه کنید. گزینه‌های فهرست ابطال گواهی (CRL OPTIONS) -gencrl این گزینه بر اساس اطلاعات موجود در فایل نمایه، یک فهرست ابطال گواهی (CRL) تولید می‌کند. -crl_lastupdate time امکان تنظیم صریح مقدار فیلد lastUpdate مربوط به CRL را فراهم می‌کند؛ اگر این گزینه مشخص نشود، از زمان جاری استفاده می‌شود. این گزینه زمان را در قالب YYMMDDHHMMSSZ (مشابه ساختار ASN1 UTCTime) یا قالب YYYYMMDDHHMMSSZ (مشابه ساختار ASN1 GeneralizedTime) می‌پذیرد. -crl_nextupdate time امکان تنظیم صریح مقدار فیلد nextUpdate مربوط به CRL را فراهم می‌کند؛ اگر این گزینه مشخص شود، هر مقداری که برای -crldays، -crlhours و -crlsec تعیین شده باشد نادیده گرفته می‌شود. این گزینه زمان را در همان قالب‌های -crl_lastupdate می‌پذیرد. -crldays num تعداد روزهای باقی‌مانده تا سررسید CRL بعدی. یعنی تعداد روزها از زمان فعلی برای قرار دادن در فیلد nextUpdate در CRL. -crlhours num تعداد ساعت‌های باقی‌مانده تا سررسید CRL بعدی. -crlsec num تعداد ثانیه‌های باقی‌مانده تا سررسید CRL بعدی. -revoke filename نام فایلی که حاوی گواهی جهت ابطال است. -valid filename نام فایلی حاوی یک گواهی برای افزودن مدخل یک گواهی معتبر (Valid). -status serial وضعیت ابطال گواهی با شماره سریال مشخص‌شده را نمایش می‌دهد و خارج می‌شود. -updatedb نمایه پایگاه‌داده را برای پاکسازی گواهی‌های منقضی‌شده به‌روزرسانی می‌کند. -crl_reason reason دلیل ابطال، که در آن reason یکی از موارد زیر است: unspecified، keyCompromise، CACompromise، affiliationChanged، superseded، cessationOfOperation، certificateHold یا removeFromCRL. تطابق reason به بزرگی و کوچکی حروف حساس نیست. تنظیم هر دلیل ابطالی باعث می‌شود CRL از نوع نسخه ۲ (v2) شود. در عمل removeFromCRL کاربرد چندانی ندارد زیرا تنها در CRLهای دلتا (delta CRL) استفاده می‌شود که در حال حاضر پیاده‌سازی نشده‌اند. -crl_hold instruction این گزینه کد دلیل ابطال CRL را روی certificateHold و دستورالعمل تعلیق (hold instruction) را روی instruction تنظیم می‌کند که باید یک شناسه شیء (OID) باشد. اگرچه هر OIDای می‌تواند استفاده شود، اما معمولاً تنها از holdInstructionNone (که استفاده از آن در RFC 5280 منسوخ شده است)، holdInstructionCallIssuer یا holdInstructionReject استفاده می‌شود. -crl_compromise time این گزینه دلیل ابطال را روی keyCompromise و زمان افشا/به‌خطر‌افتادن کلید را روی time تنظیم می‌کند. مقدار time باید در قالب GeneralizedTime یعنی به صورت YYYYMMDDHHMMSSZ باشد. -crl_CA_compromise time مشابه crl_compromise است، با این تفاوت که دلیل ابطال روی CACompromise تنظیم می‌شود. -crlexts section بخشی از فایل پیکربندی که حاوی افزونه‌های CRL برای گنجاندن است. اگر هیچ بخش افزونه CRLای وجود نداشته باشد، یک CRL نسخه ۱ (V1) ایجاد می‌شود؛ اگر بخش افزونه‌های CRL موجود باشد (حتی اگر خالی باشد)، آنگاه یک CRL نسخه ۲ (V2) ایجاد می‌شود. افزونه‌های CRL مشخص‌شده از نوع افزونه‌های CRL هستند و نه افزونه‌های مدخل CRL. باید توجه داشت که برخی از نرم‌افزارها (برای مثال Netscape) نمی‌توانند CRLهای V2 را پشتیبانی کنند. برای جزئیات قالب بخش افزونه، صفحه راهنمای x509v3_config(5) را ببینید. گزینه‌های فایل پیکربندی (CONFIGURATION FILE OPTIONS) بخشی از فایل پیکربندی که شامل گزینه‌های این دستور است به شرح زیر مشخص می‌شود: اگر گزینه خط فرمان -name استفاده شود، نام بخشی که باید استفاده شود را تعیین می‌کند. در غیر این صورت بخشی که باید استفاده شود باید در گزینه default_ca از بخش ca در فایل پیکربندی (یا در بخش پیش‌فرض فایل پیکربندی) مشخص شده باشد. علاوه بر default_ca، گزینه‌های زیر مستقیماً از بخش ca خوانده می‌شوند: RANDFILE preserve msie_hack به استثنای RANDFILE، این مورد احتمالاً یک اشکال است و ممکن است در انتشارها و نسخه‌های بعدی تغییر کند. بسیاری از گزینه‌های فایل پیکربندی با گزینه‌های خط فرمان یکسان هستند. در مواردی که گزینه هم در فایل پیکربندی و هم در خط فرمان وجود داشته باشد، مقدار ارائه‌شده در خط فرمان استفاده می‌شود. در جایی که یک گزینه به عنوان الزامی توصیف شده است، باید در فایل پیکربندی حضور داشته باشد یا از معادل خط فرمان آن (در صورت وجود) استفاده شود. oid_file این گزینه فایلی را مشخص می‌کند که حاوی OBJECT IDENTIFIERS (شناسه‌های شیء) اضافی است. هر خط از فایل باید شامل شکل عددی شناسه شیء و به دنبال آن نویسه فاصله، سپس نام کوتاه و به دنبال آن نویسه فاصله و در نهایت نام کامل باشد. oid_section این گزینه بخشی را در فایل پیکربندی مشخص می‌کند که حاوی شناسه‌های شیء اضافی است. هر خط باید از نام کوتاه شناسه شیء به همراه = و شکل عددی تشکیل شود. هنگام استفاده از این گزینه، نام کوتاه و نام کامل یکسان خواهند بود. new_certs_dir مشابه گزینه خط فرمان -outdir است. دایرکتوری محل قرارگیری گواهی‌های جدید را مشخص می‌کند. الزامی است. certificate مشابه گزینه -cert است. فایلی را که حاوی گواهی CA است ارائه می‌دهد. الزامی است. private_key مشابه گزینه -keyfile است. فایلی که حاوی کلید خصوصی CA است. الزامی است. RANDFILE در هنگام راه‌اندازی، فایل مشخص‌شده در مولد اعداد تصادفی بارگذاری می‌شود و هنگام خروج ۲۵۶ بایت در آن نوشته خواهد شد. (توجه: استفاده از RANDFILE دیگر ضروری نیست، بخش "HISTORY" را ببینید). default_days مشابه گزینه -days است. تعداد روزها از امروز برای تعیین مدت اعتبار صدور گواهی. default_startdate مشابه گزینه -startdate است. تاریخ شروع اعتبار برای صدور گواهی. در صورت عدم تنظیم، از زمان جاری استفاده می‌شود. default_enddate مشابه گزینه -enddate است. وجود این گزینه یا default_days (یا معادل‌های خط فرمان آن‌ها) الزامی است. default_crl_hours default_crl_days مشابه گزینه‌های -crlhours و -crldays است. این موارد تنها در صورتی استفاده خواهند شد که هیچ‌یک از گزینه‌های خط فرمان مشخص نشده باشند. برای تولید یک CRL، حداقل یکی از این گزینه‌ها باید وجود داشته باشد. default_md مشابه گزینه -md است. الزامی است، به جز مواردی که الگوریتم امضا نیازی به چکیده (digest) نداشته باشد (مانند Ed25519 و Ed448). database فایل متنی پایگاه داده برای استفاده. الزامی است. این فایل باید وجود داشته باشد اگرچه در ابتدا خالی خواهد بود. unique_subject اگر مقدار yes داده شود، ورودی‌های معتبر گواهی در پایگاه داده باید دارای موضوع یکتا (unique subject) باشند. اگر مقدار no داده شود، چندین ورودی معتبر گواهی ممکن است دقیقاً دارای یک موضوع مشابه باشند. مقدار پیش‌فرض جهت سازگاری با نسخه‌های قدیمی‌تر OpenSSL (پیش از 0.9.8)، yes است. با این حال، برای آسان‌تر کردن جایگزینی / تمدید دوره‌ای (roll-over) گواهی CA، توصیه می‌شود از مقدار no استفاده شود، به‌ویژه اگر با گزینه خط فرمان -selfsign ترکیب شده باشد. توجه داشته باشید که در برخی شرایط، ایجاد گواهی‌ها بدون هیچ‌گونه موضوعی معتبر است. در حالتی که چندین گواهی بدون موضوع وجود داشته باشد، این مورد به عنوان تکراری محسوب نمی‌شود. serial یک فایل متنی حاوی شماره سریال بعدی برای استفاده در مبنای شانزده (hex). الزامی است. این فایل باید وجود داشته باشد و شامل یک شماره سریال معتبر باشد. crlnumber یک فایل متنی حاوی شماره CRL بعدی برای استفاده در مبنای شانزده (hex). شماره CRL تنها در صورتی در CRLها درج خواهد شد که این فایل وجود داشته باشد. اگر این فایل موجود باشد، باید حاوی یک شماره CRL معتبر باشد. x509_extensions یک جایگزین پیش‌فرض برای گزینه -extensions. crl_extensions یک جایگزین پیش‌فرض برای گزینه -crlexts. preserve مشابه گزینه -preserveDN است. email_in_dn مشابه گزینه -noemailDN است. اگر می‌خواهید فیلد EMAIL از DN گواهی حذف شود، کافی است این گزینه را روی 'no' تنظیم کنید. در صورت عدم وجود، حالت پیش‌فرض این است که فیلد EMAIL در DN گواهی مجاز باشد. msie_hack مشابه گزینه -msie_hack است. policy مشابه گزینه -policy است. الزامی است. برای اطلاعات بیشتر بخش POLICY FORMAT را ببینید. name_opt, cert_opt این گزینه‌ها قالبی را مشخص می‌کنند که برای نمایش جزئیات گواهی هنگام درخواست تایید امضا از کاربر استفاده می‌شود. تمام گزینه‌های پشتیبانی‌شده توسط سوییچ‌های -nameopt و -certopt در ابزار x509 را می‌توان در اینجا استفاده کرد، به جز no_signame و no_sigdump که به طور دائم تنظیم شده‌اند و نمی‌توان آن‌ها را غیرفعال کرد (زیرا امضای گواهی در این مرحله قابل نمایش نیست، چرا که گواهی هنوز امضا نشده است). برای سهولت، مقدار ca_default توسط هر دو گزینه پذیرفته می‌شود تا خروجی مناسبی تولید شود. اگر هیچ‌یک از این دو گزینه مشخص نشده باشد، از قالبی که در نسخه‌های قدیمی‌تر OpenSSL وجود داشت استفاده می‌شود. استفاده از قالب قدیمی اکیداً منع شده است زیرا تنها فیلدهای ذکرشده در بخش policy را نمایش می‌دهد، انواع رشته‌های چندکاراکتری را به نادرستی پردازش می‌کند و افزونه‌ها را نمایش نمی‌دهد. copy_extensions نحوه برخورد با افزونه‌ها در درخواست‌های گواهی را تعیین می‌کند. اگر روی none تنظیم شود یا این گزینه مشخص نشده باشد، افزونه‌ها نادیده گرفته شده و در گواهی رونوشت نمی‌شوند. اگر روی copy تنظیم شود، هر افزونه موجود در درخواست که قبلاً در گواهی وجود نداشته باشد، به گواهی رونوشت می‌شود. اگر روی copyall تنظیم شود، تمامی افزونه‌های موجود در درخواست به گواهی رونوشت می‌شوند: اگر افزونه از قبل در گواهی وجود داشته باشد، ابتدا حذف می‌شود. پیش از استفاده از این گزینه بخش WARNINGS را مطالعه کنید. کاربرد اصلی این گزینه این است که به درخواست گواهی اجازه می‌دهد مقادیری را برای افزونه‌های خاصی مانند subjectAltName ارائه دهد. قالب خط‌مشی (POLICY FORMAT) بخش خط‌مشی شامل مجموعه‌ای از متغیرهای متناظر با فیلدهای DN گواهی است. اگر مقدار "match" باشد، مقدار فیلد باید دقیقاً با همان فیلد در گواهی CA یکسان باشد. اگر مقدار "supplied" باشد، باید حتماً وجود داشته باشد. اگر مقدار "optional" باشد، وجود آن اختیاری است. هر فیلدی که در بخش خط‌مشی ذکر نشده باشد، به صورت بی‌صدا حذف می‌شود، مگر اینکه گزینه -preserveDN تنظیم شده باشد که این مورد را نیز بیشتر می‌توان یک رفتار غیرمنتظره و عجیب در نظر گرفت تا یک عملکرد هدفمند. قالب SPKAC (SPKAC FORMAT) ورودی گزینه خط فرمان -spkac یک کلید عمومی امضاشده و چالش نت‌اسکیپ (SPKAC) است. این ورودی معمولاً از تگ KEYGEN در یک فرم HTML برای ایجاد یک کلید خصوصی جدید حاصل می‌شود. با این حال، ایجاد SPKACها با استفاده از openssl-spkac(1) نیز امکان‌پذیر است. این فایل باید حاوی متغیر SPKAC باشد که مقدار آن برابر با SPKAC قرار گرفته است و همچنین شامل مؤلفه‌های مورد نیاز DN به صورت جفت‌های نام و مقدار باشد. اگر لازم است مؤلفه‌ای یکسان را دو بار بگنجانید، می‌توان یک عدد و یک '.' را پیش از آن قرار داد. هنگام پردازش قالب SPKAC، در صورت استفاده از فلگ -out خروجی به صورت DER خواهد بود، اما در صورت ارسال به خروجی استاندارد (stdout) یا استفاده از فلگ -outdir، قالب خروجی PEM خواهد بود. مثال‌ها (EXAMPLES) نکته: این مثال‌ها فرض می‌کنند که ساختار دایرکتوری مورد انتظار این دستور از قبل برپا شده و فایل‌های مربوطه از قبل وجود دارند. این کار معمولاً شامل ایجاد یک گواهی 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 فایل‌ها (FILES) توجه: مکان تمامی فایل‌ها می‌تواند با گزینه‌های زمان کامپایل، مدخل‌های فایل پیکربندی، متغیرهای محیطی یا گزینه‌های خط فرمان تغییر کند. مقادیر زیر بیانگر مقادیر پیش‌فرض هستند. /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 - فایل خروجی گواهی محدودیت‌ها (RESTRICTIONS) فایل ایندکس پایگاه‌داده متنی بخش حیاتی این فرآیند است و در صورت خرابی، ترمیم آن می‌تواند دشوار باشد. از نظر تئوری امکان بازسازی فایل ایندکس از روی تمامی گواهی‌های صادرشده و یک CRL جاری وجود دارد؛ با این حال هیچ گزینه‌ای برای انجام این کار وجود ندارد. قابلیت‌های V2 CRL مانند CRLهای دلتا (delta CRLs) در حال حاضر پشتیبانی نمی‌شوند. اگرچه می‌توان چندین درخواست را به طور همزمان ورودی داد و پردازش کرد، اما تنها گنجاندن یک SPKAC یا گواهی خودامضاشده (self-signed) امکان‌پذیر است. باگ‌ها (BUGS) این دستور رفتارهای عجیب و غیرمنتظره‌ای دارد و گاهی اوقات کاملاً غیرکاربرپسند است. استفاده از یک پایگاه‌داده متنی مقیم در حافظه (in-memory) در زمان وجود شمار بالایی از گواهی‌ها می‌تواند مشکلاتی ایجاد کند، زیرا همان‌طور که از نامش پیداست، پایگاه‌داده باید در حافظه نگهداری شود. این دستور واقعاً نیازمند بازنویسی است یا اینکه قابلیت‌های مورد نیاز باید در سطح دستور یا رابط کاربری ارائه شوند تا جایگزینی کاربرپسندتر بتواند کارها را به درستی انجام دهد. اسکریپت CA.pl کمی کمک می‌کند، اما نه خیلی زیاد. هر فیلدی در درخواست که در شیوه‌نامه (policy) وجود نداشته باشد، به آرامی و بدون اعلان حذف می‌شود. در صورت استفاده از گزینه -preserveDN این اتفاق نمی‌افتد. برای اعمال نبود فیلد EMAIL در DN، همان‌طور که توسط RFCها پیشنهاد شده است، صرف‌نظر از محتوای موضوع درخواست می‌توان از گزینه -noemailDN استفاده کرد. این رفتار باید کاربرپسندتر و قابل‌پیکربندی‌تر باشد. لغو برخی دستورات با خودداری از تایید یک گواهی می‌تواند یک فایل خالی ایجاد کند. هشدارها (WARNINGS) این دستور در اصل به عنوان مثالی از نحوه انجام امور در یک 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 صادر شود، نامعتبر خواهد بود. تاریخچه (HISTORY) از نسخه 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 بهره می‌برند و افزونه‌های شناسه کلید به طور پیش‌فرض گنجانده می‌شوند. همچنین ببینید (SEE ALSO) openssl(1), openssl-req(1), openssl-spkac(1), openssl-x509(1), CA.pl(1), config(5), x509v3_config(5) حق نشر (COPYRIGHT) حق نشر ۲۰۰۰-۲۰۲۵ نویسندگان پروژه OpenSSL. تمامی حقوق محفوظ است. تحت مجوز آپاچی نسخه ۲.۰ («مجوز») منتشر شده است. شما نمی‌توانید از این فایل مگر در انطباق با این مجوز استفاده کنید. می‌توانید نسخه‌ای از مجوز را در فایل LICENSE توزیع مبدا یا در نشانی زیر دریافت کنید: . 3.6.4 2026-08-25 OPENSSL-CA(1ssl)