OPENSSL-CMS(1ssl) OpenSSL OPENSSL-CMS(1ssl) نام (NAME) openssl-cms - دستور CMS برای مدیریت پیام‌های S/MIME و داده‌های ساخت‌یافته رمزنگاری‌شده خلاصه دستور (SYNOPSIS) openssl cms [-help] گزینه‌های عمومی: [-in filename] [-out filename] [-config configfile] گزینه‌های عملیات: [-encrypt] [-decrypt] [-sign] [-verify] [-resign] [-sign_receipt] [-verify_receipt receipt] [-digest digest] [-digest_create] [-digest_verify] [-compress] [-uncompress] [-EncryptedData_encrypt] [-EncryptedData_decrypt] [-data_create] [-data_out] [-cmsout] گزینه‌های قالب فایل: [-inform DER|PEM|SMIME] [-outform DER|PEM|SMIME] [-rctform DER|PEM|SMIME] [-stream] [-indef] [-noindef] [-binary] [-crlfeol] [-asciicrlf] گزینه‌های کلیدها و گذرواژه: [-pwri_password password] [-secretkey key] [-secretkeyid id] [-inkey filename|uri] [-passin arg] [-keyopt name:parameter] [-keyform DER|PEM|P12|ENGINE] [-engine id] [-provider name] [-provider-path path] [-provparam [name:]key=value] [-propquery propq] [-rand files] [-writerand file] گزینه‌های رمزگذاری: [-originator file] [-recip file] [recipient-cert ...] [-cipher] [-kekcipher cipher] [-wrap cipher] [-aes128-wrap] [-aes192-wrap] [-aes256-wrap] [-des3-wrap] [-debug_decrypt] [-recip_kdf kdf] [-recip_ukm ukm] گزینه‌های امضا: [-md digest] [-signer file] [-certfile file] [-cades] [-nodetach] [-nocerts] [-noattr] [-nosmimecap] [-no_signing_time] [-receipt_request_all] [-receipt_request_first] [-receipt_request_from emailaddress] [-receipt_request_to emailaddress] گزینه‌های اعتبارسنجی: [-signer file] [-content filename] [-no_content_verify] [-no_attr_verify] [-nosigs] [-noverify] [-nointern] [-cades] [-verify_retcode] [-CAfile file] [-no-CAfile] [-CApath dir] [-no-CApath] [-CAstore uri] [-no-CAstore] گزینه‌های خروجی: [-keyid] [-econtent_type type] [-text] [-certsout file] [-to addr] [-from addr] [-subject subj] گزینه‌های چاپ: [-noout] [-print] [-nameopt option] [-receipt_request_print] گزینه‌های اعتبارسنجی: [-allow_proxy_certs] [-attime timestamp] [-no_check_time] [-check_ss_sig] [-crl_check] [-crl_check_all] [-explicit_policy] [-extended_crl] [-ignore_critical] [-inhibit_any] [-inhibit_map] [-partial_chain] [-policy arg] [-policy_check] [-policy_print] [-purpose purpose] [-suiteB_128] [-suiteB_128_only] [-suiteB_192] [-trusted_first] [-no_alt_chains] [-use_deltas] [-auth_level num] [-verify_depth num] [-verify_email email] [-verify_hostname hostname] [-verify_ip ip] [-verify_name name] [-x509_strict] [-issuer_checks] توضیحات (DESCRIPTION) این دستور داده‌ها را در قالب CMS، مانند پیام‌های ایمیل S/MIME نسخه ۳.۱، مدیریت می‌کند. این دستور می‌تواند پیام‌ها را رمزگذاری، رمزگشایی، امضا، اعتبارسنجی، فشرده‌سازی، از فشرده‌سازی خارج و چاپ نماید. گزینه‌ها (OPTIONS) تعدادی گزینه عملیاتی وجود دارند که نوع عملیات مورد نظر را تعیین می‌کنند: encrypt، decrypt، sign، verify، resign، sign_receipt، verify_receipt، digest_create، digest_verify، compress، uncompress، EncryptedData_encrypt، EncryptedData_decrypt، data_create، data_out یا cmsout. ارتباط سایر گزینه‌ها به نوع عملیات بستگی دارد و مفهوم آن‌ها ممکن است بر اساس آن متفاوت باشد. -help نمایش پیام راهنمای نحوه استفاده. گزینه‌های عمومی (General options) -in filename پیام ورودی که باید رمزگذاری یا امضا شود، یا پیامی که باید رمزگشایی یا اعتبارسنجی گردد. -out filename متن پیامی که رمزگشایی یا اعتبارسنجی شده است، یا پیام خروجی با قالب MIME که امضا یا اعتبارسنجی شده است. -config configfile بخش «گزینه پیکربندی» در openssl(1) را ببینید. گزینه‌های عملیات (Operation options) -encrypt داده‌ها را برای گواهی‌های گیرنده مشخص‌شده رمزگذاری می‌کند. فایل ورودی همان پیامی است که باید رمزگذاری شود. فایل خروجی داده‌های رمزگذاری‌شده در قالب MIME است. نوع واقعی CMS برابر با EnvelopedData است. توجه داشته باشید که هیچ بررسی ابطالی برای گواهی گیرنده انجام نمی‌شود؛ بنابراین اگر آن کلید افشا شده باشد، ممکن است دیگران بتوانند متن را رمزگشایی کنند. -decrypt داده‌ها را با استفاده از گواهی و کلید خصوصی ارائه‌شده رمزگشایی می‌کند. برای فایل ورودی انتظار داده‌های رمزگذاری‌شده در قالب MIME را دارد. داده‌های رمزگشایی‌شده در فایل خروجی نوشته می‌شوند. -sign داده‌ها را با استفاده از گواهی و کلید خصوصی ارائه‌شده امضا می‌کند. فایل ورودی همان پیامی است که باید امضا شود. داده‌های امضاشده در قالب MIME در فایل خروجی نوشته می‌شوند. -verify داده‌های امضاشده را اعتبارسنجی می‌کند. در ورودی انتظار یک داده امضاشده را دارد و داده‌های امضاشده را در خروجی می‌دهد. هر دو نوع امضای متن‌واضح (clear text) و مات (opaque) پشتیبانی می‌شوند. به‌طور پیش‌فرض، اعتبارسنجی گواهی‌های امضاکننده و زنجیره آن‌ها با توجه به هدف امضای S/MIME ("smimesign") انجام می‌شود. برای جزئیات بیشتر بخش «پسوندهای گواهی» در openssl-verification-options(1) را ببینید. -resign امضای مجدد یک پیام: دریافت یک پیام موجود و اعمال یک یا چند امضاکننده جدید روی آن. -sign_receipt تولید و ارسال رسید امضاشده برای پیام ارائه‌شده. پیام ورودی باید شامل یک درخواست رسید امضاشده باشد. عملکرد این گزینه در سایر موارد مشابه عملیات -sign است. -verify_receipt receipt اعتبارسنجی یک رسید امضاشده در فایل receipt. پیام ورودی باید شامل درخواست رسید اصلی باشد. عملکرد این گزینه در سایر موارد مشابه عملیات -verify است. -digest digest هنگامی که همراه با -sign استفاده می‌شود، خلاصه پیام (digest) را به صورت هگزادسیمال دریافت می‌کند، به جای این‌که آن را از محتوای پیام اصلی محاسبه نماید. نمی‌تواند با -in یا -nodetach ترکیب شود. این عملیات معادل CMS برای امضا در openssl-pkeyutl(1) است. هنگام امضای یک خلاصه از پیش محاسبه‌شده، امنیت به قابل اعتماد بودن خلاصه پیام و محاسبه صحیح آن از پیام اصلی وابسته است. -digest_create ایجاد یک نوع CMS از جنس DigestedData. -digest_verify اعتبارسنجی یک نوع CMS از جنس DigestedData و ارسال محتوا به خروجی. -compress ایجاد یک نوع CMS از جنس CompressedData. برای کارکرد این گزینه، OpenSSL باید با پشتیبانی از zlib کامپایل شده باشد؛ در غیر این صورت خطا نمایش داده خواهد شد. -uncompress خارج کردن یک نوع CMS از جنس CompressedData از حالت فشرده و ارسال محتوا به خروجی. برای کارکرد این گزینه، OpenSSL باید با پشتیبانی از zlib کامپایل شده باشد؛ در غیر این صورت خطا نمایش داده خواهد شد. -EncryptedData_encrypt رمزگذاری محتوا با استفاده از کلید متقارن و الگوریتم ارائه‌شده با بهره‌گیری از یک نوع CMS از جنس EncryptedData و ارسال محتوا به خروجی. -EncryptedData_decrypt رمزگشایی محتوا با استفاده از کلید متقارن و الگوریتم ارائه‌شده با بهره‌گیری از یک نوع CMS از جنس EncryptedData و ارسال محتوا به خروجی. -data_create ایجاد یک نوع CMS از جنس Data. -data_out نوع Data و ارسال محتوا به خروجی. -cmsout یک پیام ورودی را می‌گیرد و یک ساختار CMS با کدگذاری PEM در خروجی می‌نویسد. گزینه‌های قالب فایل (File format options) -inform DER|PEM|SMIME قالب ورودی ساختار CMS (در صورتی که در حال خوانده شدن باشد)؛ مقدار پیش‌فرض SMIME است. برای جزئیات بیشتر به openssl-format-options(1) مراجعه کنید. -outform DER|PEM|SMIME قالب خروجی ساختار CMS (در صورتی که در حال نوشته شدن باشد)؛ مقدار پیش‌فرض SMIME است. برای جزئیات بیشتر به openssl-format-options(1) مراجعه کنید. -rctform DER|PEM|SMIME قالب رسید امضاشده برای استفاده با -receipt_verify؛ مقدار پیش‌فرض SMIME است. برای جزئیات بیشتر به openssl-format-options(1) مراجعه کنید. -stream, -indef گزینه‌های -stream و -indef معادل یکدیگر هستند و ورودی/خروجی جریانی را برای عملیات‌های کدگذاری فعال می‌کنند. این قابلیت پردازش تک‌گذره داده‌ها را بدون نیاز به نگهداری کل محتوا در حافظه ممکن می‌سازد، که به طور بالقوه از فایل‌های بسیار بزرگ پشتیبانی می‌کند. حالت جریانی برای امضای S/MIME با داده‌های جداشده در صورتی که قالب خروجی SMIME باشد به طور خودکار تنظیم می‌شود؛ این ویژگی در حال حاضر به طور پیش‌فرض برای تمام عملیات‌های دیگر غیرفعال است. -noindef ورودی/خروجی جریانی را در مواردی که منجر به تولید کدگذاری ساخته‌شده با طول نامعین می‌شود غیرفعال می‌کند. این گزینه در حال حاضر هیچ تاثیری ندارد. در آینده حالت جریانی به طور پیش‌فرض در تمام عملیات‌های مربوطه فعال خواهد شد و این گزینه آن را غیرفعال خواهد کرد. -binary به طور معمول پیام ورودی به قالب «استاندارد» (Canonical) تبدیل می‌شود که در عمل از کاراکترهای CR و LF به عنوان پایان خط استفاده می‌کند، همان‌گونه که مشخصات S/MIME الزام کرده است. زمانی که این گزینه ارائه شود هیچ تبدیلی صورت نمی‌گیرد. این ویژگی هنگام مدیریت داده‌های باینری که ممکن است در قالب MIME نباشند کاربرد دارد. -crlfeol به طور معمول فایل خروجی از یک LF به عنوان پایان خط استفاده می‌کند. با مشخص شدن این گزینه، به جای آن از CRLF استفاده می‌شود. -asciicrlf هنگام امضا، از استانداردسازی به قالب ASCII CRLF استفاده می‌کند. این کار فاصله‌های انتهایی را از تمامی خطوط حذف کرده، خطوط خالی انتهایی را در پایان فایل (EOF) پاک می‌کند و نوع محتوای کپسوله‌شده را تنظیم می‌نماید. این گزینه معمولاً با محتوای جداشده و قالب امضای خروجی DER استفاده می‌شود. این گزینه در هنگام اعتبارسنجی معمولاً مورد نیاز نیست، زیرا در صورت تشخیص قالب محتوای کپسوله‌شده به طور خودکار فعال می‌شود. گزینه‌های کلیدها و گذرواژه (Keys and password options) -pwri_password password گذرواژه را برای گیرنده مشخص می‌کند. -secretkey key کلید متقارن مورد استفاده را مشخص می‌کند. کلید باید در قالب هگزادسیمال ارائه شود و با الگوریتم مورد استفاده همخوانی داشته باشد. توسط گزینه‌های -EncryptedData_encrypt، -EncryptedData_decrypt، -encrypt و -decrypt پشتیبانی می‌شود. هنگام استفاده با -encrypt یا -decrypt، کلید ارائه‌شده برای بسته‌بندی یا باز کردن بسته‌بندی کلید رمزگذاری محتوا با استفاده از یک کلید AES در نوع KEKRecipientInfo به کار می‌رود. -secretkeyid id شناسه کلید برای کلید متقارن ارائه‌شده برای نوع KEKRecipientInfo. اگر گزینه -secretkey به همراه -encrypt به کار رود، این گزینه باید حضور داشته باشد. در عملیات‌های -decrypt، شناسه id برای یافتن کلید مربوطه به کار می‌رود؛ اگر ارائه نشود، تلاشی برای رمزگشایی تمامی ساختارهای KEKRecipientInfo صورت می‌گیرد. -inkey filename|uri کلید خصوصی مورد استفاده هنگام امضا یا رمزگشایی. این کلید باید با گواهی مربوطه مطابقت داشته باشد. اگر این گزینه مشخص نشود، کلید خصوصی باید در فایل گواهیِ مشخص‌شده با فایل -recip یا -signer گنجانده شده باشد. هنگام امضا، این گزینه می‌تواند چندین بار برای مشخص کردن کلیدهای متوالی استفاده شود. -passin arg منبع گذرواژه کلید خصوصی. برای اطلاعات بیشتر درباره قالب arg به openssl-passphrase-options(1) مراجعه کنید. -keyopt name:parameter برای امضا و رمزگذاری، این گزینه می‌تواند چندین بار برای تنظیم پارامترهای سفارشی‌شده برای کلید یا گواهی پیشین استفاده شود. در حال حاضر می‌تواند برای تنظیم RSA-PSS برای امضا، RSA-OAEP برای رمزگذاری یا اصلاح پارامترهای پیش‌فرض برای ECDH استفاده شود. -keyform DER|PEM|P12|ENGINE قالب فایل کلید خصوصی؛ به طور پیش‌فرض تعیین‌نشده است. برای جزئیات بیشتر به openssl-format-options(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) مراجعه کنید. -rand files, -writerand file به «گزینه‌های وضعیت تصادفی (Random State Options)» در openssl(1) برای جزئیات مراجعه کنید. گزینه‌های رمزگذاری و رمزگشایی (Encryption and decryption options) -originator file گواهی ارسال‌کننده پیام رمزگذاری‌شده. هنگام استفاده از توافق کلید (Key Agreement) برای یک کلید مشترک، جهت رمزگشایی ضروری است. در حال حاضر، برای رمزگذاری مجاز نیست. -recip file هنگام رمزگشایی پیام، این گزینه گواهی گیرنده را مشخص می‌کند. این گواهی باید با یکی از گیرندگان پیام مطابقت داشته باشد. هنگام رمزگذاری پیام، این گزینه می‌تواند چندین بار برای مشخص کردن هر گیرنده استفاده شود. اگر پارامترهای سفارشی‌شده نیاز باشد (برای مثال جهت تعیین RSA-OAEP)، این قالب باید استفاده شود. تنها گواهی‌های دارای کلیدهای RSA، دیفی-هلمن (Diffie-Hellman) یا EC توسط این گزینه پشتیبانی می‌شوند. recipient-cert ... این یک روش جایگزین برای استفاده از گزینه -recip هنگام رمزگذاری پیام است. می‌توان نام یک یا چند فایل گواهی را مشخص کرد. -cipher الگوریتم رمزگذاری مورد استفاده. برای مثال، AES (۲۵۶ بیتی) - -aes256 یا DES سه‌گانه (۱۶۸ بیتی) - -des3. هر نام الگوریتم استانداردی (همان‌طور که توسط تابع EVP_get_cipherbyname() استفاده می‌شود) می‌تواند همراه با یک خط تیره در ابتدا استفاده شود، مانند -aes-128-cbc. برای فهرستی از الگوریتم‌های رمز پشتیبانی‌شده توسط نسخه OpenSSL خود به openssl-enc(1) مراجعه کنید. در حال حاضر، انواع AES با حالت GCM تنها الگوریتم‌های AEAD پشتیبانی‌شده هستند. در صورت عدم تعیین، AES-256-CBC به عنوان پیش‌فرض استفاده می‌شود. فقط با دستورات -encrypt و -EncryptedData_encrypt استفاده می‌شود. -kekcipher cipher الگوریتم رمز برای استفاده در رمزگذاری کلید مبتنی بر گذرواژه. این گزینه زمانی کاربرد دارد که گذرواژه‌ای برای اطلاعات گیرنده گذرواژه با استفاده از -pwri_password ارائه شده باشد و یک الگوریتم رمزگذاری AEAD انتخاب شده باشد. در چنین مواردی، باید یک الگوریتم غیر-AEAD با استفاده از این گزینه مشخص شود. -wrap cipher الگوریتم رمز برای استفاده در بسته‌بندی کلید (Key Wrap) هنگام رمزگذاری پیام با استفاده از توافق کلید برای انتقال کلید. الگوریتم مشخص‌شده باید برای بسته‌بندی کلید مناسب باشد. -aes128-wrap, -aes192-wrap, -aes256-wrap, -des3-wrap به ترتیب از AES128، AES192، AES256 یا 3DES-EDE برای بسته‌بندی کلید استفاده می‌کند. بسته به گزینه‌های ساخت OpenSSL مورد استفاده، ممکن است -des3-wrap پشتیبانی نشود. -debug_decrypt این گزینه پرچم CMS_DEBUG_DECRYPT را فعال می‌کند. این گزینه باید با احتیاط استفاده شود: به بخش نکات در ادامه مراجعه کنید. -recip_kdf این گزینه KDF مورد استفاده برای تولید کلید رمزگذاری کلید را در نوع KEMRecipientInfo تنظیم می‌کند. هر KDF که پارامترهای OSSL_KDF_PARAM_KEY و OSSL_KDF_PARAM_INFO را دریافت کند و از جهات دیگر به‌طور کامل با نام یا OID خود تعریف شده باشد، می‌تواند استفاده شود؛ برای مثال HKDF-SHA256. -recip_ukm این گزینه ماده کلیدزنی اختیاری کاربر (UKM) نوع KEMRecipientInfo را در قالب شانزده‌شانزدهی تنظیم می‌کند. مقدار UKM به همراه سایر اطلاعات در پارامتر OSSL_KDF_PARAM_INFO مربوط به KDF نوع KEMRecipientInfo کدگذاری خواهد شد. گزینه‌های امضا (Signing options) -md digest الگوریتم خلاصه‌سازی (digest) برای استفاده هنگام امضا یا امضای مجدد. اگر مشخص نشود، الگوریتم خلاصه‌سازی پیش‌فرض برای کلید امضا استفاده خواهد شد (معمولاً SHA-256). -signer file یک گواهی امضاکننده. هنگام امضا یا امضای مجدد یک پیام، در صورتی که به بیش از یک امضاکننده نیاز باشد، این گزینه می‌تواند چندین بار استفاده شود. -certfile file امکان مشخص کردن گواهی‌های اضافی را فراهم می‌کند. هنگام امضا، این گواهی‌ها در پیام گنجانده می‌شوند. هنگام اعتبارسنجی، این گواهی‌ها برای یافتن گواهی‌های امضاکننده جستجو شده و برای ساخت زنجیره گواهی استفاده می‌شوند. ورودی می‌تواند در قالب PEM، DER یا PKCS#12 باشد. -cades هنگامی که همراه با گزینه -sign استفاده شود، یک صفت امضاشدهٔ ESS signingCertificate یا ESS signingCertificateV2 را به SignerInfo اضافه می‌کند تا امضا با الزامات یک امضای الکترونیکی پایه CAdES (CAdES-BES) مطابقت داشته باشد. -nodetach هنگام امضای یک پیام از امضای مات (opaque signing) استفاده می‌کند؛ این شکل در برابر تغییر شکل توسط رله‌های ایمیل مقاوم‌تر است اما توسط برنامه‌های ایمیلی که از S/MIME پشتیبانی نمی‌کنند قابل خواندن نیست. بدون این گزینه، امضای متن‌باز (cleartext) با نوع محتوای چندبخشی multipart/signed استفاده می‌شود. -nocerts هنگام امضای یک پیام، معمولاً گواهی امضاکننده در پیام گنجانده می‌شود؛ با این گزینه گواهی حذف می‌گردد. این کار حجم پیام امضاشده را کاهش می‌دهد، اما اعتبارسنج باید رونوشتی از گواهی امضاکننده را به صورت محلی در دسترس داشته باشد (به عنوان مثال با استفاده از گزینه -certfile ارائه شود). -noattr به طور معمول هنگام امضای یک پیام، مجموعه‌ای از صفت‌ها گنجانده می‌شوند که شامل زمان امضا و الگوریتم‌های متقارن پشتیبانی‌شده است. با این گزینه آن‌ها گنجانده نمی‌شوند. -nosmimecap فهرست الگوریتم‌های پشتیبانی‌شده را از صفت‌های امضاشده حذف می‌کند، اما سایر گزینه‌ها مانند نوع محتوا و (به طور اختیاری) زمان امضا همچنان گنجانده می‌شوند. -no_signing_time زمان امضا را از صفت‌های امضاشده حذف می‌کند؛ سایر گزینه‌ها مانند نوع محتوا همچنان باقی می‌مانند. -receipt_request_all, -receipt_request_first برای گزینه -sign، یک درخواست رسید امضاشده را می‌گنجاند. مشخص می‌کند که درخواست‌ها باید توسط همه دریافت‌کنندگان یا دریافت‌کنندگان سطح اول (کسانی که پیام مستقیماً برای آن‌ها ارسال شده و نه از طریق لیست پستی) ارائه شوند. در صورتی که -receipt_request_from مشخص شده باشد، نادیده گرفته می‌شود. -receipt_request_from emailaddress برای گزینه -sign، یک درخواست رسید امضاشده را می‌گنجاند. یک نشانی ایمیل صریح اضافه می‌کند که رسیدها باید به آن ارسال شوند. -receipt_request_to emailaddress یک نشانی ایمیل صریح اضافه می‌کند که رسیدهای امضاشده باید به آن ارسال شوند. اگر یک رسید امضاشده درخواست شده باشد، این گزینه باید ارائه شود. گزینه‌های اعتبارسنجی و تأیید (Verification options) -signer file اگر پیامی با موفقیت اعتبارسنجی شده باشد، در صورت موفقیت‌آمیز بودن اعتبارسنجی، گواهی(های) امضاکننده در این فایل نوشته خواهد شد. -content filename فایلی حاوی محتوای جداشده (detached content) را برای عملیاتی که ورودی S/MIME دریافت می‌کنند (مانند دستور -verify) مشخص می‌کند. این گزینه تنها زمانی قابل استفاده است که ساختار CMS از ساختار امضای جداشده استفاده کند که در آن محتوا گنجانده نشده است. اگر قالب ورودی S/MIME باشد و از نوع محتوای MIME به صورت multipart/signed استفاده کند، این گزینه هر محتوایی را بازنویسی خواهد کرد. -no_content_verify امضاهای محتوای امضاشده را اعتبارسنجی نمی‌کند. -no_attr_verify امضاهای صفت‌های امضاشده را اعتبارسنجی نمی‌کند. -nosigs امضای پیام را اعتبارسنجی نمی‌کند. -noverify گواهی امضاکننده یک پیام امضاشده را اعتبارسنجی نمی‌کند. -nointern هنگام اعتبارسنجی یک پیام، معمولاً گواهی‌های موجود در پیام (در صورت وجود) برای یافتن گواهی امضاکننده جستجو می‌شوند. با این گزینه، تنها گواهی‌های مشخص‌شده در گزینه -certfile استفاده می‌شوند. با این حال، گواهی‌های ارائه‌شده همچنان می‌توانند به عنوان CAهای نامعتمد استفاده شوند. -cades هنگام استفاده همراه با -verify، خلاصه گواهی امضاکننده را الزامی کرده و بررسی می‌کند. برای جزئیات بیشتر به بخش «نکات (NOTES)» مراجعه کنید. -verify_retcode در صورت شکست اعتبارسنجی، با مقدار غیرصفر خارج می‌شود. -CAfile file, -no-CAfile, -CApath dir, -no-CApath, -CAstore uri, -no-CAstore برای جزئیات بیشتر به "گزینه‌های گواهی معتمد (Trusted Certificate Options)" در openssl-verification-options(1) مراجعه کنید. گزینه‌های خروجی (Output options) -keyid استفاده از شناسه کلید موضوع (subject key identifier) برای شناسایی گواهی‌ها به جای نام صادرکننده و شماره سریال. گواهی ارائه‌شده باید شامل یک افزونه شناسه کلید موضوع باشد. توسط گزینه‌های -sign و -encrypt پشتیبانی می‌شود. -econtent_type type تنظیم نوع محتوای کپسوله‌شده به type. در صورت عدم ارائه، نوع Data استفاده می‌شود. آرگومان type می‌تواند هر نام معتبر OID به قالب متنی یا عددی باشد. -text این گزینه در صورت رمزگذاری یا امضا کردن، هدرهای MIME متن ساده (text/plain) را به پیام ارائه‌شده اضافه می‌کند. در صورت رمزگشایی یا اعتبارسنجی، هدرهای متنی را حذف می‌کند: اگر پیام رمزگشایی‌شده یا اعتبارسنجی‌شده از نوع MIME متنی text/plain نباشد، خطایی رخ می‌دهد. -certsout file هر گواهی موجود در پیام ورودی در file نوشته می‌شود. -to, -from, -subject هدرهای مرتبط با ایمیل. این هدرها در خارج از بخش امضاشده پیام قرار می‌گیرند، بنابراین ممکن است به صورت دستی اضافه شوند. در صورت امضا، بسیاری از کلاینت‌های ایمیل S/MIME بررسی می‌کنند که نشانی ایمیل گواهی امضاکننده با نشانی مشخص‌شده در هدر From: مطابقت داشته باشد. گزینه‌های چاپ (Printing options) -noout برای عملیات -cmsout، از خروجی دادن ساختار پارس‌شده CMS خودداری می‌کند. این مورد زمانی مفید است که فقط صحت ساختار دستوری (syntax) ساختار CMS بررسی می‌شود. -print برای عملیات -cmsout، تمام فیلدهای ساختار CMS را چاپ می‌کند. این گزینه مستلزم -noout است و عمدتاً برای اهداف آزمایشی کاربرد دارد. -nameopt option برای عملیات -cmsout هنگامی که گزینه -print در حال استفاده است، گزینه‌های چاپ را برای فیلدهای رشته‌ای مشخص می‌کند. برای بیشتر موارد مقدار utf8 منطقی است. برای جزئیات به openssl-namedisplay-options(1) مراجعه کنید. -receipt_request_print برای عملیات -verify، محتوای هرگونه درخواست رسید امضاشده (signed receipt requests) را چاپ می‌کند. گزینه‌های اعتبارسنجی (Validation options) -allow_proxy_certs, -attime, -no_check_time, -check_ss_sig, -crl_check, -crl_check_all, -explicit_policy, -extended_crl, -ignore_critical, -inhibit_any, -inhibit_map, -no_alt_chains, -partial_chain, -policy, -policy_check, -policy_print, -purpose, -suiteB_128, -suiteB_128_only, -suiteB_192, -trusted_first, -use_deltas, -auth_level, -verify_depth, -verify_email, -verify_hostname, -verify_ip, -verify_name, -x509_strict -issuer_checks تنظیم گزینه‌های گوناگون برای اعتبارسنجی زنجیره گواهی. برای جزئیات بیشتر به بخش «گزینه‌های اعتبارسنجی» در openssl-verification-options(1) مراجعه کنید. هرگونه خطای اعتبارسنجی موجب خروج دستور می‌شود. نکات (NOTES) پیام MIME باید بدون هیچ خط خالی میان هدرها و خروجی ارسال شود. برخی برنامه‌های نامه‌رسان به طور خودکار یک خط خالی اضافه می‌کنند. هدایت مستقیم نامه با پایپ به sendmail یکی از روش‌های دستیابی به قالب صحیح است. پیام ارائه‌شده برای امضا یا رمزگذاری باید شامل هدرهای MIME ضروری باشد، در غیر این صورت بسیاری از کلاینت‌های S/MIME آن را به درستی (یا اصلاً) نمایش نخواهند داد. می‌توانید از گزینه -text برای افزودن خودکار هدرهای متن ساده استفاده کنید. پیام «امضا و رمزگذاری‌شده» پیامی است که در آن ابتدا یک پیام امضا شده و سپس رمزگذاری می‌شود. این پیام می‌تواند با رمزگذاری پیامی که از قبل امضا شده است تولید شود: بخش مثال‌ها را ببینید. این نسخه از برنامه تنها اجازه یک امضاکننده در هر پیام را می‌دهد، اما امضاکنندگان متعددی را در پیام‌های دریافتی تأیید می‌کند. برخی کلاینت‌های S/MIME در صورت وجود چندین امضاکننده در پیام دچار مشکل می‌شوند. می‌توان پیام‌ها را «به صورت موازی» با امضا کردن پیامی که از قبل امضا شده است، امضا کرد. گزینه‌های -encrypt و -decrypt کاربرد متداول در کلاینت‌های S/MIME را منعکس می‌کنند. به بیان دقیق، این گزینه‌ها داده‌های محصورشده (enveloped data) در CMS را پردازش می‌کنند؛ داده‌های رمزگذاری‌شده CMS برای اهداف دیگری استفاده می‌شوند. گزینه -resign هنگام افزودن یک امضاکننده جدید از خلاصه پیام موجود استفاده می‌کند. این بدان معناست که ویژگی‌ها باید حداقل در یک امضاکننده موجود که از همان خلاصه پیام استفاده می‌کند وجود داشته باشند، در غیر این صورت این عملیات شکست خواهد خورد. گزینه‌های -stream و -indef پشتیبانی از ورودی/خروجی جریانی (streaming I/O) را فعال می‌کنند. در نتیجه، کدگذاری BER با استفاده از کدگذاری ساخت‌یافته با طول نامحدود خواهد بود و دیگر DER نیست. حالت جریانی برای عملیات -encrypt و در صورتی که محتوا جداشده نباشد، برای عملیات -sign پشتیبانی می‌شود. حالت جریانی همواره برای عملیات -sign با داده‌های جداشده (detached) استفاده می‌شود، اما از آنجا که محتوا دیگر بخشی از ساختار CMS نیست، کدگذاری به صورت DER باقی می‌ماند. اگر گزینه -decrypt بدون گواهی گیرنده استفاده شود، تلاشی برای یافتن گیرنده با آزمودن هر گیرنده احتمالی به نوبت با استفاده از کلید خصوصی ارائه‌شده صورت می‌گیرد. برای خنثی کردن حمله MMA (حمله بلیشن‌باخر به پدینگ PKCS #1 v1.5 RSA)، همه گیرندگان صرف‌نظر از موفقیت یا عدم موفقیت بررسی می‌شوند و اگر هیچ گیرنده‌ای مطابقت نداشته باشد، پیام با یک کلید تصادفی «رمزگشایی» می‌شود که معمولاً داده‌های نامفهوم خروجی می‌دهد. گزینه -debug_decrypt می‌تواند برای غیرفعال کردن محافظت در برابر حمله MMA و برگرداندن خطا در صورت یافت نشدن گیرنده استفاده شود؛ این گزینه باید با احتیاط به کار رود. برای توضیحات کامل‌تر، CMS_decrypt(3) را ببینید. امضای الکترونیکی پایه CADES (CADES BASIC ELECTRONIC SIGNATURE - CADES-BES) یک امضای الکترونیکی پایه CAdES (CAdES-BES)، همان‌طور که در استاندارد اروپایی ETSI EN 319 122-1 V1.1.1 تعریف شده است، شامل موارد زیر است: • داده‌های امضاشده کاربر طبق تعریف در CMS (RFC 3852)؛ • نوع محتوای (Content-type) مقدار EncapsulatedContentInfo که در حال امضا است؛ • خلاصه پیام (Message-digest) مربوط به رشته بایت eContent درون encapContentInfo که در حال امضا است؛ • یک ویژگی ESS signingCertificate یا ESS signingCertificateV2، همان‌طور که در خدمات امنیتی پیشرفته (ESS)، RFC 2634 و RFC 5035 تعریف شده است. یک ویژگی ESS signingCertificate تنها اجازه استفاده از SHA-1 را به عنوان الگوریتم خلاصه می‌دهد. یک ویژگی ESS signingCertificateV2 امکان استفاده از هر الگوریتم خلاصه‌سازی را فراهم می‌کند. • مقدار امضای دیجیتال محاسبه‌شده روی داده‌های کاربر و، در صورت وجود، روی ویژگی‌های امضاشده. توجه داشته باشید که گزینه -cades بر عملیات‌های -sign یا -verify اعمال می‌شود. با این گزینه، عملیات -verify همچنین نیازمند حضور ویژگی signingCertificate است و بررسی می‌کند که شناسه‌های داده‌شده با زنجیره اعتماد اعتبارسنجی ایجادشده در طول فرایند تأیید مطابقت داشته باشند. کدهای خروج (EXIT CODES) 0 عملیات با موفقیت کامل انجام شد. 1 خطایی در تجزیه گزینه‌های دستور رخ داد. 2 یکی از فایل‌های ورودی قابل خواندن نبود. 3 خطایی هنگام ساخت فایل CMS یا خواندن پیام MIME رخ داد. 4 خطایی هنگام رمزگشایی یا تأیید پیام رخ داد. 5 پیام به درستی تأیید شد اما در نوشتن گواهی‌های امضاکنندگان خطایی رخ داد. سازگاری با قالب PKCS#7 (COMPATIBILITY WITH PKCS#7 FORMAT) دستور openssl-smime(1) تنها می‌تواند قالب قدیمی‌تر PKCS#7 را پردازش کند. openssl cms از قالب ساختار نحو پیام رمزنگاری (Cryptographic Message Syntax) پشتیبانی می‌کند. استفاده از برخی قابلیت‌ها منجر به تولید پیام‌هایی خواهد شد که توسط برنامه‌هایی که فقط از قالب قدیمی‌تر پشتیبانی می‌کنند، قابل پردازش نیستند. این موارد در زیر به تفصیل آمده است. استفاده از گزینه -keyid همراه با -sign یا -encrypt. گزینه -outform PEM از هدرهای متفاوتی استفاده می‌کند. گزینه -compress. گزینه -secretkey هنگامی که همراه با -encrypt استفاده شود. استفاده از PSS همراه با -sign. استفاده از کلیدهای OAEP یا کلیدهای غیر RSA همراه با -encrypt. علاوه بر این، انواع -EncryptedData_encrypt و -data_create نمی‌توانند توسط دستور قدیمی‌تر openssl-smime(1) پردازش شوند. مثال‌ها (EXAMPLES) ایجاد یک پیام امضاشده به صورت متن آشکار (cleartext): openssl cms -sign -in message.txt -text -out mail.msg \ -signer mycert.pem ایجاد یک پیام امضاشده مات (opaque): openssl cms -sign -in message.txt -text -out mail.msg -nodetach \ -signer mycert.pem ایجاد یک پیام امضاشده، همراه با چند گواهی اضافی و خواندن کلید خصوصی از فایلی دیگر: openssl cms -sign -in in.txt -text -out mail.msg \ -signer mycert.pem -inkey mykey.pem -certfile mycerts.pem ایجاد یک پیام امضاشده با دو امضاکننده و استفاده از شناسه کلید: openssl cms -sign -in message.txt -text -out mail.msg \ -signer mycert.pem -signer othercert.pem -keyid ارسال مستقیم یک پیام امضاشده در یونیکس به sendmail، همراه با سرایندها: openssl cms -sign -in in.txt -text -signer mycert.pem \ -from steve@openssl.org -to someone@somewhere \ -subject "Signed message" | sendmail someone@somewhere اعتبارسنجی یک پیام و استخراج گواهی امضاکننده در صورت موفقیت: openssl cms -verify -in mail.msg -signer user.pem -out signedtext.txt ارسال ایمیل رمزگذاری‌شده با استفاده از Triple DES: openssl cms -encrypt -in in.txt -from steve@openssl.org \ -to someone@somewhere -subject "Encrypted message" \ -des3 user.pem -out mail.msg امضا و رمزگذاری ایمیل: openssl cms -sign -in ml.txt -signer my.pem -text \ | openssl cms -encrypt -out mail.msg \ -from steve@openssl.org -to someone@somewhere \ -subject "Signed and Encrypted message" -des3 user.pem نکته: دستور رمزگذاری شامل گزینه -text نیست زیرا پیامی که رمزگذاری می‌شود از قبل دارای سرایندهای MIME است. رمزگشایی یک پیام: openssl cms -decrypt -in mail.msg -recip mycert.pem -inkey key.pem خروجی حاصل از امضای فرم در Netscape یک ساختار PKCS#7 با قالب امضای جداشده (detached) است. می‌توانید با شکستن خطوط ساختار کدگذاری‌شده با base64 و محصور کردن آن با عبارت‌های زیر، از این برنامه برای اعتبارسنجی امضا استفاده کنید: -----BEGIN PKCS7----- -----END PKCS7----- و با استفاده از دستور: openssl cms -verify -inform PEM -in signature.pem -content content.txt همچنین می‌توانید داده‌های امضا را از base64 رمزگشایی کرده و از این دستور استفاده نمایید: openssl cms -verify -inform DER -in signature.der -content content.txt ایجاد یک پیام رمزگذاری‌شده با استفاده از Camellia با کلید ۱۲۸ بیتی: openssl cms -encrypt -in plain.txt -camellia128 -out mail.msg cert.pem افزودن یک امضاکننده به یک پیام موجود: openssl cms -resign -in mail.msg -signer newsign.pem -out mail2.msg امضای یک پیام با استفاده از RSA-PSS: openssl cms -sign -in message.txt -text -out mail.msg \ -signer mycert.pem -keyopt rsa_padding_mode:pss ایجاد یک پیام رمزگذاری‌شده با استفاده از RSA-OAEP: openssl cms -encrypt -in plain.txt -out mail.msg \ -recip cert.pem -keyopt rsa_padding_mode:oaep استفاده از SHA256 KDF همراه با یک گواهی ECDH: openssl cms -encrypt -in plain.txt -out mail.msg \ -recip ecdhcert.pem -keyopt ecdh_kdf_md:sha256 چاپ داده‌های دودویی امضاشده CMS در قالبی خوانا برای انسان: openssl cms -in signed.cms -binary -inform DER -cmsout -print باگ‌ها (BUGS) تجزیه‌کننده MIME چندان هوشمند نیست: به نظر می‌رسد بیشتر پیام‌های ارسال‌شده به آن را پردازش می‌کند، اما ممکن است روی برخی دیگر با خطا مواجه شود. کد برنامه در حال حاضر تنها گواهی امضاکننده را در یک فایل می‌نویسد: اگر امضاکننده دارای یک گواهی رمزگذاری جداگانه باشد، باید آن را به صورت دستی استخراج کرد. باید سازوکاری ابتکاری وجود داشته باشد که گواهی رمزگذاری صحیح را تشخیص دهد. در حالت ایده‌آل باید پایگاه‌داده‌ای از گواهی‌ها برای هر نشانی ایمیل نگهداری شود. کد برنامه در حال حاضر به الگوریتم‌های رمزگذاری متقارن مجاز که در صفت امضاشده SMIMECapabilities ارائه شده‌اند توجهی نمی‌کند. این بدان معناست که کاربر باید الگوریتم رمزگذاری صحیح را به صورت دستی وارد نماید. باید فهرست رمزهای مجاز در یک پایگاه‌داده ذخیره شود و تنها از آن‌ها استفاده گردد. هیچ‌گونه بررسی ابطالی روی گواهی امضاکننده انجام نمی‌شود. همچنین ببینید (SEE ALSO) ossl_store-file(7) تاریخچه (HISTORY) رمز پیش‌فرض رمزگذاری در OpenSSL 3.5 از 3DES به AES-256 تغییر یافت. امکان استفاده از چندین گزینه -signer و دستور -resign برای نخستین بار در OpenSSL 1.0.0 اضافه شدند. گزینه -keyopt در OpenSSL 1.0.2 اضافه شد. پشتیبانی از RSA-OAEP و RSA-PSS در OpenSSL 1.0.2 اضافه شد. امکان استفاده از کلیدهای غیر RSA همراه با -encrypt و -decrypt در OpenSSL 1.0.2 اضافه شد. گزینه -no_alt_chains در OpenSSL 1.0.2b اضافه شد. گزینه -nameopt در OpenSSL 3.0.0 اضافه شد. گزینه -engine در OpenSSL 3.0 منسوخ شد. گزینه -digest در OpenSSL 3.2 اضافه شد. گزینه‌های -recip_kdf و -recip_ukm در OpenSSL 3.6 اضافه شدند. حق نشر (COPYRIGHT) حق نشر ۲۰۰۸-۲۰۲۶ متعلق به نویسندگان پروژه OpenSSL است. کلیه حقوق محفوظ است. تحت مجوز آپاچی، نسخه ۲.۰ ("مجوز") ارائه شده است. شما نمی‌توانید از این فایل استفاده کنید مگر در انطباق با این مجوز. می‌توانید نسخه‌ای از مجوز را در فایل LICENSE در توزیع مبدأ یا در نشانی زیر بیابید: 3.6.4 2026-08-25 OPENSSL-CMS(1ssl)