OPENSSL-CMS(1ssl) OpenSSL OPENSSL-CMS(1ssl)

openssl-cms - دستور CMS برای مدیریت پیام‌های S/MIME و داده‌های ساخت‌یافته رمزنگاری‌شده

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]

این دستور داده‌ها را در قالب CMS، مانند پیام‌های ایمیل S/MIME نسخه ۳.۱، مدیریت می‌کند. این دستور می‌تواند پیام‌ها را رمزگذاری، رمزگشایی، امضا، اعتبارسنجی، فشرده‌سازی، از فشرده‌سازی خارج و چاپ نماید.

تعدادی گزینه عملیاتی وجود دارند که نوع عملیات مورد نظر را تعیین می‌کنند: encrypt، decrypt، sign، verify، resign، sign_receipt، verify_receipt، digest_create، digest_verify، compress، uncompress، EncryptedData_encrypt، EncryptedData_decrypt، data_create، data_out یا cmsout. ارتباط سایر گزینه‌ها به نوع عملیات بستگی دارد و مفهوم آن‌ها ممکن است بر اساس آن متفاوت باشد.

نمایش پیام راهنمای نحوه استفاده.

پیام ورودی که باید رمزگذاری یا امضا شود، یا پیامی که باید رمزگشایی یا اعتبارسنجی گردد.
متن پیامی که رمزگشایی یا اعتبارسنجی شده است، یا پیام خروجی با قالب MIME که امضا یا اعتبارسنجی شده است.
بخش «گزینه پیکربندی» در openssl(1) را ببینید.

داده‌ها را برای گواهی‌های گیرنده مشخص‌شده رمزگذاری می‌کند. فایل ورودی همان پیامی است که باید رمزگذاری شود. فایل خروجی داده‌های رمزگذاری‌شده در قالب MIME است. نوع واقعی CMS برابر با EnvelopedData است.

توجه داشته باشید که هیچ بررسی ابطالی برای گواهی گیرنده انجام نمی‌شود؛ بنابراین اگر آن کلید افشا شده باشد، ممکن است دیگران بتوانند متن را رمزگشایی کنند.

داده‌ها را با استفاده از گواهی و کلید خصوصی ارائه‌شده رمزگشایی می‌کند. برای فایل ورودی انتظار داده‌های رمزگذاری‌شده در قالب MIME را دارد. داده‌های رمزگشایی‌شده در فایل خروجی نوشته می‌شوند.
داده‌ها را با استفاده از گواهی و کلید خصوصی ارائه‌شده امضا می‌کند. فایل ورودی همان پیامی است که باید امضا شود. داده‌های امضاشده در قالب MIME در فایل خروجی نوشته می‌شوند.
داده‌های امضاشده را اعتبارسنجی می‌کند. در ورودی انتظار یک داده امضاشده را دارد و داده‌های امضاشده را در خروجی می‌دهد. هر دو نوع امضای متن‌واضح (clear text) و مات (opaque) پشتیبانی می‌شوند.

به‌طور پیش‌فرض، اعتبارسنجی گواهی‌های امضاکننده و زنجیره آن‌ها با توجه به هدف امضای S/MIME ("smimesign") انجام می‌شود. برای جزئیات بیشتر بخش «پسوندهای گواهی» در openssl-verification-options(1) را ببینید.

امضای مجدد یک پیام: دریافت یک پیام موجود و اعمال یک یا چند امضاکننده جدید روی آن.
تولید و ارسال رسید امضاشده برای پیام ارائه‌شده. پیام ورودی باید شامل یک درخواست رسید امضاشده باشد. عملکرد این گزینه در سایر موارد مشابه عملیات -sign است.
اعتبارسنجی یک رسید امضاشده در فایل receipt. پیام ورودی باید شامل درخواست رسید اصلی باشد. عملکرد این گزینه در سایر موارد مشابه عملیات -verify است.
هنگامی که همراه با -sign استفاده می‌شود، خلاصه پیام (digest) را به صورت هگزادسیمال دریافت می‌کند، به جای این‌که آن را از محتوای پیام اصلی محاسبه نماید. نمی‌تواند با -in یا -nodetach ترکیب شود.

