.\" $OpenBSD: x509v3.cnf.5,v 1.8 2022/03/31 17:27:17 naddy Exp $ .\" full merge up to: .\" OpenSSL man5/x509v3_config a41815f0 Mar 17 18:43:53 2017 -0700 .\" selective merge up to: OpenSSL 36cf10cf Oct 4 02:11:08 2017 -0400 .\" .\" This file was written by Dr. Stephen Henson . .\" Copyright (c) 2004, 2006, 2013, 2014, 2015, 2016 The OpenSSL Project. .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in .\" the documentation and/or other materials provided with the .\" distribution. .\" .\" 3. All advertising materials mentioning features or use of this .\" software must display the following acknowledgment: .\" "This product includes software developed by the OpenSSL Project .\" for use in the OpenSSL Toolkit. (http://www.openssl.org/)" .\" .\" 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to .\" endorse or promote products derived from this software without .\" prior written permission. For written permission, please contact .\" openssl-core@openssl.org. .\" .\" 5. Products derived from this software may not be called "OpenSSL" .\" nor may "OpenSSL" appear in their names without prior written .\" permission of the OpenSSL Project. .\" .\" 6. Redistributions of any form whatsoever must retain the following .\" acknowledgment: .\" "This product includes software developed by the OpenSSL Project .\" for use in the OpenSSL Toolkit (http://www.openssl.org/)" .\" .\" THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY .\" EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR .\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR .\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, .\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT .\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; .\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, .\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED .\" OF THE POSSIBILITY OF SUCH DAMAGE. .\" .Dd $Mdocdate: March 31 2022 $ .Dt X509V3.CNF 5 .Os .Sh "نام (NAME)" .Nm x509v3.cnf .Nd ساختار پیکربندی افزونه‌های گواهی X.509 نسخه ۳ .Sh "توضیحات (DESCRIPTION)" چندین ابزار کاربردی OpenSSL می‌توانند بر اساس محتویات یک فایل پیکربندی، افزونه‌هایی را به یک گواهی یا درخواست گواهی اضافه کنند. قالب فایل بر اساس قالب .Xr openssl.cnf 5 است. .Pp به طور معمول برنامه شامل گزینه‌ای برای اشاره به یک بخش افزونه خواهد بود. هر خط از بخش افزونه به شکل زیر است: .Pp .D1 Ar extension_name Ns = Ns Oo Cm critical , Oc Ar extension_options .Pp اگر .Cm critical وجود داشته باشد، آنگاه افزونه حیاتی (بحرانی) خواهد بود. .Pp قالب .Ar extension_options بستگی به مقدار .Ar extension_name دارد. .Pp چهار نوع اصلی افزونه وجود دارد: افزونه‌های رشته‌ای، افزونه‌های چندمقداری، افزونه‌های خام، و افزونه‌های اختیاری (دلخواه). .Pp افزونه‌های رشته‌ای صرفاً دارای یک رشته متنی هستند که خود مقدار یا نحوه دستیابی به آن را در بر دارد. برای نمونه: .Pp .Dl nsComment="This is a Comment" .Pp افزونه‌های چندمقداری دارای یک فرم کوتاه و یک فرم طولانی هستند. فرم کوتاه فهرستی از نام‌ها و مقادیر است: .Pp .Dl basicConstraints=critical,CA:true,pathlen:1 .Pp فرم طولانی اجازه می‌دهد مقادیر در یک بخش جداگانه قرار گیرند: .Bd -literal -offset indent basicConstraints=critical,@bs_section [bs_section] CA=true pathlen=1 .Ed .Pp هر دو فرم معادل یکدیگر هستند. .Pp ساختار نحو افزونه‌های خام توسط کد افزونه کنترل می‌شود؛ برای نمونه می‌تواند حاوی داده‌هایی در چندین بخش باشد. نحو صحیح مورد استفاده توسط خود کد افزونه تعریف می‌شود؛ برای نمونه افزونه سیاست‌های گواهی را بررسی کنید. .Pp اگر نوع افزونه‌ای پشتیبانی نشود، باید از نحو افزونه اختیاری استفاده شود؛ برای جزئیات بیشتر به بخش .Sx "افزونه‌های اختیاری و دلخواه (ARBITRARY EXTENSIONS)" مراجعه کنید. .Sh "افزونه‌های استاندارد (STANDARD EXTENSIONS)" بخش‌های زیر هر یک از افزونه‌های پشتیبانی‌شده را با جزئیات شرح می‌دهند. .Ss "محدودیت‌های پایه (Basic constraints)" این یک افزونه چندمقداری است که مشخص می‌کند آیا یک گواهی متعلق به مرجع صدور گواهی (CA) است یا خیر. اولین نام (اجباری) .Ic CA است که به دنبال آن .Cm TRUE یا .Cm FALSE می‌آید. اگر .Ic CA برابر با .Cm TRUE باشد، یک نام اختیاری .Ic pathlen به همراه یک مقدار نامنفی می‌تواند گنجانده شود. برای نمونه: .Bd -literal -offset indent basicConstraints=CA:TRUE basicConstraints=CA:FALSE basicConstraints=critical,CA:TRUE, pathlen:0 .Ed .Pp یک گواهی CA باید مقدار .Ic basicConstraints را با فیلد .Ic CA تنظیم‌شده روی .Cm TRUE شامل شود. یک گواهی کاربر نهایی باید .Ic CA را روی .Cm FALSE قرار دهد یا این افزونه را به کلی حذف کند. برخی نرم‌افزارها ممکن است برای گواهی‌های موجودیت نهایی درج .Ic basicConstraints با .Ic CA تنظیم‌شده روی .Cm FALSE را الزامی بدانند. .Pp پارامتر .Ic pathlen حداکثر تعداد CAهایی را که می‌توانند در یک زنجیره در سطوح پایین‌تر از این CA قرار گیرند مشخص می‌کند. بنابراین اگر یک CA با .Ic pathlen برابر با صفر داشته باشید، این CA تنها برای امضای گواهی‌های کاربران نهایی قابل استفاده است و نه CAهای دیگر. .Ss "کاربرد کلید (Key usage)" کاربرد کلید یک افزونه چندمقداری شامل فهرستی از نام‌های کاربردهای مجاز کلید است. .Pp نام‌های پشتیبانی‌شده عبارتند از: .Ic digitalSignature ، .Ic nonRepudiation ، .Ic keyEncipherment ، .Ic dataEncipherment ، .Ic keyAgreement ، .Ic keyCertSign ، .Ic cRLSign ، .Ic encipherOnly و .Ic decipherOnly . نمونه‌ها: .Bd -literal -offset indent keyUsage=digitalSignature, nonRepudiation keyUsage=critical, keyCertSign .Ed .Ss "کاربرد گسترش‌یافته کلید (Extended key usage)" این افزونه شامل فهرستی از اهدافی است که کلید عمومی گواهی می‌تواند برای آن‌ها استفاده شود. .Pp این موارد می‌توانند نام‌های کوتاه شیء یا فرم عددی نقطه‌دار OIDها باشند. در حالی که هر OIDای می‌تواند استفاده شود، تنها مقادیر خاصی معنا دارند. به‌ویژه مقادیر زیر از PKIX، NS و MS معنادار هستند: .Bl -column emailProtection "Microsoft commercial code signing (authenticode)" .It Em مقدار Ta Em مفهوم .It Ic serverAuth Ta احراز هویت سرور TLS .It Ic clientAuth Ta احراز هویت کلاینت TLS .It Ic codeSigning Ta امضای کد .It Ic emailProtection Ta محافظت از رایانامه (S/MIME) .It Ic timeStamping Ta برچسب زمانی معتبر .It Ic OCSPSigning Ta امضای OCSP .It Ic ipsecIKE Ta تبادل کلید اینترنتی IPsec .It Ic msCodeInd Ta امضای کد اختصاصی مایکروسافت (authenticode) .It Ic msCodeCom Ta امضای کد تجاری مایکروسافت (authenticode) .It Ic msCTLSign Ta امضای فهرست اعتماد مایکروسافت .It Ic msEFS Ta سیستم‌فایل رمزگذاری‌شده مایکروسافت .El .Pp نمونه‌ها: .Bd -literal -offset indent extendedKeyUsage=critical,codeSigning,1.2.3.4 extendedKeyUsage=serverAuth,clientAuth .Ed .Ss "شناسه کلید موضوع (Subject key identifier)" این در واقع یک افزونه رشته‌ای است و می‌تواند دو مقدار ممکن داشته باشد: یا کلمه .Cm hash که به طور خودکار از رهنمودهای RFC 3280 پیروی خواهد کرد، یا یک رشته هگزادسیمال که مقدار افزونه را مشخص می‌کند. استفاده از رشته هگزادسیمال شدیداً نهی می‌شود. نمونه: .Pp .Dl subjectKeyIdentifier=hash .Ss "شناسه کلید مرجع صدور (Authority key identifier)" افزونه شناسه کلید مرجع صدور دو گزینه را می‌پذیرد: .Cm keyid و .Cm issuer ؛ هر دو می‌توانند مقدار اختیاری .Cm always را دریافت کنند. .Pp اگر گزینه .Cm keyid حاضر باشد، تلاشی برای کپی کردن شناسه کلید موضوع از گواهی والد صورت می‌گیرد. اگر مقدار .Cm always حاضر باشد، در صورت ناموفق بودن گزینه، خطا بازگردانده می‌شود. .Pp گزینه .Cm issuer صادرکننده و شماره سریال را از گواهی صادرکننده کپی می‌کند. این کار تنها زمانی انجام می‌شود که گزینه .Cm keyid با شکست مواجه شود یا درج نشده باشد، مگر اینکه پرچم .Cm always همواره مقدار را شامل شود. نمونه: .Pp .Dl authorityKeyIdentifier=keyid,issuer .Ss "نام جایگزین موضوع (Subject alternative name)" افزونه نام جایگزین موضوع امکان درج مقادیر مختلفی را در فایل پیکربندی فراهم می‌کند. این موارد شامل .Ic email (آدرس ایمیل)، .Ic URI (نشانگر یکنواخت منابع)، .Ic DNS (نام دامنه DNS)، .Ic RID (یک شناسه ثبت‌شده: OBJECT IDENTIFIER)، .Ic IP (آدرس IP)، .Ic dirName (نام متمایز یا distinguished name) و .Ic otherName هستند. .Pp گزینه .Ic email می‌تواند شامل یک مقدار ویژه به نام .Cm copy باشد. این کار به طور خودکار هرگونه آدرس ایمیل موجود در نام موضوع گواهی را در افزونه درج می‌کند. .Pp آدرس IP مورد استفاده در گزینه‌های .Ic IP می‌تواند در قالب IPv4 یا IPv6 باشد. .Pp مقدار .Ic dirName باید به بخشی اشاره کند که حاوی نام متمایز به صورت مجموعه‌ای از جفت‌های نام و مقدار است. AVAs با چندین مقدار را می‌توان با افزودن پیشوند نویسه .Ql + به ابتدای نام ایجاد کرد. .Pp گزینه .Ic otherName می‌تواند داده‌های اختیاری مرتبط با یک OID را شامل شود: مقدار باید OID به همراه یک سمی‌کولن و محتوا در قالب استاندارد .Xr ASN1_generate_nconf 3 باشد. نمونه‌ها: .Bd -literal -offset 2n subjectAltName=email:copy,email:my@other.address,URI:http://my.url.here subjectAltName=IP:192.168.7.1 subjectAltName=IP:13::17 subjectAltName=email:my@other.address,RID:1.2.3.4 subjectAltName=otherName:1.2.3.4;UTF8:some other identifier subjectAltName=dirName:dir_sect [dir_sect] C=UK O=My Organization OU=My Unit CN=My Name .Ed .Ss "نام جایگزین صادرکننده (Issuer alternative name)" گزینه نام جایگزین صادرکننده از تمامی گزینه‌های لفظی نام جایگزین موضوع پشتیبانی می‌کند. این گزینه از .Ic email : Ns Cm copy پشتیبانی نمی‌کند زیرا کاربردی نخواهد داشت. در عوض از یک گزینه اضافی .Ic issuer : Ns Cm copy پشتیبانی می‌کند که تمام مقادیر نام جایگزین موضوع را از گواهی صادرکننده (در صورت امکان) کپی خواهد کرد. نمونه: .Pp .Dl issuerAltName = issuer:copy .Ss "دسترسی به اطلاعات مرجع صدور (Authority info access)" افزونه دسترسی به اطلاعات مرجع صدور، جزئیاتی را درباره نحوه دسترسی به اطلاعات مشخص مربوط به CA ارائه می‌دهد. نحو آن به صورت .Ar accessOID ; location است که در آن .Ar location همان نحو نام جایگزین موضوع را دارد (به جز اینکه .Ic email : Ns Cm copy پشتیبانی نمی‌شود). پارامتر .Ar accessOID می‌تواند هر OID معتبری باشد اما تنها مقادیر معینی معنادار هستند، برای نمونه .Cm OCSP و .Cm caIssuers . نمونه: .Bd -literal -offset indent authorityInfoAccess = OCSP;URI:http://ocsp.my.host authorityInfoAccess = caIssuers;URI:http://my.ca/ca.html .Ed .Ss "نقاط توزیع فهرست ابطال گواهی (CRL distribution points)" این یک افزونه چندمقداری است که گزینه‌های آن می‌توانند به فرم جفت .Ar name : Ns Ar value با استفاده از همان فرم نام جایگزین موضوع یا یک مقدار واحد به عنوان نام بخشی حاوی تمام فیلدهای نقطه توزیع باشند. .Pp برای یک جفت .Ar name : Ns Ar value یک DistributionPoint جدید با فیلد fullName تنظیم‌شده روی مقدار داده‌شده ایجاد می‌شود و هر دو فیلد cRLissuer و reasons در این حالت حذف می‌شوند. .Pp در حالت تک‌گزینه‌ای، بخش مشخص‌شده حاوی مقادیر برای هر فیلد است. در این بخش: .Pp اگر نام .Ic fullname باشد، فیلد مقدار باید شامل نام کامل نقطه توزیع در همان قالب نام جایگزین موضوع باشد. .Pp اگر نام .Ic relativename باشد، فیلد مقدار باید حاوی نام بخشی باشد که محتویات آن نمایانگر یک قطعه DN برای قرار گرفتن در این فیلد است. .Pp نام .Ic CRLIssuer در صورت وجود، باید حاوی مقداری برای این فیلد در قالب نام جایگزین موضوع باشد. .Pp اگر نام .Ic reasons باشد، فیلد مقدار باید شامل یک فیلد جداشده با کاما حاوی دلایل باشد. دلایل معتبر عبارتند از: .Cm keyCompromise ، .Cm CACompromise ، .Cm affiliationChanged ، .Cm superseded ، .Cm cessationOfOperation ، .Cm certificateHold ، .Cm privilegeWithdrawn و .Cm AACompromise . .Pp نمونه‌های ساده: .Bd -literal -offset indent crlDistributionPoints=URI:http://myhost.com/myca.crl crlDistributionPoints=URI:http://my.com/my.crl,URI:http://oth.com/my.crl .Ed .Pp نمونه کامل نقطه توزیع: .Bd -literal -offset indent crlDistributionPoints=crldp1_section [crldp1_section] fullname=URI:http://myhost.com/myca.crl CRLissuer=dirName:issuer_sect reasons=keyCompromise, CACompromise [issuer_sect] C=UK O=Organisation CN=Some Name .Ed .Ss "نقطه توزیع صادرکننده (Issuing distribution point)" این افزونه تنها باید در CRLها ظاهر شود. این یک افزونه چندمقداری است که نحو آن با چند تفاوت مشابه "بخش" مورد اشاره در افزونه نقاط توزیع CRL است. .Pp نام‌های .Ic reasons و .Ic CRLissuer شناخته‌شده نیستند. .Pp نام .Ic onlysomereasons پذیرفته می‌شود که این فیلد را تنظیم می‌کند. مقدار در همان قالب فیلد .Ic reasons در نقطه توزیع CRL است. .Pp نام‌های .Ic onlyuser ، .Ic onlyCA ، .Ic onlyAA و .Ic indirectCRL نیز پذیرفته می‌شوند. مقادیر باید مقادیر بولی .Cm ( TRUE یا .Cm FALSE ) باشند تا مقدار فیلد متناظر را نشان دهند. نمونه: .Bd -literal -offset indent issuingDistributionPoint=critical, @idp_section [idp_section] fullname=URI:http://myhost.com/myca.crl indirectCRL=TRUE onlysomereasons=keyCompromise, CACompromise [issuer_sect] C=UK O=Organisation CN=Some Name .Ed .Ss "سیاست‌های گواهی (Certificate policies)" این یک افزونه خام است. تمام فیلدهای این افزونه را می‌توان با استفاده از نحو مناسب تنظیم کرد. .Pp اگر از توصیه‌های PKIX پیروی می‌کنید و تنها از یک OID استفاده می‌نمایید، کافی است مقدار آن OID را درج کنید. چندین OID را می‌توان با کاما جدا کرد، برای نمونه: .Pp .Dl certificatePolicies= 1.2.4.5, 1.1.3.4 .Pp اگر می‌خواهید واجد شرایط‌ها (qualifiers) را بگنجانید، OID سیاست و واجد شرایط‌ها باید در بخشی جداگانه مشخص شوند؛ این کار با استفاده از نحو .Pf @ Ar section به جای مقدار OID انجام می‌شود. .Pp بخش مورد اشاره باید شامل OID سیاست با استفاده از نام .Ic policyIdentifier باشد. واجد شرایط‌های .Ic CPSuri را می‌توان با استفاده از نحو زیر گنجاند: .Pp .D1 Ic CPS . Ns Ar nnn Ns = Ns Ar value .Pp واجد شرایط‌های .Ic userNotice را می‌توان با نحو زیر تنظیم کرد: .Pp .D1 Ic userNotice . Ns Ar nnn Ns =@ Ns Ar notice .Pp مقدار واجد شرایط .Ic userNotice در بخش مربوطه مشخص می‌شود. این بخش می‌تواند گزینه‌های .Ic explicitText ، .Ic organization و .Ic noticeNumbers را شامل شود. گزینه‌های .Ic explicitText و .Ic organization رشته‌های متنی هستند، و .Ic noticeNumbers فهرستی جداشده با کاما از اعداد است. گزینه‌های .Ic organization و .Ic noticeNumbers (در صورت گنجانده شدن) باید .Em هر دو حاضر باشند. اگر از گزینه .Ic userNotice همراه با IE5 استفاده می‌کنید، به گزینه .Ic ia5org در بالاترین سطح برای اصلاح کدگذاری نیاز دارید، در غیر این صورت به درستی تفسیر نخواهد شد. نمونه: .Bd -literal -offset indent certificatePolicies=ia5org,1.2.3.4,1.5.6.7.8,@polsect [polsect] policyIdentifier = 1.3.5.8 CPS.1="http://my.host.name" CPS.2="http://my.your.name" userNotice.1=@notice [notice] explicitText="Explicit Text Here" organization="Organisation Name" noticeNumbers=1,2,3,4 .Ed .Pp گزینه .Ic ia5org نوع فیلد .Ic organization را تغییر می‌دهد. در RFC 2459، تنها می‌تواند از نوع .Vt DisplayText باشد. در RFC 3280، نوع .Vt IA5String نیز مجاز است. برخی نرم‌افزارها (برای نمونه برخی نسخه‌های MSIE) ممکن است به .Ic ia5org نیاز داشته باشند. .Ss "محدودیت‌های سیاست (Policy constraints)" این یک افزونه چندمقداری شامل نام‌های .Ic requireExplicitPolicy یا .Ic inhibitPolicyMapping و یک مقدار عدد صحیح نامنفی است. حداقل یک مؤلفه باید حضور داشته باشد. نمونه: .Pp .Dl policyConstraints = requireExplicitPolicy:3 .Ss "منع هرگونه سیاست (Inhibit any policy)" این یک افزونه رشته‌ای است که مقدار آن باید یک عدد صحیح نامنفی باشد. نمونه: .Pp .Dl inhibitAnyPolicy = 2 .Ss "محدودیت‌های نام (Name constraints)" افزونه محدودیت‌های نام یک افزونه چندمقداری است. نام باید با کلمه .Cm permitted یا .Cm excluded شروع شده و پس از آن یک سمی‌کولن بیاید. بقیه نام و مقدار از نحو subjectAltName پیروی می‌کند، به جز اینکه .Ic email : Ns Cm copy پشتیبانی نمی‌شود و فرم .Ic IP باید شامل آدرس IP و ماسک زیرشبکه جداشده با یک اسلش باشد. نمونه‌ها: .Bd -literal -offset indent nameConstraints=permitted;IP:192.168.0.0/255.255.0.0 nameConstraints=permitted;email:.somedomain.com nameConstraints=excluded;email:.com .Ed .Ss "عدم بررسی OCSP (OCSP no check)" افزونه عدم بررسی OCSP یک افزونه رشته‌ای است، اما مقدار آن نادیده گرفته می‌شود. نمونه: .Pp .Dl noCheck = ignored .Ss "قابلیت TLS (TLS Feature - must staple)" این یک افزونه چندمقداری متشکل از فهرستی از شناسه‌های افزونه TLS است. هر شناسه می‌تواند عددی در محدوده ۰ تا ۶۵۵۳۵ یا یک نام پشتیبانی‌شده باشد. هنگامی که یک کلاینت TLS افزونه فهرست‌شده‌ای را ارسال می‌کند، از سرور TLS انتظار می‌رود آن افزونه را در پاسخ خود بگنجاند. .Pp نام‌های پشتیبانی‌شده عبارتند از: .Cm status_request و .Cm status_request_v2 . نمونه: .Pp .Dl tlsfeature = status_request .Sh "افزونه‌های منسوخ‌شده (DEPRECATED EXTENSIONS)" افزونه‌های زیر غیراستاندارد، مختص نت‌اسکیپ و تا حد زیادی منسوخ هستند. استفاده از آن‌ها در برنامه‌های جدید توصیه نمی‌شود. .Ss "افزونه‌های رشته‌ای نت‌اسکیپ (Netscape string extensions)" کامنت نت‌اسکیپ .Ic ( nsComment ) یک افزونه رشته‌ای حاوی توضیحی است که هنگام مشاهده گواهی در برخی مرورگرها نمایش داده می‌شود. نمونه: .Pp .Dl nsComment = "Some Random Comment" .Pp سایر افزونه‌های پشتیبانی‌شده در این دسته عبارتند از: .Ic nsBaseUrl ، .Ic nsRevocationUrl ، .Ic nsCaRevocationUrl ، .Ic nsRenewalUrl ، .Ic nsCaPolicyUrl و .Ic nsSslServerName . .Ss "نوع گواهی نت‌اسکیپ (Netscape certificate type)" این یک افزونه چندمقداری متشکل از فهرستی از پرچم‌ها برای گنجاندن است. برای تعیین اهدافی که گواهی می‌تواند برای آن‌ها استفاده شود به کار می‌رفت. امروزه به جای آن از افزونه‌های .Ic basicConstraints ، .Ic keyUsage و کاربرد گسترش‌یافته کلید استفاده می‌شود. .Pp مقادیر قابل قبول برای .Ic nsCertType عبارتند از: .Cm client ، .Cm server ، .Cm email ، .Cm objsign ، .Cm reserved ، .Cm sslCA ، .Cm emailCA ، .Cm objCA . .Sh "افزونه‌های اختیاری و دلخواه (ARBITRARY EXTENSIONS)" اگر افزونه‌ای توسط کد OpenSSL پشتیبانی نشود، باید با استفاده از قالب افزونه دلخواه کدگذاری گردد. همچنین می‌توان از قالب دلخواه برای افزونه‌های پشتیبانی‌شده نیز استفاده کرد. باید بسیار دقت شود تا داده‌ها به درستی برای نوع افزونه داده‌شده قالب‌بندی شوند. .Pp دو روش برای کدگذاری افزونه‌های دلخواه وجود دارد. .Pp روش اول استفاده از کلمه .Cm ASN1 و سپس محتوای افزونه با استفاده از همان نحو .Xr ASN1_generate_nconf 3 است. برای نمونه: .Bd -literal -offset indent 1.2.3.4=critical,ASN1:UTF8String:Some random data 1.2.3.4=ASN1:SEQUENCE:seq_sect [seq_sect] field1 = UTF8:field1 field2 = UTF8:field2 .Ed .Pp همچنین امکان استفاده از کلمه .Cm DER برای درج داده‌های کدگذاری‌شده خام در هر افزونه‌ای وجود دارد: .Bd -literal -offset indent 1.2.3.4=critical,DER:01:02:03:04 1.2.3.4=DER:01020304 .Ed .Pp مقدار پس از .Cm DER یک دامپ هگزادسیمال از کدگذاری DER افزونه است. هر افزونه‌ای را می‌توان در این فرم قرار داد تا رفتار پیش‌فرض بازنویسی شود. برای نمونه: .Pp .Dl basicConstraints=critical,DER:00:01:02:03 .Sh "فایل‌ها (FILES)" .Bl -tag -width /etc/ssl/x509v3.cnf -compact .It Pa /etc/ssl/x509v3.cnf فایل پیکربندی استاندارد .El .Sh "همچنین ببینید (SEE ALSO)" .Xr openssl 1 , .Xr ASN1_generate_nconf 3 , .Xr OPENSSL_config 3 , .Xr openssl.cnf 5 .Sh "تاریخچه (HISTORY)" کد افزونه‌های X509v3 نخستین بار در OpenSSL 0.9.2 اضافه شد. .Sh "هشدارها (CAVEATS)" هیچ تضمینی وجود ندارد که یک پیاده‌سازی خاص یک افزونه مشخص را پردازش کند. بنابراین گاهی اوقات ممکن است گواهی‌ها برای اهدافی که توسط افزونه‌هایشان ممنوع شده استفاده شوند، زیرا یک برنامه خاص مقادیر افزونه‌های مربوطه را شناسایی نمی‌کند یا به رسمیت نمی‌شناسد. .Pp گزینه‌های .Cm DER و .Cm ASN1 باید با احتیاط استفاده شوند. در صورت عدم دقت، ایجاد افزونه‌های کاملاً نامعتبر بسیار محتمل است. .Pp اگر افزونه‌ای چندمقداری باشد و مقدار یک فیلد حاوی کاما باشد، باید از فرم طولانی استفاده شود؛ در غیر این صورت کاما به عنوان جداکننده فیلد تفسیر خواهد شد. برای نمونه: .Pp .Dl subjectAltName=URI:ldap://somehost.com/CN=foo,OU=bar .Pp باعث خطا می‌شود، اما فرم زیر معتبر است: .Bd -literal -offset indent subjectAltName=@subject_alt_section [subject_alt_section] subjectAltName=URI:ldap://somehost.com/CN=foo,OU=bar .Ed .Pp به دلیل رفتار کتابخانه OpenSSL CONF، همان نام فیلد تنها یک بار می‌تواند در یک بخش تکرار شود. این بدان معناست که: .Bd -literal -offset indent subjectAltName=@alt_section [alt_section] email=steve@here email=steve@there .Ed .Pp تنها آخرین مقدار را استفاده خواهد کرد. برای حل این مشکل می‌توان از فرم زیر استفاده کرد: .Bd -literal -offset indent [alt_section] email.1=steve@here email.2=steve@there .Ed