این عملیات معادل CMS برای امضا در openssl-pkeyutl(1) است. هنگام امضای یک خلاصه از پیش محاسبه‌شده، امنیت به قابل اعتماد بودن خلاصه پیام و محاسبه صحیح آن از پیام اصلی وابسته است.

ایجاد یک نوع CMS از جنس DigestedData.
اعتبارسنجی یک نوع CMS از جنس DigestedData و ارسال محتوا به خروجی.
ایجاد یک نوع CMS از جنس CompressedData. برای کارکرد این گزینه، OpenSSL باید با پشتیبانی از zlib کامپایل شده باشد؛ در غیر این صورت خطا نمایش داده خواهد شد.
خارج کردن یک نوع CMS از جنس CompressedData از حالت فشرده و ارسال محتوا به خروجی. برای کارکرد این گزینه، OpenSSL باید با پشتیبانی از zlib کامپایل شده باشد؛ در غیر این صورت خطا نمایش داده خواهد شد.
رمزگذاری محتوا با استفاده از کلید متقارن و الگوریتم ارائه‌شده با بهره‌گیری از یک نوع CMS از جنس EncryptedData و ارسال محتوا به خروجی.
رمزگشایی محتوا با استفاده از کلید متقارن و الگوریتم ارائه‌شده با بهره‌گیری از یک نوع CMS از جنس EncryptedData و ارسال محتوا به خروجی.
ایجاد یک نوع CMS از جنس Data.
نوع Data و ارسال محتوا به خروجی.
یک پیام ورودی را می‌گیرد و یک ساختار CMS با کدگذاری PEM در خروجی می‌نویسد.

قالب ورودی ساختار CMS (در صورتی که در حال خوانده شدن باشد)؛ مقدار پیش‌فرض SMIME است. برای جزئیات بیشتر به openssl-format-options(1) مراجعه کنید.
قالب خروجی ساختار CMS (در صورتی که در حال نوشته شدن باشد)؛ مقدار پیش‌فرض SMIME است. برای جزئیات بیشتر به openssl-format-options(1) مراجعه کنید.
قالب رسید امضاشده برای استفاده با -receipt_verify؛ مقدار پیش‌فرض SMIME است. برای جزئیات بیشتر به openssl-format-options(1) مراجعه کنید.
گزینه‌های -stream و -indef معادل یکدیگر هستند و ورودی/خروجی جریانی را برای عملیات‌های کدگذاری فعال می‌کنند. این قابلیت پردازش تک‌گذره داده‌ها را بدون نیاز به نگهداری کل محتوا در حافظه ممکن می‌سازد، که به طور بالقوه از فایل‌های بسیار بزرگ پشتیبانی می‌کند. حالت جریانی برای امضای S/MIME با داده‌های جداشده در صورتی که قالب خروجی SMIME باشد به طور خودکار تنظیم می‌شود؛ این ویژگی در حال حاضر به طور پیش‌فرض برای تمام عملیات‌های دیگر غیرفعال است.
ورودی/خروجی جریانی را در مواردی که منجر به تولید کدگذاری ساخته‌شده با طول نامعین می‌شود غیرفعال می‌کند. این گزینه در حال حاضر هیچ تاثیری ندارد. در آینده حالت جریانی به طور پیش‌فرض در تمام عملیات‌های مربوطه فعال خواهد شد و این گزینه آن را غیرفعال خواهد کرد.
به طور معمول پیام ورودی به قالب «استاندارد» (Canonical) تبدیل می‌شود که در عمل از کاراکترهای CR و LF به عنوان پایان خط استفاده می‌کند، همان‌گونه که مشخصات S/MIME الزام کرده است. زمانی که این گزینه ارائه شود هیچ تبدیلی صورت نمی‌گیرد. این ویژگی هنگام مدیریت داده‌های باینری که ممکن است در قالب MIME نباشند کاربرد دارد.
به طور معمول فایل خروجی از یک LF به عنوان پایان خط استفاده می‌کند. با مشخص شدن این گزینه، به جای آن از CRLF استفاده می‌شود.
هنگام امضا، از استانداردسازی به قالب ASCII CRLF استفاده می‌کند. این کار فاصله‌های انتهایی را از تمامی خطوط حذف کرده، خطوط خالی انتهایی را در پایان فایل (EOF) پاک می‌کند و نوع محتوای کپسوله‌شده را تنظیم می‌نماید. این گزینه معمولاً با محتوای جداشده و قالب امضای خروجی DER استفاده می‌شود. این گزینه در هنگام اعتبارسنجی معمولاً مورد نیاز نیست، زیرا در صورت تشخیص قالب محتوای کپسوله‌شده به طور خودکار فعال می‌شود.

گذرواژه را برای گیرنده مشخص می‌کند.
کلید متقارن مورد استفاده را مشخص می‌کند. کلید باید در قالب هگزادسیمال ارائه شود و با الگوریتم مورد استفاده همخوانی داشته باشد. توسط گزینه‌های -EncryptedData_encrypt، -EncryptedData_decrypt، -encrypt و -decrypt پشتیبانی می‌شود. هنگام استفاده با -encrypt یا -decrypt، کلید ارائه‌شده برای بسته‌بندی یا باز کردن بسته‌بندی کلید رمزگذاری محتوا با استفاده از یک کلید AES در نوع KEKRecipientInfo به کار می‌رود.
شناسه کلید برای کلید متقارن ارائه‌شده برای نوع KEKRecipientInfo. اگر گزینه -secretkey به همراه -encrypt به کار رود، این گزینه باید حضور داشته باشد. در عملیات‌های -decrypt، شناسه id برای یافتن کلید مربوطه به کار می‌رود؛ اگر ارائه نشود، تلاشی برای رمزگشایی تمامی ساختارهای KEKRecipientInfo صورت می‌گیرد.
کلید خصوصی مورد استفاده هنگام امضا یا رمزگشایی. این کلید باید با گواهی مربوطه مطابقت داشته باشد. اگر این گزینه مشخص نشود، کلید خصوصی باید در فایل گواهیِ مشخص‌شده با فایل -recip یا -signer گنجانده شده باشد. هنگام امضا، این گزینه می‌تواند چندین بار برای مشخص کردن کلیدهای متوالی استفاده شود.
منبع گذرواژه کلید خصوصی. برای اطلاعات بیشتر درباره قالب arg به openssl-passphrase-options(1) مراجعه کنید.
برای امضا و رمزگذاری، این گزینه می‌تواند چندین بار برای تنظیم پارامترهای سفارشی‌شده برای کلید یا گواهی پیشین استفاده شود. در حال حاضر می‌تواند برای تنظیم RSA-PSS برای امضا، RSA-OAEP برای رمزگذاری یا اصلاح پارامترهای پیش‌فرض برای ECDH استفاده شود.
قالب فایل کلید خصوصی؛ به طور پیش‌فرض تعیین‌نشده است. برای جزئیات بیشتر به openssl-format-options(1) مراجعه کنید.
به «گزینه‌های موتور (Engine Options)» در openssl(1) مراجعه کنید. این گزینه منسوخ شده است.
به «گزینه‌های ارائه‌دهنده (Provider Options)» در openssl(1)، provider(7) و property(7) مراجعه کنید.
به «گزینه‌های وضعیت تصادفی (Random State Options)» در openssl(1) برای جزئیات مراجعه کنید.

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

هنگام رمزگذاری پیام، این گزینه می‌تواند چندین بار برای مشخص کردن هر گیرنده استفاده شود. اگر پارامترهای سفارشی‌شده نیاز باشد (برای مثال جهت تعیین RSA-OAEP)، این قالب باید استفاده شود.

تنها گواهی‌های دارای کلیدهای RSA، دیفی-هلمن (Diffie-Hellman) یا EC توسط این گزینه پشتیبانی می‌شوند.

این یک روش جایگزین برای استفاده از گزینه -recip هنگام رمزگذاری پیام است. می‌توان نام یک یا چند فایل گواهی را مشخص کرد.
الگوریتم رمزگذاری مورد استفاده. برای مثال، AES (۲۵۶ بیتی) - -aes256 یا DES سه‌گانه (۱۶۸ بیتی) - -des3. هر نام الگوریتم استانداردی (همان‌طور که توسط تابع EVP_get_cipherbyname() استفاده می‌شود) می‌تواند همراه با یک خط تیره در ابتدا استفاده شود، مانند -aes-128-cbc. برای فهرستی از الگوریتم‌های رمز پشتیبانی‌شده توسط نسخه OpenSSL خود به openssl-enc(1) مراجعه کنید.

در حال حاضر، انواع AES با حالت GCM تنها الگوریتم‌های AEAD پشتیبانی‌شده هستند.

در صورت عدم تعیین، AES-256-CBC به عنوان پیش‌فرض استفاده می‌شود. فقط با دستورات -encrypt و -EncryptedData_encrypt استفاده می‌شود.

الگوریتم رمز برای استفاده در رمزگذاری کلید مبتنی بر گذرواژه. این گزینه زمانی کاربرد دارد که گذرواژه‌ای برای اطلاعات گیرنده گذرواژه با استفاده از -pwri_password ارائه شده باشد و یک الگوریتم رمزگذاری AEAD انتخاب شده باشد. در چنین مواردی، باید یک الگوریتم غیر-AEAD با استفاده از این گزینه مشخص شود.
الگوریتم رمز برای استفاده در بسته‌بندی کلید (Key Wrap) هنگام رمزگذاری پیام با استفاده از توافق کلید برای انتقال کلید. الگوریتم مشخص‌شده باید برای بسته‌بندی کلید مناسب باشد.
به ترتیب از AES128، AES192، AES256 یا 3DES-EDE برای بسته‌بندی کلید استفاده می‌کند. بسته به گزینه‌های ساخت OpenSSL مورد استفاده، ممکن است -des3-wrap پشتیبانی نشود.
این گزینه پرچم CMS_DEBUG_DECRYPT را فعال می‌کند. این گزینه باید با احتیاط استفاده شود: به بخش نکات در ادامه مراجعه کنید.
این گزینه KDF مورد استفاده برای تولید کلید رمزگذاری کلید را در نوع KEMRecipientInfo تنظیم می‌کند. هر KDF که پارامترهای OSSL_KDF_PARAM_KEY و OSSL_KDF_PARAM_INFO را دریافت کند و از جهات دیگر به‌طور کامل با نام یا OID خود تعریف شده باشد، می‌تواند استفاده شود؛ برای مثال HKDF-SHA256.
این گزینه ماده کلیدزنی اختیاری کاربر (UKM) نوع KEMRecipientInfo را در قالب شانزده‌شانزدهی تنظیم می‌کند. مقدار UKM به همراه سایر اطلاعات در پارامتر OSSL_KDF_PARAM_INFO مربوط به KDF نوع KEMRecipientInfo کدگذاری خواهد شد.

الگوریتم خلاصه‌سازی (digest) برای استفاده هنگام امضا یا امضای مجدد. اگر مشخص نشود، الگوریتم خلاصه‌سازی پیش‌فرض برای کلید امضا استفاده خواهد شد (معمولاً SHA-256).
یک گواهی امضاکننده. هنگام امضا یا امضای مجدد یک پیام، در صورتی که به بیش از یک امضاکننده نیاز باشد، این گزینه می‌تواند چندین بار استفاده شود.
امکان مشخص کردن گواهی‌های اضافی را فراهم می‌کند. هنگام امضا، این گواهی‌ها در پیام گنجانده می‌شوند. هنگام اعتبارسنجی، این گواهی‌ها برای یافتن گواهی‌های امضاکننده جستجو شده و برای ساخت زنجیره گواهی استفاده می‌شوند.

ورودی می‌تواند در قالب PEM، DER یا PKCS#12 باشد.

هنگامی که همراه با گزینه -sign استفاده شود، یک صفت امضاشدهٔ ESS signingCertificate یا ESS signingCertificateV2 را به SignerInfo اضافه می‌کند تا امضا با الزامات یک امضای الکترونیکی پایه CAdES (CAdES-BES) مطابقت داشته باشد.
هنگام امضای یک پیام از امضای مات (opaque signing) استفاده می‌کند؛ این شکل در برابر تغییر شکل توسط رله‌های ایمیل مقاوم‌تر است اما توسط برنامه‌های ایمیلی که از S/MIME پشتیبانی نمی‌کنند قابل خواندن نیست. بدون این گزینه، امضای متن‌باز (cleartext) با نوع محتوای چندبخشی multipart/signed استفاده می‌شود.
هنگام امضای یک پیام، معمولاً گواهی امضاکننده در پیام گنجانده می‌شود؛ با این گزینه گواهی حذف می‌گردد. این کار حجم پیام امضاشده را کاهش می‌دهد، اما اعتبارسنج باید رونوشتی از گواهی امضاکننده را به صورت محلی در دسترس داشته باشد (به عنوان مثال با استفاده از گزینه -certfile ارائه شود).
به طور معمول هنگام امضای یک پیام، مجموعه‌ای از صفت‌ها گنجانده می‌شوند که شامل زمان امضا و الگوریتم‌های متقارن پشتیبانی‌شده است. با این گزینه آن‌ها گنجانده نمی‌شوند.
فهرست الگوریتم‌های پشتیبانی‌شده را از صفت‌های امضاشده حذف می‌کند، اما سایر گزینه‌ها مانند نوع محتوا و (به طور اختیاری) زمان امضا همچنان گنجانده می‌شوند.
زمان امضا را از صفت‌های امضاشده حذف می‌کند؛ سایر گزینه‌ها مانند نوع محتوا همچنان باقی می‌مانند.
برای گزینه -sign، یک درخواست رسید امضاشده را می‌گنجاند. مشخص می‌کند که درخواست‌ها باید توسط همه دریافت‌کنندگان یا دریافت‌کنندگان سطح اول (کسانی که پیام مستقیماً برای آن‌ها ارسال شده و نه از طریق لیست پستی) ارائه شوند. در صورتی که -receipt_request_from مشخص شده باشد، نادیده گرفته می‌شود.
برای گزینه -sign، یک درخواست رسید امضاشده را می‌گنجاند. یک نشانی ایمیل صریح اضافه می‌کند که رسیدها باید به آن ارسال شوند.
یک نشانی ایمیل صریح اضافه می‌کند که رسیدهای امضاشده باید به آن ارسال شوند. اگر یک رسید امضاشده درخواست شده باشد، این گزینه باید ارائه شود.

اگر پیامی با موفقیت اعتبارسنجی شده باشد، در صورت موفقیت‌آمیز بودن اعتبارسنجی، گواهی(های) امضاکننده در این فایل نوشته خواهد شد.
فایلی حاوی محتوای جداشده (detached content) را برای عملیاتی که ورودی S/MIME دریافت می‌کنند (مانند دستور -verify) مشخص می‌کند. این گزینه تنها زمانی قابل استفاده است که ساختار CMS از ساختار امضای جداشده استفاده کند که در آن محتوا گنجانده نشده است. اگر قالب ورودی S/MIME باشد و از نوع محتوای MIME به صورت multipart/signed استفاده کند، این گزینه هر محتوایی را بازنویسی خواهد کرد.
امضاهای محتوای امضاشده را اعتبارسنجی نمی‌کند.
امضاهای صفت‌های امضاشده را اعتبارسنجی نمی‌کند.
امضای پیام را اعتبارسنجی نمی‌کند.
گواهی امضاکننده یک پیام امضاشده را اعتبارسنجی نمی‌کند.
هنگام اعتبارسنجی یک پیام، معمولاً گواهی‌های موجود در پیام (در صورت وجود) برای یافتن گواهی امضاکننده جستجو می‌شوند. با این گزینه، تنها گواهی‌های مشخص‌شده در گزینه -certfile استفاده می‌شوند. با این حال، گواهی‌های ارائه‌شده همچنان می‌توانند به عنوان CAهای نامعتمد استفاده شوند.
هنگام استفاده همراه با -verify، خلاصه گواهی امضاکننده را الزامی کرده و بررسی می‌کند. برای جزئیات بیشتر به بخش «نکات (NOTES)» مراجعه کنید.
در صورت شکست اعتبارسنجی، با مقدار غیرصفر خارج می‌شود.
برای جزئیات بیشتر به "گزینه‌های گواهی معتمد (Trusted Certificate Options)" در openssl-verification-options(1) مراجعه کنید.

استفاده از شناسه کلید موضوع (subject key identifier) برای شناسایی گواهی‌ها به جای نام صادرکننده و شماره سریال. گواهی ارائه‌شده باید شامل یک افزونه شناسه کلید موضوع باشد. توسط گزینه‌های -sign و -encrypt پشتیبانی می‌شود.
تنظیم نوع محتوای کپسوله‌شده به type. در صورت عدم ارائه، نوع Data استفاده می‌شود. آرگومان type می‌تواند هر نام معتبر OID به قالب متنی یا عددی باشد.
این گزینه در صورت رمزگذاری یا امضا کردن، هدرهای MIME متن ساده (text/plain) را به پیام ارائه‌شده اضافه می‌کند. در صورت رمزگشایی یا اعتبارسنجی، هدرهای متنی را حذف می‌کند: اگر پیام رمزگشایی‌شده یا اعتبارسنجی‌شده از نوع MIME متنی text/plain نباشد، خطایی رخ می‌دهد.
هر گواهی موجود در پیام ورودی در file نوشته می‌شود.
هدرهای مرتبط با ایمیل. این هدرها در خارج از بخش امضاشده پیام قرار می‌گیرند، بنابراین ممکن است به صورت دستی اضافه شوند. در صورت امضا، بسیاری از کلاینت‌های ایمیل S/MIME بررسی می‌کنند که نشانی ایمیل گواهی امضاکننده با نشانی مشخص‌شده در هدر From: مطابقت داشته باشد.

برای عملیات -cmsout، از خروجی دادن ساختار پارس‌شده CMS خودداری می‌کند. این مورد زمانی مفید است که فقط صحت ساختار دستوری (syntax) ساختار CMS بررسی می‌شود.
برای عملیات -cmsout، تمام فیلدهای ساختار CMS را چاپ می‌کند. این گزینه مستلزم -noout است و عمدتاً برای اهداف آزمایشی کاربرد دارد.
برای عملیات -cmsout هنگامی که گزینه -print در حال استفاده است، گزینه‌های چاپ را برای فیلدهای رشته‌ای مشخص می‌کند. برای بیشتر موارد مقدار utf8 منطقی است. برای جزئیات به openssl-namedisplay-options(1) مراجعه کنید.
برای عملیات -verify، محتوای هرگونه درخواست رسید امضاشده (signed receipt requests) را چاپ می‌کند.

تنظیم گزینه‌های گوناگون برای اعتبارسنجی زنجیره گواهی. برای جزئیات بیشتر به بخش «گزینه‌های اعتبارسنجی» در openssl-verification-options(1) مراجعه کنید.

هرگونه خطای اعتبارسنجی موجب خروج دستور می‌شود.

پیام 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-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 است و بررسی می‌کند که شناسه‌های داده‌شده با زنجیره اعتماد اعتبارسنجی ایجادشده در طول فرایند تأیید مطابقت داشته باشند.

0
عملیات با موفقیت کامل انجام شد.
1
خطایی در تجزیه گزینه‌های دستور رخ داد.
2
یکی از فایل‌های ورودی قابل خواندن نبود.
3
خطایی هنگام ساخت فایل CMS یا خواندن پیام MIME رخ داد.
4
خطایی هنگام رمزگشایی یا تأیید پیام رخ داد.
5
پیام به درستی تأیید شد اما در نوشتن گواهی‌های امضاکنندگان خطایی رخ داد.

دستور 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) پردازش شوند.

ایجاد یک پیام امضاشده به صورت متن آشکار (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

تجزیه‌کننده MIME چندان هوشمند نیست: به نظر می‌رسد بیشتر پیام‌های ارسال‌شده به آن را پردازش می‌کند، اما ممکن است روی برخی دیگر با خطا مواجه شود.

کد برنامه در حال حاضر تنها گواهی امضاکننده را در یک فایل می‌نویسد: اگر امضاکننده دارای یک گواهی رمزگذاری جداگانه باشد، باید آن را به صورت دستی استخراج کرد. باید سازوکاری ابتکاری وجود داشته باشد که گواهی رمزگذاری صحیح را تشخیص دهد.

در حالت ایده‌آل باید پایگاه‌داده‌ای از گواهی‌ها برای هر نشانی ایمیل نگهداری شود.

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

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

ossl_store-file(7)

رمز پیش‌فرض رمزگذاری در 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 اضافه شدند.

حق نشر ۲۰۰۸-۲۰۲۶ متعلق به نویسندگان پروژه OpenSSL است. کلیه حقوق محفوظ است.

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

2026-08-25 3.6.4