'\" t .\" Automatically generated by Pandoc 3.10.2 .\" .TH "KEYTOOL" "1" "2026" "JDK 25.0.4.1" "JDK Commands" .SH "نام (NAME)" keytool \- ابزار مدیریت کلیدها و گواهی‌های امنیتی در جاوا (نسخه ۲۵) .SH "خلاصه دستور (SYNOPSIS)" \f[CR]keytool\f[R] [\f[I]دستورات\f[R]] .TP \f[I]دستورات\f[R] دستورات \f[CR]keytool\f[R] شامل موارد زیر است: .RS .IP \(bu 2 \f[CR]\-certreq\f[R]: ایجاد یک درخواست گواهی (Certificate Request) .IP \(bu 2 \f[CR]\-changealias\f[R]: تغییر نام مستعار (alias) یک مدخل .IP \(bu 2 \f[CR]\-delete\f[R]: حذف یک مدخل .IP \(bu 2 \f[CR]\-exportcert\f[R]: صدور (Export) گواهی .IP \(bu 2 \f[CR]\-genkeypair\f[R]: تولید یک جفت‌کلید (عمومی و خصوصی) .IP \(bu 2 \f[CR]\-genseckey\f[R]: تولید یک کلید مخفی (Secret Key) .IP \(bu 2 \f[CR]\-gencert\f[R]: تولید یک گواهی از روی یک درخواست گواهی .IP \(bu 2 \f[CR]\-importcert\f[R]: وارد کردن (Import) یک گواهی یا زنجیره گواهی .IP \(bu 2 \f[CR]\-importpass\f[R]: وارد کردن یک گذرواژه .IP \(bu 2 \f[CR]\-importkeystore\f[R]: وارد کردن یک یا تمام مدخل‌ها از یک انبار کلید (Keystore) دیگر .IP \(bu 2 \f[CR]\-keypasswd\f[R]: تغییر گذرواژه کلید مربوط به یک مدخل .IP \(bu 2 \f[CR]\-list\f[R]: فهرست کردن مدخل‌های موجود در انبار کلید .IP \(bu 2 \f[CR]\-printcert\f[R]: چاپ محتوای یک گواهی .IP \(bu 2 \f[CR]\-printcertreq\f[R]: چاپ محتوای یک درخواست گواهی .IP \(bu 2 \f[CR]\-printcrl\f[R]: چاپ محتوای یک فایل فهرست ابطال گواهی (CRL) .IP \(bu 2 \f[CR]\-storepasswd\f[R]: تغییر گذرواژه انبار کلید .IP \(bu 2 \f[CR]\-showinfo\f[R]: نمایش اطلاعات مرتبط با امنیت .IP \(bu 2 \f[CR]\-version\f[R]: چاپ نسخه برنامه .PP برای مشاهده شرح این دستورات به همراه گزینه‌های آن‌ها، بخش \f[B]دستورات و گزینه‌ها\f[R] را ببینید. .RE .SH "توضیحات (DESCRIPTION)" دستور \f[CR]keytool\f[R] یک ابزار مدیریت کلید و گواهی است. این ابزار به کاربران امکان می‌دهد جفت‌کلیدهای عمومی/خصوصی خود و گواهی‌های مرتبط را به منظور استفاده در خوداحراز‌هویت (جایی که کاربر خود را به سایر کاربران و سرویس‌ها احراز هویت می‌کند) یا خدمات یکپارچگی داده و احراز هویت از طریق امضاهای دیجیتال مدیریت کنند. دستور \f[CR]keytool\f[R] همچنین به کاربران اجازه می‌دهد کلیدهای عمومی طرف‌های ارتباطی خود را (در قالب گواهی‌ها) ذخیره موقت (Cache) کنند. .PP یک گواهی، بیانیه‌ای با امضای دیجیتال از سوی یک هویت (شخص، شرکت و غیره) است که بیان می‌کند کلید عمومی (و برخی اطلاعات دیگر) هویت دیگر دارای مقداری مشخص است. هنگامی که داده‌ها به صورت دیجیتالی امضا می‌شوند، امضا می‌تواند برای بررسی یکپارچگی داده و اصالت آن اعتبارسنجی شود. یکپارچگی به این معناست که داده‌ها دستکاری یا اصلاح نشده‌اند، و اصالت به این معناست که داده‌ها از سوی همان فردی آمده که ادعای ایجاد و امضای آن را دارد. .PP دستور \f[CR]keytool\f[R] همچنین به کاربران اجازه می‌دهد کلیدهای مخفی و عبارت‌های عبور مورد استفاده در رمزگذاری و رمزگشایی متقارن (استاندارد رمزگذاری داده‌ها یا DES) را مدیریت کنند. این ابزار همچنین می‌تواند سایر اطلاعات امنیتی را نمایش دهد. .PP دستور \f[CR]keytool\f[R] کلیدها و گواهی‌ها را در یک انبار کلید (Keystore) ذخیره می‌کند. .PP دستور \f[CR]keytool\f[R] از مشخصه‌های امنیتی \f[CR]jdk.certpath.disabledAlgorithms\f[R] و \f[CR]jdk.security.legacyAlgorithms\f[R] برای تعیین الگوریتم‌هایی که ریسک امنیتی دارند استفاده می‌کند. هنگام استفاده از الگوریتم‌های غیرفعال یا قدیمی، هشدارهایی صادر می‌شود. مشخصه‌های امنیتی \f[CR]jdk.certpath.disabledAlgorithms\f[R] و \f[CR]jdk.security.legacyAlgorithms\f[R] در فایل \f[CR]java.security\f[R] (واقع در دایرکتوری \f[CR]$JAVA_HOME/conf/security\f[R] کیت توسعه جاوا) تعریف شده‌اند. .SH "نکات مربوط به دستورات و گزینه‌ها (COMMAND AND OPTION NOTES)" نکات زیر در مورد توضیحات بخش \f[B]دستورات و گزینه‌ها\f[R] صدق می‌کند: .IP \(bu 2 نام تمامی دستورات و گزینه‌ها با علامت خط تیره (\f[CR]\-\f[R]) شروع می‌شود. .IP \(bu 2 در هر اجرا فقط یک دستور می‌تواند مشخص شود. .IP \(bu 2 گزینه‌های هر دستور را می‌توان به هر ترتیبی ارائه داد. .IP \(bu 2 دو نوع گزینه وجود دارد: تک‌مقداری که باید فقط یک بار ارائه شود. اگر یک گزینه تک‌مقداری چندین بار ارائه شود، مقدار آخرین مورد استفاده می‌شود. نوع دیگر چندمقداری است که می‌تواند چندین بار ارائه شود و از تمام مقادیر آن استفاده خواهد شد. تنها گزینه چندمقداری که در حال حاضر پشتیبانی می‌شود گزینه \f[CR]\-ext\f[R] برای تولید پسوندهای گواهی X.509v3 است. .IP \(bu 2 تمام مواردی که مورب نبوده یا داخل آکولاد ({ }) یا قلاب ([ ]) قرار ندارند، باید دقیقاً به همان صورت درج شوند. .IP \(bu 2 آکولادها در اطراف یک گزینه نشان‌دهنده آن است که در صورت عدم تعیین گزینه در خط فرمان، یک مقدار پیش‌فرض استفاده می‌شود. آکولادها همچنین در اطراف گزینه‌های \f[CR]\-v\f[R]، \f[CR]\-rfc\f[R] و \f[CR]\-J\f[R] استفاده می‌شوند که تنها هنگام درج در خط فرمان معنا دارند و فاقد مقدار پیش‌فرض هستند. .IP \(bu 2 قلاب‌ها در اطراف یک گزینه نشان‌دهنده آن است که اگر گزینه در خط فرمان مشخص نشود، از کاربر برای مقدار آن سوال خواهد شد. برای گزینه \f[CR]\-keypass\f[R]، اگر آن را در خط فرمان مشخص نکنید، دستور \f[CR]keytool\f[R] ابتدا تلاش می‌کند از گذرواژه انبار کلید برای بازیابی کلید خصوصی/مخفی استفاده کند. اگر این تلاش با شکست مواجه شود، دستور \f[CR]keytool\f[R] گذرواژه کلید خصوصی/مخفی را از شما درخواست می‌کند. .IP \(bu 2 موارد با حروف مورب (مقادیر گزینه‌ها) نشان‌دهنده مقادیر واقعی هستند که باید فراهم شوند. برای مثال، فرمت دستور \f[CR]\-printcert\f[R] به این صورت است: .RS 2 .RS .PP \f[CR]keytool \-printcert\f[R] {\f[CR]\-file\f[R] \f[I]cert_file\f[R]} {\f[CR]\-v\f[R]} .RE .PP هنگام اجرای دستور \f[CR]\-printcert\f[R]، مقدار \f[I]cert_file\f[R] را با نام واقعی فایل جایگزین کنید: .PP \f[CR]keytool \-printcert \-file VScert.cer\f[R] .RE .IP \(bu 2 مقادیر گزینه‌ها در صورتی که حاوی فاصله (space) باشند باید داخل علامت نقل‌قول قرار گیرند. .SH "دستورات و گزینه‌ها (COMMANDS AND OPTIONS)" دستورات keytool و گزینه‌های آن‌ها را می‌توان بر اساس وظایفی که انجام می‌دهند دسته‌بندی کرد. .PP \f[B]دستورات ایجاد یا افزودن داده به انبار کلید\f[R]: .IP \(bu 2 \f[CR]\-gencert\f[R] .IP \(bu 2 \f[CR]\-genkeypair\f[R] .IP \(bu 2 \f[CR]\-genseckey\f[R] .IP \(bu 2 \f[CR]\-importcert\f[R] .IP \(bu 2 \f[CR]\-importpass\f[R] .PP \f[B]دستورات وارد کردن محتوا از یک انبار کلید دیگر\f[R]: .IP \(bu 2 \f[CR]\-importkeystore\f[R] .PP \f[B]دستورات ایجاد درخواست گواهی\f[R]: .IP \(bu 2 \f[CR]\-certreq\f[R] .PP \f[B]دستورات صدور داده\f[R]: .IP \(bu 2 \f[CR]\-exportcert\f[R] .PP \f[B]دستورات نمایش داده‌ها\f[R]: .IP \(bu 2 \f[CR]\-list\f[R] .IP \(bu 2 \f[CR]\-printcert\f[R] .IP \(bu 2 \f[CR]\-printcertreq\f[R] .IP \(bu 2 \f[CR]\-printcrl\f[R] .PP \f[B]دستورات مدیریت انبار کلید\f[R]: .IP \(bu 2 \f[CR]\-storepasswd\f[R] .IP \(bu 2 \f[CR]\-keypasswd\f[R] .IP \(bu 2 \f[CR]\-delete\f[R] .IP \(bu 2 \f[CR]\-changealias\f[R] .PP \f[B]دستورات نمایش اطلاعات مرتبط با امنیت\f[R]: .IP \(bu 2 \f[CR]\-showinfo\f[R] .PP \f[B]دستورات نمایش نسخه برنامه\f[R]: .IP \(bu 2 \f[CR]\-version\f[R] .SH "دستورات ایجاد یا افزودن داده به انبار کلید (COMMANDS FOR CREATING OR ADDING DATA TO THE KEYSTORE)" .TP \f[CR]\-gencert\f[R] گزینه‌های موجود برای دستور \f[CR]\-gencert\f[R] به شرح زیر است: .RS .IP \(bu 2 {\f[CR]\-rfc\f[R]}: خروجی با قالب سبک RFC (درخواست نظر) .IP \(bu 2 {\f[CR]\-infile\f[R] \f[I]infile\f[R]}: نام فایل ورودی .IP \(bu 2 {\f[CR]\-outfile\f[R] \f[I]outfile\f[R]}: نام فایل خروجی .IP \(bu 2 {\f[CR]\-alias\f[R] \f[I]alias\f[R]}: نام مستعار مدخل مورد پردازش .IP \(bu 2 {\f[CR]\-sigalg\f[R] \f[I]sigalg\f[R]}: نام الگوریتم امضا .IP \(bu 2 {\f[CR]\-dname\f[R] \f[I]dname\f[R]}: نام متمایز (Distinguished Name) .IP \(bu 2 {\f[CR]\-startdate\f[R] \f[I]startdate\f[R]}: تاریخ و زمان آغاز اعتبار گواهی .IP \(bu 2 {\f[CR]\-ext\f[R] \f[I]ext\f[R]}*: پسوند X.509 .IP \(bu 2 {\f[CR]\-validity\f[R] \f[I]days\f[R]}: تعداد روزهای اعتبار .IP \(bu 2 [\f[CR]\-keypass\f[R] \f[I]arg\f[R]]: گذرواژه کلید .IP \(bu 2 {\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: نام انبار کلید .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه انبار کلید .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع انبار کلید .IP \(bu 2 {\f[CR]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده امنیت (Provider) .IP \(bu 2 {\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام (مانند SunPKCS11) به همراه آرگومان پیکربندی اختیاری. مقدار ارائه‌دهنده امنیت نام ارائه‌دهنده‌ای است که در یک ماژول تعریف شده است. .RS 2 .PP برای مثال: .RS .PP \f[CR]keytool \-addprovider SunPKCS11 \-providerarg some.cfg ...\f[R] .RE .PP \f[B]نکته:\f[R] .PP به دلایل سازگاری، ارائه‌دهنده SunPKCS11 همچنان می‌تواند با \f[CR]\-providerclass sun.security.pkcs11.SunPKCS11\f[R] بارگیری شود حتی اگر اکنون در یک ماژول تعریف شده باشد. این تنها ماژول موجود در JDK است که به پیکربندی نیاز دارد و بنابراین بیشترین کاربرد را با گزینه \f[CR]\-providerclass\f[R] دارد. برای ارائه‌دهندگان امنیتی قدیمی که در مسیر کلاس (classpath) قرار دارند و با بازتاب (reflection) بارگیری می‌شوند، همچنان باید از \f[CR]\-providerclass\f[R] استفاده شود. .RE .IP \(bu 2 {\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام کلاس واجد شرایط کامل (Fully Qualified Class Name) با یک آرگومان پیکربندی اختیاری. .RS 2 .PP برای مثال، اگر \f[CR]MyProvider\f[R] یک ارائه‌دهنده قدیمی باشد که از طریق بازتاب بارگیری می‌شود: .RS .PP \f[CR]keytool \-providerclass com.example.MyProvider ...\f[R] .RE .RE .IP \(bu 2 {\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس ارائه‌دهنده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی با جزئیات کامل (Verbose) .IP \(bu 2 {\f[CR]\-protected\f[R]}: گذرواژه از طریق سازوکار محافظت‌شده ارائه می‌شود .PP از دستور \f[CR]\-gencert\f[R] برای تولید گواهی در پاسخ به یک فایل درخواست گواهی (که می‌تواند توسط دستور \f[CR]keytool \-certreq\f[R] ایجاد شود) استفاده کنید. دستور درخواست را از \f[I]infile\f[R] یا در صورت حذف، از ورودی استاندارد می‌خواند، آن را با استفاده از کلید خصوصی نام مستعار امضا می‌کند و گواهی X.509 را در \f[I]outfile\f[R] یا در صورت حذف، در خروجی استاندارد می‌نویسد. هنگامی که \f[CR]\-rfc\f[R] مشخص شود، قالب خروجی PEM با کدگذاری Base64 خواهد بود؛ در غیر این صورت، یک فایل دودویی DER ایجاد می‌شود. مقدار \f[CR]\-sigalg\f[R] الگوریتمی را که باید برای امضای گواهی استفاده شود مشخص می‌کند. آرگومان \f[I]startdate\f[R] زمان و تاریخ شروع اعتبار گواهی است. آرگومان \f[I]days\f[R] تعداد روزهایی را که گواهی باید معتبر در نظر گرفته شود مشخص می‌کند. هنگامی که \f[I]dname\f[R] ارائه شود، به عنوان موضوع (Subject) گواهی تولیدشده استفاده می‌شود؛ در غیر این صورت، از موضوع موجود در درخواست گواهی استفاده خواهد شد. مقدار \f[CR]\-ext\f[R] نشان می‌دهد چه پسوندهای X.509 در گواهی تعبیه خواهند شد. برای دستور زبان \f[CR]\-ext\f[R] بخش \f[B]گزینه‌های عمومی دستورات\f[R] را بخوانید. گزینه \f[CR]\-gencert\f[R] به شما امکان می‌دهد زنجیره‌های گواهی ایجاد کنید. مثال زیر یک گواهی به نام \f[CR]e1\f[R] ایجاد می‌کند که شامل سه گواهی در زنجیره گواهی خود است. دستورات زیر چهار جفت‌کلید به نام‌های \f[CR]ca\f[R]، \f[CR]ca1\f[R]، \f[CR]ca2\f[R] و \f[CR]e1\f[R] ایجاد می‌کنند: .IP .EX keytool \-alias ca \-dname CN=CA \-genkeypair \-keyalg rsa keytool \-alias ca1 \-dname CN=CA \-genkeypair \-keyalg rsa keytool \-alias ca2 \-dname CN=CA \-genkeypair \-keyalg rsa keytool \-alias e1 \-dname CN=E1 \-genkeypair \-keyalg rsa .EE دو دستور زیر زنجیره‌ای از گواهی‌های امضاشده ایجاد می‌کنند؛ \f[CR]ca\f[R] گواهی \f[CR]ca1\f[R] را امضا می‌کند و \f[CR]ca1\f[R] گواهی \f[CR]ca2\f[R] را امضا می‌کند که همگی خودصادرشده هستند: .IP .EX keytool \-alias ca1 \-certreq | keytool \-alias ca \-gencert \-ext san=dns:ca1 | keytool \-alias ca1 \-importcert keytool \-alias ca2 \-certreq | keytool \-alias ca1 \-gencert \-ext san=dns:ca2 | keytool \-alias ca2 \-importcert .EE دستور زیر گواهی \f[CR]e1\f[R] را ایجاد کرده و آن را در فایل \f[CR]e1.cert\f[R] ذخیره می‌کند که توسط \f[CR]ca2\f[R] امضا شده است. در نتیجه، \f[CR]e1\f[R] باید شامل \f[CR]ca\f[R]، \f[CR]ca1\f[R] و \f[CR]ca2\f[R] در زنجیره گواهی خود باشد: .RS .PP \f[CR]keytool \-alias e1 \-certreq | keytool \-alias ca2 \-gencert > e1.cert\f[R] .RE .RE .TP \f[CR]\-genkeypair\f[R] گزینه‌های موجود برای دستور \f[CR]\-genkeypair\f[R] به شرح زیر است: .RS .IP \(bu 2 {\f[CR]\-alias\f[R] \f[I]alias\f[R]}: نام مستعار مدخل مورد پردازش .IP \(bu 2 \f[CR]\-keyalg\f[R] \f[I]alg\f[R]: نام الگوریتم کلید .IP \(bu 2 {\f[CR]\-keysize\f[R] \f[I]size\f[R]}: اندازه بیتی کلید .IP \(bu 2 {\f[CR]\-groupname\f[R] \f[I]name\f[R]}: نام گروه. برای مثال، نام یک منحنی بیضوی (Elliptic Curve). .IP \(bu 2 {\f[CR]\-sigalg\f[R] \f[I]alg\f[R]}: نام الگوریتم امضا .IP \(bu 2 {\f[CR]\-signer\f[R] \f[I]alias\f[R]}: نام مستعار امضاکننده .IP \(bu 2 [\f[CR]\-signerkeypass\f[R] \f[I]arg\f[R]]: گذرواژه کلید امضاکننده .IP \(bu 2 [\f[CR]\-dname\f[R] \f[I]name\f[R]]: نام متمایز (Distinguished Name) .IP \(bu 2 {\f[CR]\-startdate\f[R] \f[I]date\f[R]}: تاریخ و زمان آغاز اعتبار گواهی .IP \(bu 2 {\f[CR]\-ext\f[R] \f[I]value\f[R]}*: پسوند X.509 .IP \(bu 2 {\f[CR]\-validity\f[R] \f[I]days\f[R]}: تعداد روزهای اعتبار .IP \(bu 2 [\f[CR]\-keypass\f[R] \f[I]arg\f[R]]: گذرواژه کلید .IP \(bu 2 {\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: نام انبار کلید .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه انبار کلید .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع انبار کلید .IP \(bu 2 {\f[CR]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده امنیت .IP \(bu 2 {\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام (مانند SunPKCS11) به همراه آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]] }: افزودن ارائه‌دهنده امنیت با نام کلاس واجد شرایط کامل با یک آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس ارائه‌دهنده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی با جزئیات کامل .IP \(bu 2 {\f[CR]\-protected\f[R]}: گذرواژه از طریق سازوکار محافظت‌شده ارائه می‌شود .PP از دستور \f[CR]\-genkeypair\f[R] برای تولید یک جفت‌کلید (یک کلید عمومی و کلید خصوصی مرتبط) استفاده کنید. هنگامی که گزینه \f[CR]\-signer\f[R] مشخص نشده باشد، کلید عمومی در یک گواهی خودامضاشده X.509 v3 پیچیده شده و به عنوان یک زنجیره گواهی تک‌عضوی ذخیره می‌شود. هنگامی که گزینه \f[CR]\-signer\f[R] مشخص شود، گواهی جدیدی تولید شده و توسط امضاکننده تعیین‌شده امضا می‌شود و به عنوان یک زنجیره گواهی چندعضوی (شامل خود گواهی تولیدشده و زنجیره گواهی امضاکننده) ذخیره می‌شود. زنجیره گواهی و کلید خصوصی در یک مدخل جدید انبار کلید ذخیره می‌شوند که با نام مستعار آن شناسایی می‌شود. مقدار \f[CR]\-keyalg\f[R] الگوریتم مورد استفاده برای تولید جفت‌کلید را مشخص می‌کند. مقدار \f[CR]\-keysize\f[R] اندازه هر کلید تولیدشده را مشخص می‌کند. مقدار \f[CR]\-groupname\f[R] گروه نام‌گذاری‌شده (برای مثال، نام استاندارد یا از پیش‌تعریف‌شده یک منحنی بیضوی) کلید تولیدشده را مشخص می‌کند. هنگامی که مقدار \f[CR]\-keysize\f[R] ارائه شود، برای مقداردهی اولیه یک شیء \f[CR]KeyPairGenerator\f[R] با استفاده از متد \f[CR]initialize(int keysize)\f[R] استفاده خواهد شد. هنگامی که مقدار \f[CR]\-groupname\f[R] ارائه شود، برای مقداردهی اولیه یک شیء \f[CR]KeyPairGenerator\f[R] با استفاده از متد \f[CR]initialize(AlgorithmParameterSpec params)\f[R] که در آن \f[CR]params\f[R] برابر با \f[CR]new NamedParameterSpec(groupname)\f[R] است استفاده خواهد شد. تنها یکی از دو گزینه \f[CR]\-groupname\f[R] و \f[CR]\-keysize\f[R] می‌تواند مشخص شود. اگر یک الگوریتم دارای چندین گروه نام‌گذاری‌شده با اندازه کلید یکسان باشد، معمولاً باید از گزینه \f[CR]\-groupname\f[R] استفاده شود. در این حالت، اگر \f[CR]\-keysize\f[R] مشخص شود، انتخاب گروه نام‌گذاری‌شده هنگام تولید جفت‌کلید بر عهده ارائه‌دهنده امنیت خواهد بود. مقدار \f[CR]\-sigalg\f[R] الگوریتم مورد استفاده برای امضای گواهی را مشخص می‌کند. این الگوریتم باید با مقدار \f[CR]\-keyalg\f[R] سازگار باشد. مقدار \f[CR]\-signer\f[R] نام مستعار یک \f[CR]PrivateKeyEntry\f[R] برای امضاکننده‌ای را مشخص می‌کند که از قبل در انبار کلید وجود دارد. این گزینه برای امضای گواهی با کلید خصوصی امضاکننده استفاده می‌شود. این امر به ویژه برای الگوریتم‌های توافق کلید (مانند مواردی که مقدار \f[CR]\-keyalg\f[R] برابر با \f[CR]XDH\f[R]، \f[CR]X25519\f[R]، \f[CR]X448\f[R] یا \f[CR]DH\f[R] است) مفید است، زیرا این کلیدها نمی‌توانند برای امضاهای دیجیتال استفاده شوند و بنابراین گواهی خودامضاشده برای آن‌ها قابل ایجاد نیست. مقدار \f[CR]\-signerkeypass\f[R] گذرواژه کلید خصوصی امضاکننده را مشخص می‌کند. اگر کلید خصوصی مدخل امضاکننده با گذرواژه‌ای متفاوت از گذرواژه انبار کلید محافظت شده باشد، می‌توان این گزینه را مشخص کرد. مقدار \f[CR]\-dname\f[R] نام متمایز X.500 مرتبط با مقدار \f[CR]\-alias\f[R] را مشخص می‌کند. اگر گزینه \f[CR]\-signer\f[R] مشخص نشود، فیلدهای صادرکننده (issuer) و موضوع (subject) گواهی خودامضاشده با نام متمایز مشخص‌شده مقداردهی می‌شوند. اگر گزینه \f[CR]\-signer\f[R] مشخص شود، فیلد موضوع گواهی با نام متمایز مشخص‌شده و فیلد صادرکننده با فیلد موضوع گواهی امضاکننده مقداردهی می‌شود. اگر نام متمایز در خط فرمان ارائه نشود، از کاربر درخواست خواهد شد. مقدار \f[CR]\-keypass\f[R] گذرواژه‌ای است که برای محافظت از کلید خصوصی جفت‌کلید تولیدشده استفاده می‌شود. اگر گذرواژه‌ای ارائه نشود، از کاربر درخواست خواهد شد. اگر در اعلان کلید \f[B]Return\f[R] (Enter) را فشار دهید، گذرواژه کلید برابر با گذرواژه انبار کلید تنظیم می‌شود. مقدار \f[CR]\-keypass\f[R] باید حداقل دارای شش کاراکتر باشد. مقدار \f[CR]\-startdate\f[R] زمان صدور گواهی را مشخص می‌کند که به عنوان مقدار "Not Before" فیلد Validity گواهی X.509 نیز شناخته می‌شود. مقدار گزینه را می‌توان در یکی از این دو قالب تنظیم کرد: .PP ([\f[CR]+\-\f[R]]\f[I]nnn\f[R][\f[CR]ymdHMS\f[R]])+ [\f[I]yyyy\f[R]\f[CR]/\f[R]\f[I]mm\f[R]\f[CR]/\f[R]\f[I]dd\f[R]] [\f[I]HH\f[R]\f[CR]:\f[R]\f[I]MM\f[R]\f[CR]:\f[R]\f[I]SS\f[R]] .PP در قالب اول، زمان صدور به میزان مقدار مشخص‌شده نسبت به زمان جاری جابجا می‌شود. مقدار ترکیبی از دنباله‌ای از زیرمقادیر است. درون هر زیرمقدار، علامت مثبت (+) به معنای جابجایی به جلو و علامت منفی (\-) به معنای جابجایی به عقب است. زمان جابجایی شامل \f[I]nnn\f[R] واحد سال، ماه، روز، ساعت، دقیقه یا ثانیه است (که به ترتیب با یک کاراکتر منفرد \f[CR]y\f[R]، \f[CR]m\f[R]، \f[CR]d\f[R]، \f[CR]H\f[R]، \f[CR]M\f[R] یا \f[CR]S\f[R] مشخص می‌شود). مقدار دقیق زمان صدور با استفاده از متد \f[CR]java.util.GregorianCalendar.add(int field, int amount)\f[R] روی هر زیرمقدار از چپ به راست محاسبه می‌شود. برای مثال، زمان صدور می‌تواند به صورت زیر مشخص شود: .IP .EX Calendar c = new GregorianCalendar(); c.add(Calendar.YEAR, \-1); c.add(Calendar.MONTH, 1); c.add(Calendar.DATE, \-1); return c.getTime() .EE در قالب دوم، کاربر زمان دقیق صدور را در دو بخش سال/ماه/روز و ساعت:دقیقه:ثانیه (با استفاده از منطقه زمانی محلی) تنظیم می‌کند. کاربر می‌تواند تنها یک بخش را ارائه دهد که به معنای یکسان بودن بخش دیگر با تاریخ (یا زمان) جاری است. کاربر باید تعداد دقیق ارقام نشان‌داده‌شده در تعریف قالب را وارد کند (در صورت کوتاه‌تر بودن با 0 پر شود). هنگامی که هر دو بخش تاریخ و زمان ارائه شوند، دقیقاً یک کاراکتر فاصله میان دو بخش قرار می‌گیرد. ساعت همیشه باید در قالب ۲۴ ساعته ارائه شود. هنگامی که گزینه ارائه نشود، تاریخ شروع برابر با زمان جاری خواهد بود. این گزینه فقط یک بار می‌تواند ارائه شود. مقدار \f[I]date\f[R] تعداد روزهایی را مشخص می‌کند (شروع از تاریخ مشخص‌شده توسط \f[CR]\-startdate\f[R]، یا تاریخ جاری در صورت عدم تعیین \f[CR]\-startdate\f[R]) که گواهی باید معتبر در نظر گرفته شود. .RE .TP \f[CR]\-genseckey\f[R] گزینه‌های موجود برای دستور \f[CR]\-genseckey\f[R] به شرح زیر است: .RS .IP \(bu 2 {\f[CR]\-alias\f[R] \f[I]alias\f[R]}: نام مستعار مدخل مورد پردازش .IP \(bu 2 [\f[CR]\-keypass\f[R] \f[I]arg\f[R]]: گذرواژه کلید .IP \(bu 2 \f[CR]\-keyalg\f[R] \f[I]alg\f[R]: نام الگوریتم کلید .IP \(bu 2 {\f[CR]\-keysize\f[R] \f[I]size\f[R]}: اندازه بیتی کلید .IP \(bu 2 {\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: نام انبار کلید .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه انبار کلید .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع انبار کلید .IP \(bu 2 {\f[CR]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده امنیت .IP \(bu 2 {\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام (مانند SunPKCS11) به همراه آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام کلاس واجد شرایط کامل با یک آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس ارائه‌دهنده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی با جزئیات کامل .IP \(bu 2 {\f[CR]\-protected\f[R]}: گذرواژه از طریق سازوکار محافظت‌شده ارائه می‌شود .PP از دستور \f[CR]\-genseckey\f[R] برای تولید یک کلید مخفی و ذخیره آن در یک مدخل جدید \f[CR]KeyStore.SecretKeyEntry\f[R] که با \f[CR]alias\f[R] شناسایی می‌شود استفاده کنید. مقدار \f[CR]\-keyalg\f[R] الگوریتم مورد استفاده برای تولید کلید مخفی را مشخص می‌کند و مقدار \f[CR]\-keysize\f[R] اندازه کلید تولیدشده را تعیین می‌کند. مقدار \f[CR]\-keypass\f[R] گذرواژه‌ای است که از کلید مخفی محافظت می‌کند. اگر گذرواژه‌ای ارائه نشود، از کاربر درخواست خواهد شد. اگر در اعلان کلید \f[B]Return\f[R] را فشار دهید، گذرواژه کلید برابر با گذرواژه مورد استفاده برای \f[CR]\-keystore\f[R] تنظیم می‌شود. مقدار \f[CR]\-keypass\f[R] باید حداقل دارای شش کاراکتر باشد. .RE .TP \f[CR]\-importcert\f[R] گزینه‌های موجود برای دستور \f[CR]\-importcert\f[R] به شرح زیر است: .RS .IP \(bu 2 {\f[CR]\-noprompt\f[R]}: عدم نمایش اعلان تعاملی .IP \(bu 2 {\f[CR]\-trustcacerts\f[R]}: اعتماد به گواهی‌های موجود در cacerts .IP \(bu 2 {\f[CR]\-protected\f[R]}: گذرواژه از طریق سازوکار محافظت‌شده ارائه می‌شود .IP \(bu 2 {\f[CR]\-alias\f[R] \f[I]alias\f[R]}: نام مستعار مدخل مورد پردازش .IP \(bu 2 {\f[CR]\-file\f[R] \f[I]file\f[R]}: نام فایل ورودی .IP \(bu 2 [\f[CR]\-keypass\f[R] \f[I]arg\f[R]]: گذرواژه کلید .IP \(bu 2 {\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: نام انبار کلید .IP \(bu 2 {\f[CR]\-cacerts\f[R]}: دسترسی به انبار کلید cacerts .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه انبار کلید .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع انبار کلید .IP \(bu 2 {\f[CR]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده امنیت .IP \(bu 2 {\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام (مانند SunPKCS11) به همراه آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام کلاس واجد شرایط کامل با یک آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس ارائه‌دهنده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی با جزئیات کامل .PP از دستور \f[CR]\-importcert\f[R] برای خواندن گواهی یا زنجیره گواهی (که در آن زنجیره در قالب پاسخ PKCS#7 یا دنباله‌ای از گواهی‌های X.509 ارائه می‌شود) از فایل \f[CR]\-file\f[R] \f[I]file\f[R] و ذخیره آن در مدخل \f[CR]keystore\f[R] مشخص‌شده با \f[CR]\-alias\f[R] استفاده کنید. اگر \f[CR]\-file\f[R] \f[I]file\f[R] مشخص نشود، گواهی یا زنجیره گواهی از \f[CR]stdin\f[R] خوانده می‌شود. دستور \f[CR]keytool\f[R] می‌تواند گواهی‌های X.509 نسخه‌های ۱، ۲ و ۳ و زنجیره‌های گواهی با قالب PKCS#7 متشکل از این نوع گواهی‌ها را وارد کند. داده‌های ورودی باید در قالب کدگذاری دودویی یا قالب کدگذاری متنی قابل‌چاپ (معروف به کدگذاری Base64) طبق استاندارد RFC 1421 اینترنت ارائه شوند. در حالت دوم، داده‌های کدگذاری‌شده باید در ابتدا با رشته‌ای که با \f[CR]\-\-\-\-\-\f[R]BEGIN شروع می‌شود و در انتها با رشته‌ای که با \f[CR]\-\-\-\-\-\f[R]END پایان می‌یابد محصور شوند. شما به دو دلیل یک گواهی را وارد می‌کنید: افزودن آن به فهرست گواهی‌های مورد اعتماد، و وارد کردن پاسخ گواهی دریافت شده از یک مرجع صدور گواهی (CA) در نتیجه ارسال درخواست امضای گواهی (CSR) به آن CA. دستور \f[CR]\-certreq\f[R] را در بخش \f[B]دستورات ایجاد درخواست گواهی\f[R] ببینید. نوع عملیات وارد کردن توسط مقدار گزینه \f[CR]\-alias\f[R] مشخص می‌شود. اگر نام مستعار به مدخل کلید اشاره نکند، دستور \f[CR]keytool\f[R] فرض می‌کند که در حال افزودن یک مدخل گواهی مورد اعتماد هستید. در این حالت، نام مستعار نباید از قبل در انبار کلید وجود داشته باشد. اگر نام مستعار وجود داشته باشد، دستور \f[CR]keytool\f[R] خطایی صادر می‌کند زیرا یک گواهی مورد اعتماد از قبل برای آن نام مستعار وجود دارد و گواهی را وارد نمی‌کند. اگر \f[CR]\-alias\f[R] به یک مدخل کلید اشاره کند، دستور \f[CR]keytool\f[R] فرض می‌کند که در حال وارد کردن پاسخ گواهی هستید. .RE .TP \f[CR]\-importpass\f[R] گزینه‌های موجود برای دستور \f[CR]\-importpass\f[R] به شرح زیر است: .RS .IP \(bu 2 {\f[CR]\-alias\f[R] \f[I]alias\f[R]}: نام مستعار مدخل مورد پردازش .IP \(bu 2 [\f[CR]\-keypass\f[R] \f[I]arg\f[R]]: گذرواژه کلید .IP \(bu 2 {\f[CR]\-keyalg\f[R] \f[I]alg\f[R]}: نام الگوریتم کلید .IP \(bu 2 {\f[CR]\-keysize\f[R] \f[I]size\f[R]}: اندازه بیتی کلید .IP \(bu 2 {\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: نام انبار کلید .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه انبار کلید .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع انبار کلید .IP \(bu 2 {\f[CR]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده امنیت .IP \(bu 2 {\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام (مانند SunPKCS11) به همراه آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام کلاس واجد شرایط کامل با یک آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس ارائه‌دهنده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی با جزئیات کامل .IP \(bu 2 {\f[CR]\-protected\f[R]}: گذرواژه از طریق سازوکار محافظت‌شده ارائه می‌شود .PP از دستور \f[CR]\-importpass\f[R] برای وارد کردن یک عبارت عبور و ذخیره آن در یک مدخل جدید \f[CR]KeyStore.SecretKeyEntry\f[R] که با \f[CR]\-alias\f[R] شناسایی می‌شود استفاده کنید. عبارت عبور می‌تواند از طریق جریان ورودی استاندارد ارائه شود؛ در غیر این صورت از کاربر درخواست خواهد شد. گزینه \f[CR]\-keypass\f[R] گذرواژه‌ای برای محافظت از عبارت عبور واردشده فراهم می‌کند. اگر گذرواژه‌ای ارائه نشود، از کاربر درخواست خواهد شد. اگر در اعلان کلید \f[B]Return\f[R] را فشار دهید، گذرواژه کلید برابر با گذرواژه مورد استفاده برای \f[CR]keystore\f[R] تنظیم می‌شود. مقدار \f[CR]\-keypass\f[R] باید حداقل دارای شش کاراکتر باشد. .RE .SH "دستورات وارد کردن محتوا از یک انبار کلید دیگر (COMMANDS FOR IMPORTING CONTENTS FROM ANOTHER KEYSTORE)" .TP \f[CR]\-importkeystore\f[R] گزینه‌های موجود برای دستور \f[CR]\-importkeystore\f[R] به شرح زیر است: .RS .IP \(bu 2 \f[CR]\-srckeystore\f[R] \f[I]keystore\f[R]: نام انبار کلید مبدأ .IP \(bu 2 {\f[CR]\-destkeystore\f[R] \f[I]keystore\f[R]}: نام انبار کلید مقصد .IP \(bu 2 {\f[CR]\-srcstoretype\f[R] \f[I]type\f[R]}: نوع انبار کلید مبدأ .IP \(bu 2 {\f[CR]\-deststoretype\f[R] \f[I]type\f[R]}: نوع انبار کلید مقصد .IP \(bu 2 [\f[CR]\-srcstorepass\f[R] \f[I]arg\f[R]]: گذرواژه انبار کلید مبدأ .IP \(bu 2 [\f[CR]\-deststorepass\f[R] \f[I]arg\f[R]]: گذرواژه انبار کلید مقصد .IP \(bu 2 {\f[CR]\-srcprotected\f[R]}: گذرواژه انبار کلید مبدأ محافظت‌شده است .IP \(bu 2 {\f[CR]\-destprotected\f[R]}: گذرواژه انبار کلید مقصد محافظت‌شده است .IP \(bu 2 {\f[CR]\-srcprovidername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده انبار کلید مبدأ .IP \(bu 2 {\f[CR]\-destprovidername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده انبار کلید مقصد .IP \(bu 2 {\f[CR]\-srcalias\f[R] \f[I]alias\f[R]}: نام مستعار مبدأ .IP \(bu 2 {\f[CR]\-destalias\f[R] \f[I]alias\f[R]}: نام مستعار مقصد .IP \(bu 2 [\f[CR]\-srckeypass\f[R] \f[I]arg\f[R]]: گذرواژه کلید مبدأ .IP \(bu 2 [\f[CR]\-destkeypass\f[R] \f[I]arg\f[R]]: گذرواژه کلید مقصد .IP \(bu 2 {\f[CR]\-noprompt\f[R]}: عدم نمایش اعلان تعاملی .IP \(bu 2 {\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام (مانند SunPKCS11) به همراه آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام کلاس واجد شرایط کامل با یک آرگومان پیکربندی اختیاری .IP \(bu 2 {\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس ارائه‌دهنده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی با جزئیات کامل .PP \f[B]نکته:\f[R] این خط اول تمام گزینه‌ها است: .RS .PP \f[CR]\-srckeystore\f[R] \f[I]keystore\f[R] \f[CR]\-destkeystore\f[R] \f[I]keystore\f[R] .RE .PP از دستور \f[CR]\-importkeystore\f[R] برای وارد کردن یک مدخل یا تمام مدخل‌ها از یک انبار کلید مبدأ به یک انبار کلید مقصد استفاده کنید. .PP \f[B]نکته:\f[R] اگر هنگام استفاده از دستور \f[CR]keytool \-importkeystore\f[R] گزینه \f[CR]\-destkeystore\f[R] را مشخص نکنید، انبار کلید پیش‌فرض مورد استفاده \f[CR]$HOME/.keystore\f[R] خواهد بود. .PP هنگامی که گزینه \f[CR]\-srcalias\f[R] ارائه شود، دستور تنها مدخل مشخص‌شده با آن نام مستعار را به انبار کلید مقصد وارد می‌کند. اگر نام مستعار مقصد با \f[CR]\-destalias\f[R] ارائه نشود، از \f[CR]\-srcalias\f[R] به عنوان نام مستعار مقصد استفاده می‌شود. اگر مدخل مبدأ با گذرواژه محافظت شده باشد، از \f[CR]\-srckeypass\f[R] برای بازیابی مدخل استفاده می‌شود. اگر \f[CR]\-srckeypass\f[R] ارائه نشود، دستور \f[CR]keytool\f[R] تلاش می‌کند از \f[CR]\-srcstorepass\f[R] برای بازیابی مدخل استفاده کند. اگر \f[CR]\-srcstorepass\f[R] ارائه نشده یا نادرست باشد، گذرواژه از کاربر پرسیده می‌شود. مدخل مقصد با \f[CR]\-destkeypass\f[R] محافظت می‌شود. اگر \f[CR]\-destkeypass\f[R] ارائه نشود، مدخل مقصد با گذرواژه مدخل مبدأ محافظت خواهد شد. برای مثال، اکثر ابزارهای شخص ثالث نیازمند یکسان بودن \f[CR]storepass\f[R] و \f[CR]keypass\f[R] در انبار کلید PKCS #12 هستند. برای ایجاد یک انبار کلید PKCS#12 برای این ابزارها، همیشه مقداری برای \f[CR]\-destkeypass\f[R] تعیین کنید که با \f[CR]\-deststorepass\f[R] یکسان باشد. اگر گزینه \f[CR]\-srcalias\f[R] ارائه نشود، تمام مدخل‌های انبار کلید مبدأ به انبار کلید مقصد وارد می‌شوند. هر مدخل مقصد تحت همان نام مستعار مدخل مبدأ ذخیره می‌شود. اگر مدخل مبدأ با گذرواژه محافظت شده باشد، از \f[CR]\-srcstorepass\f[R] برای بازیابی مدخل استفاده می‌شود. اگر \f[CR]\-srcstorepass\f[R] ارائه نشده یا نادرست باشد، گذرواژه از کاربر پرسیده می‌شود. اگر نوع یک مدخل انبار کلید مبدأ در انبار کلید مقصد پشتیبانی نشود، یا اگر هنگام ذخیره یک مدخل در انبار کلید مقصد خطایی رخ دهد، از کاربر پرسیده می‌شود که آیا مایل به رد کردن مدخل و ادامه است یا خروج از برنامه. مدخل مقصد با گذرواژه مدخل مبدأ محافظت می‌شود. اگر نام مستعار مقصد از قبل در انبار کلید مقصد وجود داشته باشد، از کاربر پرسیده می‌شود که آیا مدخل رونویسی شود یا یک مدخل جدید با نام مستعار متفاوت ایجاد گردد. اگر گزینه \f[CR]\-noprompt\f[R] ارائه شود، از کاربر برای نام مستعار جدید سوال نخواهد شد. مدخل‌های موجود با نام مستعار مقصد رونویسی می‌شوند. مدخل‌هایی که قابل وارد کردن نباشند نادیده گرفته شده و هشداری نمایش داده می‌شود. .RE .SH "دستورات ایجاد درخواست گواهی (COMMANDS FOR GENERATING A CERTIFICATE REQUEST)" .TP \f[CR]\-certreq\f[R] گزینه‌های موجود برای دستور \f[CR]\-certreq\f[R] به شرح زیر است: .RS .IP \(bu 2 {\f[CR]\-alias\f[R] \f[I]alias\f[R]}: نام مستعار مدخل مورد پردازش .IP \(bu 2 {\f[CR]\-sigalg\f[R] \f[I]alg\f[R]}: نام الگوریتم امضا .IP \(bu 2 {\f[CR]\-file\f[R] \f[I]file\f[R]}: نام فایل خروجی .IP \(bu 2 [ \f[CR]\-keypass\f[R] \f[I]arg\f[R]]: گذرواژه کلید .IP \(bu 2 {\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: نام انبار کلید .IP \(bu 2 {\f[CR]\-dname\f[R] \f[I]name\f[R]}: نام متمایز (Distinguished Name) .IP \(bu 2 {\f[CR]\-ext\f[R] \f[I]value\f[R]}: پسوند X.509 .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه انبار کلید .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع انبار کلید .IP \(bu 2 {\f[CR]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده امنیت .IP \(bu 2 {\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام (مانند SunPKCS11) به همراه آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام کلاس واجد شرایط کامل با یک آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس ارائه‌دهنده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی با جزئیات کامل .IP \(bu 2 {\f[CR]\-protected\f[R]}: گذرواژه از طریق سازوکار محافظت‌شده ارائه می‌شود .PP از دستور \f[CR]\-certreq\f[R] برای ایجاد یک درخواست امضای گواهی (CSR) با استفاده از قالب PKCS #10 استفاده کنید. یک CSR به منظور ارسال به مرجع صدور گواهی (CA) ایجاد می‌شود. مرجع CA درخواست‌کننده گواهی را (معمولاً به صورت برون‌خط) احراز هویت کرده و یک گواهی یا زنجیره گواهی بازمی‌گرداند تا جایگزین زنجیره گواهی موجود (در ابتدا یک گواهی خودامضاشده) در انبار کلید شود. کلید خصوصی مرتبط با \f[I]alias\f[R] برای ایجاد درخواست گواهی PKCS #10 استفاده می‌شود. برای دسترسی به کلید خصوصی باید گذرواژه صحیح ارائه شود. اگر \f[CR]\-keypass\f[R] در خط فرمان ارائه نشود و متفاوت از گذرواژه مورد استفاده برای محافظت از یکپارچگی انبار کلید باشد، از کاربر درخواست خواهد شد. اگر \f[CR]\-dname\f[R] ارائه شود، به عنوان موضوع (Subject) در CSR استفاده می‌شود؛ در غیر این صورت، از نام متمایز X.500 مرتبط با نام مستعار استفاده خواهد شد. مقدار \f[CR]\-sigalg\f[R] الگوریتم مورد استفاده برای امضای CSR را مشخص می‌کند. درخواست CSR در فایل \f[CR]\-file\f[R] \f[I]file\f[R] ذخیره می‌شود. اگر فایلی مشخص نشود، CSR در \f[CR]\-stdout\f[R] نوشته می‌شود. برای وارد کردن پاسخ دریافت شده از CA از دستور \f[CR]\-importcert\f[R] استفاده کنید. .RE .SH "دستورات صدور داده (COMMANDS FOR EXPORTING DATA)" .TP \f[CR]\-exportcert\f[R] گزینه‌های موجود برای دستور \f[CR]\-exportcert\f[R] به شرح زیر است: .RS .IP \(bu 2 {\f[CR]\-rfc\f[R]}: خروجی با قالب سبک RFC .IP \(bu 2 {\f[CR]\-alias\f[R] \f[I]alias\f[R]}: نام مستعار مدخل مورد پردازش .IP \(bu 2 {\f[CR]\-file\f[R] \f[I]file\f[R]}: نام فایل خروجی .IP \(bu 2 {\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: نام انبار کلید .IP \(bu 2 {\f[CR]\-cacerts\f[R]}: دسترسی به انبار کلید cacerts .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه انبار کلید .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع انبار کلید .IP \(bu 2 {\f[CR]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده امنیت .IP \(bu 2 {\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام (مانند SunPKCS11) به همراه آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]] }: افزودن ارائه‌دهنده امنیت با نام کلاس واجد شرایط کامل با یک آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس ارائه‌دهنده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی با جزئیات کامل .IP \(bu 2 {\f[CR]\-protected\f[R]}: گذرواژه از طریق سازوکار محافظت‌شده ارائه می‌شود .PP از دستور \f[CR]\-exportcert\f[R] برای خواندن یک گواهی از انبار کلید که با \f[CR]\-alias\f[R] \f[I]alias\f[R] مرتبط است و ذخیره آن در \f[CR]\-file\f[R] \f[I]file\f[R] استفاده کنید. هنگامی که فایلی مشخص نشود، گواهی به \f[CR]stdout\f[R] ارسال می‌شود. به طور پیش‌فرض، گواهی در قالب کدگذاری دودویی صادر می‌شود. اگر گزینه \f[CR]\-rfc\f[R] مشخص شود، خروجی در قالب کدگذاری متنی قابل‌چاپ تعریف‌شده توسط استاندارد کدگذاری گواهی RFC 1421 اینترنت خواهد بود. اگر \f[CR]\-alias\f[R] به یک گواهی مورد اعتماد اشاره کند، همان گواهی صادر می‌شود. در غیر این صورت، \f[CR]\-alias\f[R] به یک مدخل کلید همراه با زنجیره گواهی مرتبط اشاره دارد. در این حالت، اولین گواهی در زنجیره بازگردانده می‌شود. این گواهی کلید عمومی هویتی را که توسط \f[CR]\-alias\f[R] مشخص شده احراز هویت می‌کند. .RE .SH "دستورات نمایش داده‌ها (COMMANDS FOR DISPLAYING DATA)" .TP \f[CR]\-list\f[R] گزینه‌های موجود برای دستور \f[CR]\-list\f[R] به شرح زیر است: .RS .IP \(bu 2 {\f[CR]\-rfc\f[R]}: خروجی با قالب سبک RFC .IP \(bu 2 {\f[CR]\-alias\f[R] \f[I]alias\f[R]}: نام مستعار مدخل مورد پردازش .IP \(bu 2 {\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: نام انبار کلید .IP \(bu 2 {\f[CR]\-cacerts\f[R]}: دسترسی به انبار کلید cacerts .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه انبار کلید .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع انبار کلید .IP \(bu 2 {\f[CR]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده امنیت .IP \(bu 2 {\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام (مانند SunPKCS11) به همراه آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]] }: افزودن ارائه‌دهنده امنیت با نام کلاس واجد شرایط کامل با یک آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس ارائه‌دهنده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی با جزئیات کامل .IP \(bu 2 {\f[CR]\-protected\f[R]}: گذرواژه از طریق سازوکار محافظت‌شده ارائه می‌شود .PP از دستور \f[CR]\-list\f[R] برای چاپ محتوای مدخل انبار کلید شناسایی‌شده با \f[CR]\-alias\f[R] در \f[CR]stdout\f[R] استفاده کنید. اگر \f[CR]\-alias\f[R] \f[I]alias\f[R] مشخص نشود، محتوای کل انبار کلید چاپ می‌شود. به طور پیش‌فرض، این دستور اثرانگشت SHA-256 گواهی را چاپ می‌کند. اگر گزینه \f[CR]\-v\f[R] مشخص شود، گواهی در قالب خوانا برای انسان به همراه اطلاعات اضافی مانند مالک، صادرکننده، شماره سریال و هرگونه پسوند چاپ می‌شود. اگر گزینه \f[CR]\-rfc\f[R] مشخص شود، محتوای گواهی با استفاده از قالب کدگذاری قابل‌چاپ تعریف‌شده توسط استاندارد کدگذاری گواهی RFC 1421 اینترنت چاپ می‌شود. .PP \f[B]نکته:\f[R] نمی‌توانید هر دو گزینه \f[CR]\-v\f[R] و \f[CR]\-rfc\f[R] را در یک دستور مشخص کنید؛ در غیر این صورت خطا گزارش می‌شود. .RE .TP \f[CR]\-printcert\f[R] گزینه‌های موجود برای دستور \f[CR]\-printcert\f[R] به شرح زیر است: .RS .IP \(bu 2 {\f[CR]\-rfc\f[R]}: خروجی با قالب سبک RFC .IP \(bu 2 {\f[CR]\-file\f[R] \f[I]cert_file\f[R]}: نام فایل ورودی .IP \(bu 2 {\f[CR]\-sslserver\f[R] \f[I]server\f[R][\f[CR]:\f[R]\f[I]port\f[R]]}: میزبان و درگاه سرور لایه سوکت‌های امن (SSL) .IP \(bu 2 {\f[CR]\-jarfile\f[R] \f[I]JAR_file\f[R]}: فایل امضاشده \f[CR].jar\f[R] .IP \(bu 2 {\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: نام انبار کلید .IP \(bu 2 {\f[CR]\-trustcacerts\f[R]}: اعتماد به گواهی‌های موجود در cacerts .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه انبار کلید .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع انبار کلید .IP \(bu 2 {\f[CR]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده امنیت .IP \(bu 2 {\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام (مانند SunPKCS11) به همراه آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام کلاس واجد شرایط کامل با یک آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس ارائه‌دهنده .IP \(bu 2 {\f[CR]\-protected\f[R]}: گذرواژه از طریق سازوکار محافظت‌شده ارائه می‌شود .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی با جزئیات کامل .PP از دستور \f[CR]\-printcert\f[R] برای خواندن و چاپ گواهی از فایل \f[CR]\-file\f[R] \f[I]cert_file\f[R]، سرور SSL واقع در \f[CR]\-sslserver\f[R] \f[I]server\f[R][\f[CR]:\f[R]\f[I]port\f[R]] یا فایل JAR امضاشده مشخص‌شده توسط \f[CR]\-jarfile\f[R] \f[I]JAR_file\f[R] استفاده کنید. این دستور محتوای گواهی را در قالبی خوانا برای انسان چاپ می‌کند. هنگامی که درگاهی مشخص نشود، درگاه استاندارد HTTPS یعنی 443 فرض می‌شود. .PP \f[B]نکته:\f[R] گزینه‌های \f[CR]\-sslserver\f[R] و \f[CR]\-file\f[R] نمی‌توانند در یک دستور با هم ارائه شوند؛ در غیر این صورت خطا گزارش می‌شود. اگر هیچ‌یک از این دو گزینه را مشخص نکنید، گواهی از \f[CR]stdin\f[R] خوانده می‌شود. هنگامی که \f[CR]\-rfc\f[R] مشخص شود، دستور \f[CR]keytool\f[R] گواهی را در حالت PEM طبق تعریف استاندارد کدگذاری گواهی RFC 1421 اینترنت چاپ می‌کند. اگر گواهی از یک فایل یا \f[CR]stdin\f[R] خوانده شود، ممکن است با کدگذاری دودویی یا قالب کدگذاری قابل‌چاپ طبق استاندارد RFC 1421 باشد. اگر سرور SSL پشت یک دیوار آتش (فایروال) باشد، گزینه‌های \f[CR]\-J\-Dhttps.proxyHost=proxyhost\f[R] و \f[CR]\-J\-Dhttps.proxyPort=proxyport\f[R] می‌توانند در خط فرمان برای تونل‌زنی از طریق پراکسی مشخص شوند. .PP \f[B]نکته:\f[R] این دستور می‌تواند مستقل از یک انبار کلید استفاده شود. این دستور ضعف الگوریتم امضای گواهی را در صورتی که یک گواهی مورد اعتماد در انبار کلید کاربر (مشخص‌شده با \f[CR]\-keystore\f[R]) یا در انبار کلید \f[CR]cacerts\f[R] (در صورت تعیین \f[CR]\-trustcacerts\f[R]) باشد، بررسی نمی‌کند. .RE .TP \f[CR]\-printcertreq\f[R] گزینه‌های موجود برای دستور \f[CR]\-printcertreq\f[R] به شرح زیر است: .RS .IP \(bu 2 {\f[CR]\-file\f[R] \f[I]file\f[R]}: نام فایل ورودی .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی با جزئیات کامل .PP از دستور \f[CR]\-printcertreq\f[R] برای چاپ محتوای یک درخواست گواهی با قالب PKCS #10 (که توسط دستور \f[CR]keytool \-certreq\f[R] تولید می‌شود) استفاده کنید. این دستور درخواست را از فایل می‌خواند؛ اگر فایلی وجود نداشته باشد، درخواست از ورودی استاندارد خوانده می‌شود. .RE .TP \f[CR]\-printcrl\f[R] گزینه‌های موجود برای دستور \f[CR]\-printcrl\f[R] به شرح زیر است: .RS .IP \(bu 2 {\f[CR]\-file crl\f[R]}: نام فایل ورودی .IP \(bu 2 {\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: نام انبار کلید .IP \(bu 2 {\f[CR]\-trustcacerts\f[R]}: اعتماد به گواهی‌های موجود در cacerts .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه انبار کلید .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع انبار کلید .IP \(bu 2 {\f[CR]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده امنیت .IP \(bu 2 {\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام (مانند SunPKCS11) به همراه آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام کلاس واجد شرایط کامل با یک آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس ارائه‌دهنده .IP \(bu 2 {\f[CR]\-protected\f[R]}: گذرواژه از طریق سازوکار محافظت‌شده ارائه می‌شود .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی با جزئیات کامل .PP از دستور \f[CR]\-printcrl\f[R] برای خواندن فهرست ابطال گواهی (CRL) از \f[CR]\-file crl\f[R] استفاده کنید. یک CRL فهرستی از گواهی‌های دیجیتالی است که توسط مرجع صدور صادرکننده آن‌ها باطل شده‌اند. مرجع CA فایل \f[CR]crl\f[R] را تولید می‌کند. .PP \f[B]نکته:\f[R] این دستور می‌تواند مستقل از یک انبار کلید استفاده شود. این دستور تلاش می‌کند CRL را با استفاده از گواهی موجود در انبار کلید کاربر (مشخص‌شده با \f[CR]\-keystore\f[R]) یا انبار کلید \f[CR]cacerts\f[R] (در صورت تعیین \f[CR]\-trustcacerts\f[R]) اعتبارسنجی کند و در صورت عدم امکان اعتبارسنجی، هشداری چاپ خواهد کرد. .RE .SH "دستورات مدیریت انبار کلید (COMMANDS FOR MANAGING THE KEYSTORE)" .TP \f[CR]\-storepasswd\f[R] گزینه‌های موجود برای دستور \f[CR]\-storepasswd\f[R] به شرح زیر است: .RS .IP \(bu 2 [\f[CR]\-new\f[R] \f[I]arg\f[R]]: گذرواژه جدید .IP \(bu 2 {\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: نام انبار کلید .IP \(bu 2 {\f[CR]\-cacerts\f[R]}: دسترسی به انبار کلید cacerts .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه انبار کلید .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع انبار کلید .IP \(bu 2 {\f[CR]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده امنیت .IP \(bu 2 {\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام (مانند SunPKCS11) به همراه آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام کلاس واجد شرایط کامل با یک آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس ارائه‌دهنده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی با جزئیات کامل .PP از دستور \f[CR]\-storepasswd\f[R] برای تغییر گذرواژه مورد استفاده جهت محافظت از یکپارچگی محتویات انبار کلید استفاده کنید. گذرواژه جدید با \f[CR]\-new\f[R] \f[I]arg\f[R] تنظیم می‌شود و باید حداقل دارای شش کاراکتر باشد. .RE .TP \f[CR]\-keypasswd\f[R] گزینه‌های موجود برای دستور \f[CR]\-keypasswd\f[R] به شرح زیر است: .RS .IP \(bu 2 {\f[CR]\-alias\f[R] \f[I]alias\f[R]}: نام مستعار مدخل مورد پردازش .IP \(bu 2 [\f[CR]\-keypass\f[R] \f[I]old_keypass\f[R]]: گذرواژه کلید .IP \(bu 2 [\f[CR]\-new\f[R] \f[I]new_keypass\f[R]]: گذرواژه جدید .IP \(bu 2 {\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: نام انبار کلید .IP \(bu 2 {\f[CR]\-storepass\f[R] \f[I]arg\f[R]}: گذرواژه انبار کلید .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع انبار کلید .IP \(bu 2 {\f[CR]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده امنیت .IP \(bu 2 {\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام (مانند SunPKCS11) به همراه آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام کلاس واجد شرایط کامل با یک آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس ارائه‌دهنده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی با جزئیات کامل .PP از دستور \f[CR]\-keypasswd\f[R] برای تغییر گذرواژه‌ای که کلیدهای خصوصی/مخفی مشخص‌شده با \f[CR]\-alias\f[R] تحت آن محافظت می‌شوند از \f[CR]\-keypass\f[R] \f[I]old_keypass\f[R] به \f[CR]\-new\f[R] \f[I]new_keypass\f[R] استفاده کنید. مقدار گذرواژه باید حداقل دارای شش کاراکتر باشد. اگر گزینه \f[CR]\-keypass\f[R] در خط فرمان ارائه نشود و گذرواژه \f[CR]\-keypass\f[R] با گذرواژه انبار کلید (\f[CR]\-storepass\f[R] \f[I]arg\f[R]) متفاوت باشد، از کاربر درخواست خواهد شد. اگر گزینه \f[CR]\-new\f[R] در خط فرمان ارائه نشود، از کاربر درخواست خواهد شد. .RE .TP \f[CR]\-delete\f[R] گزینه‌های موجود برای دستور \f[CR]\-delete\f[R] به شرح زیر است: .RS .IP \(bu 2 [\f[CR]\-alias\f[R] \f[I]alias\f[R]]: نام مستعار مدخل مورد پردازش .IP \(bu 2 {\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: نام انبار کلید .IP \(bu 2 {\f[CR]\-cacerts\f[R]}: دسترسی به انبار کلید cacerts .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه انبار کلید .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع انبار کلید .IP \(bu 2 {\f[CR]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده امنیت .IP \(bu 2 {\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام (مانند SunPKCS11) به همراه آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام کلاس واجد شرایط کامل با یک آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس ارائه‌دهنده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی با جزئیات کامل .IP \(bu 2 {\f[CR]\-protected\f[R]}: گذرواژه از طریق سازوکار محافظت‌شده ارائه می‌شود .PP از دستور \f[CR]\-delete\f[R] برای حذف مدخل \f[CR]\-alias\f[R] \f[I]alias\f[R] از انبار کلید استفاده کنید. در صورت عدم ارائه در خط فرمان، نام مستعار (\f[CR]alias\f[R]) از کاربر پرسیده می‌شود. .RE .TP \f[CR]\-changealias\f[R] گزینه‌های موجود برای دستور \f[CR]\-changealias\f[R] به شرح زیر است: .RS .IP \(bu 2 {\f[CR]\-alias\f[R] \f[I]alias\f[R]}: نام مستعار مدخل مورد پردازش .IP \(bu 2 [\f[CR]\-destalias\f[R] \f[I]alias\f[R]]: نام مستعار مقصد .IP \(bu 2 [\f[CR]\-keypass\f[R] \f[I]arg\f[R]]: گذرواژه کلید .IP \(bu 2 {\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: نام انبار کلید .IP \(bu 2 {\f[CR]\-cacerts\f[R]}: دسترسی به انبار کلید cacerts .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه انبار کلید .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع انبار کلید .IP \(bu 2 {\f[CR]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده امنیت .IP \(bu 2 {\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام (مانند SunPKCS11) به همراه آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام کلاس واجد شرایط کامل با یک آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس ارائه‌دهنده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی با جزئیات کامل .IP \(bu 2 {\f[CR]\-protected\f[R]}: گذرواژه از طریق سازوکار محافظت‌شده ارائه می‌شود .PP از دستور \f[CR]\-changealias\f[R] برای انتقال یک مدخل موجود در انبار کلید از \f[CR]\-alias\f[R] \f[I]alias\f[R] به یک \f[CR]\-destalias\f[R] \f[I]alias\f[R] جدید استفاده کنید. اگر نام مستعار مقصد ارائه نشود، دستور آن را از شما درخواست خواهد کرد. اگر مدخل اصلی با گذرواژه مدخل محافظت شده باشد، می‌توان گذرواژه را با گزینه \f[CR]\-keypass\f[R] ارائه داد. اگر گذرواژه کلید ارائه نشود، ابتدا \f[CR]\-storepass\f[R] (در صورت ارائه) آزمایش می‌شود. اگر این تلاش با شکست مواجه شود، گذرواژه از کاربر پرسیده خواهد شد. .RE .SH "دستورات نمایش اطلاعات امنیتی (COMMANDS FOR DISPLAYING SECURITY\-RELATED INFORMATION)" .TP \f[CR]\-showinfo\f[R] گزینه‌های موجود برای دستور \f[CR]\-showinfo\f[R] به شرح زیر است: .RS .IP \(bu 2 {\f[CR]\-tls\f[R]}: نمایش اطلاعات پیکربندی TLS .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی با جزئیات کامل .PP از دستور \f[CR]\-showinfo\f[R] برای نمایش اطلاعات گوناگون امنیتی استفاده کنید. گزینه \f[CR]\-tls\f[R] پیکربندی‌های TLS مانند فهرست پروتکل‌ها و مجموعه‌های رمزنگاری (Cipher Suites) فعال را نمایش می‌دهد. .RE .SH "دستورات نمایش نسخه برنامه (COMMANDS FOR DISPLAYING PROGRAM VERSION)" می‌توانید از \f[CR]\-version\f[R] برای چاپ نسخه برنامه \f[CR]keytool\f[R] استفاده کنید. .SH "دستورات نمایش اطلاعات راهنما (COMMANDS FOR DISPLAYING HELP INFORMATION)" می‌توانید از \f[CR]\-\-help\f[R] برای نمایش فهرستی از دستورات \f[CR]keytool\f[R] یا نمایش اطلاعات راهنما در مورد یک دستور خاص \f[CR]keytool\f[R] استفاده کنید. .IP \(bu 2 برای نمایش فهرست دستورات \f[CR]keytool\f[R]، وارد کنید: .RS 2 .RS .PP \f[CR]keytool \-\-help\f[R] .RE .RE .IP \(bu 2 برای نمایش اطلاعات راهنما در مورد یک دستور خاص \f[CR]keytool\f[R]، وارد کنید: .RS 2 .RS .PP \f[CR]keytool \- \-\-help\f[R] .RE .RE .SH "گزینه‌های عمومی دستورات (COMMON COMMAND OPTIONS)" گزینه \f[CR]\-v\f[R] می‌تواند برای تمام دستورات به جز \f[CR]\-\-help\f[R] درج شود. هنگامی که گزینه \f[CR]\-v\f[R] درج شود، نشان‌دهنده حالت پرگویی (Verbose) است که به معنای ارائه اطلاعات بیشتر در خروجی خواهد بود. .PP آرگومان \f[CR]\-J\f[R]\f[I]option\f[R] می‌تواند برای هر دستوری درج شود. هنگامی که \f[CR]\-J\f[R]\f[I]option\f[R] استفاده شود، رشته \f[I]option\f[R] مشخص‌شده مستقیماً به مفسر جاوا منتقل می‌شود. این گزینه نباید شامل هیچ فاصله‌ای باشد. این گزینه برای تنظیم محیط اجرا یا مصرف حافظه مفید است. برای مشاهده فهرستی از گزینه‌های ممکن مفسر، دستور \f[CR]java \-h\f[R] یا \f[CR]java \-X\f[R] را در خط فرمان وارد کنید. .PP گزینه‌های زیر می‌توانند برای تمام دستوراتی که روی یک انبار کلید عمل می‌کنند درج شوند: .TP \f[CR]\-storetype\f[R] \f[I]storetype\f[R] این شناسه نوع انبار کلیدی را که باید نمونه‌سازی شود مشخص می‌کند. .TP \f[CR]\-keystore\f[R] \f[I]keystore\f[R] محل قرارگیری انبار کلید. .RS اگر نوع انبار کلید JKS استفاده شود و فایل انبار کلید هنوز وجود نداشته باشد، اجرای برخی دستورات \f[CR]keytool\f[R] می‌تواند منجر به ایجاد یک فایل انبار کلید جدید شود. برای مثال، اگر \f[CR]keytool \-genkeypair\f[R] فراخوانی شود و گزینه \f[CR]\-keystore\f[R] مشخص نشده باشد، فایل انبار کلید پیش‌فرض به نام \f[CR].keystore\f[R] در دایرکتوری خانگی کاربر در صورت عدم وجود ایجاد می‌شود. مشابهاً، اگر گزینه \f[CR]\-keystore ks_file\f[R] مشخص شود اما \f[CR]ks_file\f[R] وجود نداشته باشد، فایل ایجاد خواهد شد. برای اطلاعات بیشتر در مورد نوع \f[CR]storetype\f[R] از نوع JKS، بخش \f[B]پیاده‌سازی انبار کلید\f[R] را در \f[B]اصطلاحات\f[R] ببینید. توجه داشته باشید که جریان ورودی از گزینه \f[CR]\-keystore\f[R] به متد \f[CR]KeyStore.load\f[R] ارسال می‌شود. اگر \f[CR]NONE\f[R] به عنوان نشانی URL مشخص شود، یک جریان پوچ (null stream) به متد \f[CR]KeyStore.load\f[R] ارسال خواهد شد. در صورتی که انبار کلید مبتنی بر فایل نباشد (برای مثال، هنگامی که انبار کلید روی یک دستگاه توکن سخت‌افزاری قرار دارد)، باید مقدار \f[CR]NONE\f[R] مشخص شود. .RE .TP \f[CR]\-cacerts\f[R] \f[I]cacerts\f[R] روی انبار کلید \f[I]cacerts\f[R] عمل می‌کند. این گزینه معادل \f[CR]\-keystore\f[R] \f[I]path_to_cacerts\f[R] \f[CR]\-storetype\f[R] \f[I]type_of_cacerts\f[R] است. اگر از گزینه \f[CR]\-keystore\f[R] یا \f[CR]\-storetype\f[R] همراه با گزینه \f[CR]\-cacerts\f[R] استفاده شود، خطا گزارش می‌شود. .TP \f[CR]\-storepass\f[R] [\f[CR]:env\f[R] | \f[CR]:file\f[R] ] \f[I]argument\f[R] گذرواژه‌ای که برای محافظت از یکپارچگی انبار کلید استفاده می‌شود. .RS اگر اصلاح‌کننده \f[CR]env\f[R] یا \f[CR]file\f[R] مشخص نشود، گذرواژه دارای مقدار \f[I]argument\f[R] خواهد بود که باید حداقل دارای شش کاراکتر باشد. در غیر این صورت، گذرواژه به شرح زیر بازیابی می‌شود: .IP \(bu 2 \f[CR]env\f[R]: بازیابی گذرواژه از متغیر محیطی با نام \f[I]argument\f[R]. .IP \(bu 2 \f[CR]file\f[R]: بازیابی گذرواژه از فایل با نام \f[I]argument\f[R]. .PP \f[B]نکته:\f[R] تمام گزینه‌های دیگری که نیازمند گذرواژه هستند، مانند \f[CR]\-keypass\f[R]، \f[CR]\-srckeypass\f[R]، \f[CR]\-destkeypass\f[R]، \f[CR]\-srcstorepass\f[R] و \f[CR]\-deststorepass\f[R] نیز اصلاح‌کننده‌های \f[CR]env\f[R] و \f[CR]file\f[R] را می‌پذیرند. به یاد داشته باشید که گزینه گذرواژه و اصلاح‌کننده را با یک دو‌نقطه (:) جدا کنید. گذرواژه باید برای تمام دستوراتی که به محتوای انبار کلید دسترسی دارند ارائه شود. برای چنین دستوراتی، هنگامی که گزینه \f[CR]\-storepass\f[R] در خط فرمان ارائه نشود، از کاربر درخواست خواهد شد. هنگام بازیابی اطلاعات از انبار کلید، ارائه گذرواژه اختیاری است. اگر گذرواژه‌ای مشخص نشود، یکپارچگی اطلاعات بازیابی‌شده قابل اعتبارسنجی نیست و هشداری نمایش داده می‌شود. .RE .TP \f[CR]\-providername\f[R] \f[I]name\f[R] برای شناسایی نام یک ارائه‌دهنده خدمات رمزنگاری در صورتی که در فایل مشخصه‌های امنیتی فهرست شده باشد استفاده می‌شود. .TP \f[CR]\-addprovider\f[R] \f[I]name\f[R] برای افزودن یک ارائه‌دهنده امنیت با نام (مانند SunPKCS11) استفاده می‌شود. .TP \f[CR]\-providerclass\f[R] \f[I]class\f[R] برای مشخص کردن نام فایل کلاس اصلی ارائه‌دهنده خدمات رمزنگاری در صورتی که در فایل مشخصه‌های امنیتی فهرست نشده باشد استفاده می‌شود. .TP \f[CR]\-providerpath\f[R] \f[I]list\f[R] برای تعیین مسیر کلاس ارائه‌دهنده استفاده می‌شود. .TP \f[CR]\-providerarg\f[R] \f[I]arg\f[R] همراه با گزینه \f[CR]\-addprovider\f[R] یا \f[CR]\-providerclass\f[R] برای ارائه یک آرگومان رشته‌ای اختیاری به سازنده (Constructor) نام \f[I]class\f[R] استفاده می‌شود. .TP \f[CR]\-protected=true\f[R]|\f[CR]false\f[R] این مقدار را زمانی \f[CR]true\f[R] تعیین کنید که گذرواژه باید از طریق یک مسیر احراز هویت محافظت‌شده، مانند یک کارت‌خوان اختصاصی پین‌کد (PIN Reader) وارد شود. از آنجا که در دستور \f[CR]\-importkeystore\f[R] دو انبار کلید دخیل هستند، دو گزینه \f[CR]\-srcprotected\f[R] و \f[CR]\-destprotected\f[R] به ترتیب برای انبار کلید مبدأ و مقصد ارائه شده‌اند. .TP \f[CR]\-ext\f[R] {\f[I]name\f[R]{\f[CR]:critical\f[R]} {\f[CR]=\f[R]\f[I]value\f[R]}} نشان‌دهنده یک پسوند گواهی X.509 است. این گزینه می‌تواند در \f[CR]\-genkeypair\f[R] و \f[CR]\-gencert\f[R] برای تعبیه پسوندها در گواهی تولیدشده یا در \f[CR]\-certreq\f[R] برای نشان دادن پسوندهای درخواست‌شده در درخواست گواهی استفاده شود. این گزینه می‌تواند چندین بار درج شود. آرگومان \f[I]name\f[R] می‌تواند یک نام پسوند پشتیبانی‌شده (بخش \f[B]پسوندهای نام‌دار پشتیبانی‌شده\f[R] را ببینید) یا یک شماره شناسه شیء (OID) دلخواه باشد. آرگومان \f[I]value\f[R]، در صورت ارائه، آرگومان مربوط به پسوند را مشخص می‌کند. هنگامی که \f[I]value\f[R] حذف شود، مقدار پیش‌فرض پسوند استفاده شده یا خود پسوند نیازی به آرگومان ندارد. اصلاح‌کننده \f[CR]:critical\f[R]، در صورت ارائه، به این معناست که ویژگی \f[CR]isCritical\f[R] پسوند برابر با \f[CR]true\f[R] است؛ در غیر این صورت برابر با \f[CR]false\f[R] خواهد بود. می‌توانید به جای \f[CR]:critical\f[R] از \f[CR]:c\f[R] استفاده کنید. .TP \f[CR]\-conf\f[R] \f[I]file\f[R] یک فایل گزینه‌های از پیش پیکربندی‌شده را مشخص می‌کند. .SH "فایل گزینه‌های از پیش پیکربندی‌شده (PRE\-CONFIGURED OPTIONS FILE)" فایل گزینه‌های از پیش پیکربندی‌شده یک فایل مشخصه‌های جاوا (Java Properties File) است که می‌تواند با گزینه \f[CR]\-conf\f[R] مشخص شود. هر مشخصه نشان‌دهنده گزینه(های) پیش‌فرض برای یک دستور keytool با استفاده از \f[CR]keytool.\f[R]\f[I]command_name\f[R] به عنوان نام مشخصه است. یک مشخصه ویژه به نام \f[CR]keytool.all\f[R] نشان‌دهنده گزینه(های) پیش‌فرضی است که برای تمام دستورات اعمال می‌شود. مقدار یک مشخصه می‌تواند شامل \f[CR]${prop}\f[R] باشد که به مشخصه سیستمی مرتبط با آن بسط داده خواهد شد. اگر مقدار یک گزینه حاوی فاصله باشد، باید درون علامت نقل‌قول (\" یا ') قرار گیرد. تمام نام‌های مشخصه‌ها باید با حروف کوچک باشند. .PP هنگامی که \f[CR]keytool\f[R] با یک فایل گزینه‌های از پیش پیکربندی‌شده اجرا می‌شود، ابتدا مقدار مربوط به \f[CR]keytool.all\f[R] (در صورت وجود) به خط فرمان \f[CR]keytool\f[R] اضافه می‌شود، سپس مقدار مربوط به نام دستور (در صورت وجود) قرار می‌گیرد و در نهایت گزینه‌های موجود در خط فرمان اعمال می‌شوند. برای یک گزینه تک‌مقداری، این سازوکار به مشخصه یک دستور خاص اجازه می‌دهد مقدار \f[CR]keytool.all\f[R] را بازنویسی کند، و مقدار مشخص‌شده در خط فرمان هر دو را بازنویسی خواهد کرد. برای گزینه‌های چندمقداری، تمام آن‌ها توسط \f[CR]keytool\f[R] استفاده خواهند شد. .PP برای مثال، با داشتن فایل زیر به نام \f[CR]preconfig\f[R]: .IP .EX # A tiny pre\-configured options file keytool.all = \-keystore ${user.home}/ks keytool.list = \-v keytool.genkeypair = \-keyalg rsa .EE .PP دستور \f[CR]keytool \-conf preconfig \-list\f[R] هم‌ارز با دستور زیر است: .RS .PP \f[CR]keytool \-keystore \(ti/ks \-v \-list\f[R] .RE .PP دستور \f[CR]keytool \-conf preconfig \-genkeypair \-alias me\f[R] هم‌ارز با دستور زیر است: .RS .PP \f[CR]keytool \-keystore \(ti/ks \-keyalg rsa \-genkeypair \-alias me\f[R] .RE .PP دستور \f[CR]keytool \-conf preconfig \-genkeypair \-alias you \-keyalg ec\f[R] هم‌ارز با دستور زیر است: .RS .PP \f[CR]keytool \-keystore \(ti/ks \-keyalg rsa \-genkeypair \-alias you \-keyalg ec\f[R] .RE .PP که معادل دستور زیر است: .RS .PP \f[CR]keytool \-keystore \(ti/ks \-genkeypair \-alias you \-keyalg ec\f[R] .RE .PP زیرا \f[CR]\-keyalg\f[R] یک گزینه تک‌مقداری است و مقدار \f[CR]ec\f[R] مشخص‌شده در خط فرمان فایل گزینه‌های از پیش پیکربندی‌شده را بازنویسی می‌کند. .SH "مثال‌هایی از مقادیر گزینه‌ها (EXAMPLES OF OPTION VALUES)" مثال‌های زیر مقادیر پیش‌فرض برای گزینه‌های گوناگون را نشان می‌دهند: .IP .EX \-alias "mykey" \-keysize 2048 (when using \-genkeypair and \-keyalg is "DSA") 3072 (when using \-genkeypair and \-keyalg is "RSA", "RSASSA\-PSS", or "DH") 384 (when using \-genkeypair and \-keyalg is "EC") 56 (when using \-genseckey and \-keyalg is "DES") 168 (when using \-genseckey and \-keyalg is "DESede") \-groupname ed25519 (when using \-genkeypair and \-keyalg is "EdDSA", key size is 255) x25519 (when using \-genkeypair and \-keyalg is "XDH", key size is 255) \-validity 90 \-keystore \-destkeystore \-storetype \-file stdin (if reading) stdout (if writing) \-protected false .EE .PP هنگام تولید یک گواهی یا درخواست گواهی، الگوریتم امضای پیش‌فرض (گزینه \f[CR]\-sigalg\f[R]) بر اساس الگوریتم کلید خصوصی زیربنایی مشتق می‌شود تا سطح مناسبی از استحکام امنیتی را به شرح زیر فراهم کند: .PP الگوریتم‌های پیش‌فرض امضا: .TS tab(@); l l l. T{ keyalg T}@T{ key size T}@T{ default sigalg T} _ T{ DSA T}@T{ any size T}@T{ SHA256withDSA T} T{ RSA T}@T{ < 624 T}@T{ SHA256withRSA (key size is too small for using SHA\-384) T} T{ T}@T{ <= 7680 T}@T{ SHA384withRSA T} T{ T}@T{ > 7680 T}@T{ SHA512withRSA T} T{ EC T}@T{ < 512 T}@T{ SHA384withECDSA T} T{ T}@T{ >= 512 T}@T{ SHA512withECDSA T} T{ RSASSA\-PSS T}@T{ < 624 T}@T{ RSASSA\-PSS (with SHA\-256, key size is too small for T} T{ T}@T{ T}@T{ using SHA\-384) T} T{ T}@T{ <= 7680 T}@T{ RSASSA\-PSS (with SHA\-384) T} T{ T}@T{ > 7680 T}@T{ RSASSA\-PSS (with SHA\-512) T} T{ EdDSA T}@T{ 255 T}@T{ Ed25519 T} T{ T}@T{ 448 T}@T{ Ed448 T} T{ Ed25519 T}@T{ 255 T}@T{ Ed25519 T} T{ Ed448 T}@T{ 448 T}@T{ Ed448 T} .TE .IP \(bu 2 اندازه کلید که بر حسب بیت سنجیده می‌شود، متناظر با اندازه کلید خصوصی است. این اندازه توسط مقدار گزینه \f[CR]\-keysize\f[R] یا \f[CR]\-groupname\f[R] یا مقدار مشتق‌شده از تنظیمات پیش‌فرض تعیین می‌شود. .IP \(bu 2 یک الگوریتم امضای RSASSA-PSS از یک الگوریتم \f[CR]MessageDigest\f[R] به عنوان الگوریتم‌های درهم‌سازی (Hash) و MGF1 خود استفاده می‌کند. .IP \(bu 2 اگر هیچ مقدار پیش‌فرضی برای \f[CR]\-keysize\f[R] یا \f[CR]\-groupname\f[R] برای یک الگوریتم تعریف نشده باشد، ارائه‌دهنده امنیت یک تنظیم پیش‌فرض را انتخاب خواهد کرد. .PP \f[B]نکته:\f[R] .PP به منظور بهبود امنیت آماده‌به‌کار، نام‌های پیش‌فرض اندازه کلید، نام گروه و الگوریتم امضا به طور دوره‌ای در هر نسخه JDK به مقادیر قوی‌تر ارتقا می‌یابند. اگر تعامل‌پذیری با نسخه‌های قدیمی‌تر JDK اهمیت دارد، اطمینان حاصل کنید که مقادیر پیش‌فرض توسط آن نسخه‌ها پشتیبانی می‌شوند. همچنین می‌توانید از گزینه‌های \f[CR]\-keysize\f[R]، \f[CR]\-groupname\f[R] یا \f[CR]\-sigalg\f[R] برای بازنویسی مقادیر پیش‌فرض با مسئولیت خود استفاده کنید. .SH "پسوندهای نام‌دار پشتیبانی‌شده (SUPPORTED NAMED EXTENSIONS)" دستور \f[CR]keytool\f[R] از این پسوندهای نام‌دار پشتیبانی می‌کند. نام‌ها به بزرگی و کوچکی حروف حساس نیستند. .TP \f[CR]BC\f[R] یا \f[CR]BasicConstraints\f[R] مقادیر: .RS شکل کامل آن \f[CR]ca:\f[R]{\f[CR]true\f[R]|\f[CR]false\f[R]}[\f[CR],pathlen:\f[R]\f[I]len\f[R]] یا \f[I]len\f[R] است که شکل کوتاه‌شده \f[CR]ca:true,pathlen:\f[R]\f[I]len\f[R] می‌باشد. هنگامی که \f[I]len\f[R] حذف شود، مقدار حاصل برابر با \f[CR]ca:true\f[R] خواهد بود. .RE .TP \f[CR]KU\f[R] یا \f[CR]KeyUsage\f[R] مقادیر: .RS \f[I]usage\f[R](\f[CR],\f[R] \f[I]usage\f[R])* .PP مقدار \f[I]usage\f[R] می‌تواند یکی از موارد زیر باشد: .IP \(bu 2 \f[CR]digitalSignature\f[R] .IP \(bu 2 \f[CR]nonRepudiation\f[R] (\f[CR]contentCommitment\f[R]) .IP \(bu 2 \f[CR]keyEncipherment\f[R] .IP \(bu 2 \f[CR]dataEncipherment\f[R] .IP \(bu 2 \f[CR]keyAgreement\f[R] .IP \(bu 2 \f[CR]keyCertSign\f[R] .IP \(bu 2 \f[CR]cRLSign\f[R] .IP \(bu 2 \f[CR]encipherOnly\f[R] .IP \(bu 2 \f[CR]decipherOnly\f[R] .PP به شرط عدم وجود ابهام، آرگومان \f[I]usage\f[R] می‌تواند با چند حرف اول مخفف شود (مانند \f[CR]dig\f[R] برای \f[CR]digitalSignature\f[R]) یا با سبک شتری (مانند \f[CR]dS\f[R] برای \f[CR]digitalSignature\f[R] یا \f[CR]cRLS\f[R] برای \f[CR]cRLSign\f[R]). مقادیر \f[I]usage\f[R] به بزرگی و کوچکی حروف حساس هستند. .RE .TP \f[CR]EKU\f[R] یا \f[CR]ExtendedKeyUsage\f[R] مقادیر: .RS \f[I]usage\f[R](\f[CR],\f[R] \f[I]usage\f[R])* .PP مقدار \f[I]usage\f[R] می‌تواند یکی از موارد زیر باشد: .IP \(bu 2 \f[CR]anyExtendedKeyUsage\f[R] .IP \(bu 2 \f[CR]serverAuth\f[R] .IP \(bu 2 \f[CR]clientAuth\f[R] .IP \(bu 2 \f[CR]codeSigning\f[R] .IP \(bu 2 \f[CR]emailProtection\f[R] .IP \(bu 2 \f[CR]timeStamping\f[R] .IP \(bu 2 \f[CR]OCSPSigning\f[R] .IP \(bu 2 هر رشته شناسه شیء (OID) .PP به شرط عدم وجود ابهام، آرگومان \f[I]usage\f[R] می‌تواند با چند حرف اول یا سبک شتری مخفف شود. مقادیر \f[I]usage\f[R] به بزرگی و کوچکی حروف حساس هستند. .RE .TP \f[CR]SAN\f[R] یا \f[CR]SubjectAlternativeName\f[R] مقادیر: .RS \f[I]type\f[R]\f[CR]:\f[R]\f[I]value\f[R](\f[CR],\f[R] \f[I]type\f[R]\f[CR]:\f[R]\f[I]value\f[R])* .PP مقدار \f[I]type\f[R] می‌تواند یکی از موارد زیر باشد: .IP \(bu 2 \f[CR]EMAIL\f[R] .IP \(bu 2 \f[CR]URI\f[R] .IP \(bu 2 \f[CR]DNS\f[R] .IP \(bu 2 \f[CR]IP\f[R] .IP \(bu 2 \f[CR]OID\f[R] .PP آرگومان \f[I]value\f[R] مقدار با قالب رشته‌ای برای آن \f[I]type\f[R] است. .RE .TP \f[CR]IAN\f[R] یا \f[CR]IssuerAlternativeName\f[R] مقادیر: .RS همانند \f[CR]SAN\f[R] یا \f[CR]SubjectAlternativeName\f[R]. .RE .TP \f[CR]SIA\f[R] یا \f[CR]SubjectInfoAccess\f[R] مقادیر: .RS \f[I]method\f[R]\f[CR]:\f[R]\f[I]location\-type\f[R]\f[CR]:\f[R]\f[I]location\-value\f[R](\f[CR],\f[R] \f[I]method\f[R]\f[CR]:\f[R]\f[I]location\-type\f[R]\f[CR]:\f[R]\f[I]location\-value\f[R])* .PP مقدار \f[I]method\f[R] می‌تواند یکی از موارد زیر باشد: .IP \(bu 2 \f[CR]timeStamping\f[R] .IP \(bu 2 \f[CR]caRepository\f[R] .IP \(bu 2 هر OID .PP آرگومان‌های \f[I]location\-type\f[R] و \f[I]location\-value\f[R] می‌توانند هر \f[I]type\f[R]\f[CR]:\f[R]\f[I]value\f[R] پشتیبانی‌شده توسط پسوند \f[CR]SubjectAlternativeName\f[R] باشند. .RE .TP \f[CR]AIA\f[R] یا \f[CR]AuthorityInfoAccess\f[R] مقادیر: .RS همانند \f[CR]SIA\f[R] یا \f[CR]SubjectInfoAccess\f[R]. .PP آرگومان \f[I]method\f[R] می‌تواند یکی از موارد زیر باشد: .IP \(bu 2 \f[CR]ocsp\f[R] .IP \(bu 2 \f[CR]caIssuers\f[R] .IP \(bu 2 هر OID .RE .PP هنگامی که \f[I]name\f[R] برابر با OID باشد، مقدار آن کدگذاری هگزادسیمال DER مربوط به \f[CR]extnValue\f[R] برای پسوند بدون نوع OCTET STRING و بایت‌های طول خواهد بود. به جز اعداد هگزادسیمال استاندارد (0\-9, a\-f, A\-F)، هرگونه نویسه اضافی در رشته هگز نادیده گرفته می‌شود. بنابراین هر دو مقدار 01:02:03:04 و 01020304 یکسان در نظر گرفته می‌شوند. هنگامی که مقداری وجود نداشته باشد، پسوند دارای فیلد مقدار خالی خواهد بود. .PP نام ویژه \f[CR]honored\f[R] که تنها در \f[CR]\-gencert\f[R] استفاده می‌شود، نحوه رفتار با پسوندهای گنجانده‌شده در درخواست گواهی را مشخص می‌کند. مقدار این نام یک فهرست جداشده با کاما از موارد \f[CR]all\f[R] (پذیرش تمام پسوندهای درخواستی)، \f[I]name\f[R]{\f[CR]:\f[R][\f[CR]critical\f[R]|\f[CR]non\-critical\f[R]]} (پذیرش پسوند نام‌برده با ویژگی \f[CR]isCritical\f[R] متفاوت) و \f[CR]\-name\f[R] (همراه با \f[CR]all\f[R] برای استثنا کردن) است. پسوندهای درخواستی به طور پیش‌فرض پذیرفته نمی‌شوند. .PP اگر علاوه بر گزینه \f[CR]\-ext honored\f[R]، گزینه \f[CR]\-ext\f[R] نام‌دار یا OID دیگری ارائه شود، این پسوند به پسوندهای پذیرفته‌شده قبلی اضافه می‌شود. اما اگر این نام (یا OID) در مقدار honored نیز ظاهر شود، مقدار و ویژگی بحرانی بودن آن، موارد موجود در درخواست را بازنویسی خواهد کرد. اگر پسوندی از همان نوع چندین بار از طریق نام یا OID ارائه شود، تنها آخرین پسوند استفاده خواهد شد. .PP پسوند \f[CR]subjectKeyIdentifier\f[R] همیشه ایجاد می‌شود. برای گواهی‌های غیرخودامضاشده، پسوند \f[CR]authorityKeyIdentifier\f[R] ایجاد می‌گردد. .PP \f[B]هشدار:\f[R] .PP کاربران باید آگاه باشند که برخی ترکیبات پسوندها (و سایر فیلدهای گواهی) ممکن است با استانداردهای اینترنت منطبق نباشند. بخش \f[B]هشدار انطباق گواهی\f[R] را ببینید. .SH "مثال‌هایی از مراحل ایجاد انبار کلید (EXAMPLES OF TASKS IN CREATING A KEYSTORE)" مثال‌های زیر توالی اقدامات در ایجاد یک انبار کلید برای مدیریت جفت‌کلیدهای عمومی/خصوصی و گواهی‌های دریافت شده از هویت‌های مورد اعتماد را شرح می‌دهند: .IP \(bu 2 \f[B]تولید جفت‌کلید\f[R] .IP \(bu 2 \f[B]درخواست گواهی امضاشده از مرجع صدور گواهی (CA)\f[R] .IP \(bu 2 \f[B]وارد کردن گواهی مرجع صدور (CA)\f[R] .IP \(bu 2 \f[B]وارد کردن پاسخ گواهی از مرجع صدور (CA)\f[R] .IP \(bu 2 \f[B]صدور گواهی تأییدکننده کلید عمومی\f[R] .IP \(bu 2 \f[B]وارد کردن انبار کلید\f[R] .IP \(bu 2 \f[B]تولید گواهی‌ها برای یک سرور SSL\f[R] .SH "تولید جفت‌کلید (GENERATING THE KEY PAIR)" ابتدا یک انبار کلید ایجاد کرده و سپس جفت‌کلید را تولید کنید. .PP می‌توانید دستور را به صورت یک خط واحد مانند زیر وارد کنید: .RS .PP \f[CR]keytool \-genkeypair \-dname "cn=myname, ou=mygroup, o=mycompany, c=mycountry" \-alias business \-keyalg rsa \-keypass\f[R] \f[I]password\f[R] \f[CR]\-keystore /working/mykeystore \-storepass password \-validity 180\f[R] .RE .PP این دستور انبار کلیدی به نام \f[CR]mykeystore\f[R] در دایرکتوری جاری کاری ایجاد می‌کند (به شرطی که از قبل وجود نداشته باشد) و گذرواژه مشخص‌شده با \f[CR]\-keypass\f[R] را به آن اختصاص می‌دهد. این دستور یک جفت‌کلید عمومی/خصوصی برای هویتی که نام متمایز آن \f[CR]myname\f[R]، \f[CR]mygroup\f[R]، \f[CR]mycompany\f[R] و کد کشور دوحرفی \f[CR]mycountry\f[R] است تولید می‌کند. این دستور از الگوریتم تولید کلید RSA برای ایجاد کلیدها استفاده می‌کند؛ اندازه هر دو کلید 3072 بیت است. .PP دستور از الگوریتم امضای پیش‌فرض SHA384withRSA برای ایجاد یک گواهی خودامضاشده استفاده می‌کند که شامل کلید عمومی و اطلاعات نام متمایز است. گواهی برای مدت ۱۸۰ روز معتبر است و در یک مدخل انبار کلید با نام مستعار \f[CR]\-alias business\f[R] با کلید خصوصی مرتبط می‌شود. به کلید خصوصی گذرواژه مشخص‌شده با \f[CR]\-keypass\f[R] اختصاص می‌یابد. .PP در صورت پذیرش مقادیر پیش‌فرض گزینه‌ها، دستور بسیار کوتاه‌تر خواهد بود. در این حالت، تنها گزینه \f[CR]\-keyalg\f[R] الزامی است و برای گزینه‌های نامشخص از مقادیر پیش‌فرض استفاده می‌شود. مقادیر الزامی از شما پرسیده خواهند شد: .RS .PP \f[CR]keytool \-genkeypair \-keyalg rsa\f[R] .RE .PP در این حالت، یک مدخل انبار کلید با نام مستعار \f[CR]mykey\f[R] به همراه یک جفت‌کلید جدید و گواهی با اعتبار ۹۰ روز ایجاد می‌شود. این مدخل در دایرکتوری خانگی شما در انبار کلیدی به نام \f[CR].keystore\f[R] قرار می‌گیرد. فایل \f[CR].keystore\f[R] در صورت عدم وجود ایجاد می‌شود. اطلاعات نام متمایز، گذرواژه انبار کلید و گذرواژه کلید خصوصی از شما درخواست خواهد شد. .PP \f[B]نکته:\f[R] .PP سایر مثال‌ها فرض می‌کنند که به اعلان‌ها با مقادیری برابر با مقادیر مشخص‌شده در اولین دستور \f[CR]\-genkeypair\f[R] پاسخ داده‌اید. برای مثال، نام متمایز: \f[CR]cn=\f[R]\f[I]myname\f[R]\f[CR], ou=\f[R]\f[I]mygroup\f[R]\f[CR], o=\f[R]\f[I]mycompany\f[R]\f[CR], c=\f[R]\f[I]mycountry\f[R]. .SH "درخواست گواهی امضاشده از مرجع صدور گواهی (CA) (REQUESTING A SIGNED CERTIFICATE FROM A CA)" \f[B]نکته:\f[R] .PP تولید جفت‌کلید یک گواهی خودامضاشده ایجاد کرد؛ با این حال، هنگامی که گواهی توسط یک مرجع CA امضا شود، احتمال اعتماد دیگران به آن بسیار بیشتر است. .PP برای دریافت امضای مرجع CA، مراحل زیر را طی کنید: .IP "1." 3 تولید یک CSR: .RS 4 .RS .PP \f[CR]keytool \-certreq \-file myname.csr\f[R] .RE .PP این دستور یک CSR برای هویتی که با نام مستعار پیش‌فرض \f[CR]mykey\f[R] مشخص شده ایجاد می‌کند و درخواست را در فایلی به نام \f[CR]myname.csr\f[R] قرار می‌دهد. .RE .IP "2." 3 ارسال \f[CR]myname.csr\f[R] به یک مرجع CA مانند DigiCert. .PP مرجع CA شما (درخواست‌کننده) را معمولاً به صورت برون‌خط احراز هویت کرده و یک گواهی امضاشده توسط خود را بازمی‌گرداند که کلید عمومی شما را احراز هویت می‌کند. در برخی موارد، CA زنجیره‌ای از گواهی‌ها را بازمی‌گرداند که هر یک کلید عمومی امضاکننده گواهی قبلی در زنجیره را احراز هویت می‌کنند. .SH "وارد کردن گواهی مرجع صدور (CA) (IMPORTING A CERTIFICATE FOR THE CA)" برای وارد کردن یک گواهی برای مرجع CA، مراحل زیر را طی کنید: .IP "1." 3 پیش از وارد کردن پاسخ گواهی از یک CA، به یک یا چند گواهی مورد اعتماد در انبار کلید خود یا در فایل انبار کلید \f[CR]cacerts\f[R] نیاز دارید. بخش \f[CR]\-importcert\f[R] را در \f[B]دستورات\f[R] ببینید. .RS 4 .IP \(bu 2 اگر پاسخ گواهی یک زنجیره گواهی باشد، به بالاترین گواهی زنجیره نیاز دارید؛ یعنی گواهی ریشه CA که کلید عمومی مرجع CA را احراز هویت می‌کند. .IP \(bu 2 اگر پاسخ گواهی یک گواهی منفرد باشد، به گواهی مرجع صادرکننده CA (همان که آن را امضا کرده) نیاز دارید. اگر آن گواهی خودامضاشده نباشد، به گواهی امضاکننده آن نیاز خواهید داشت و به همین ترتیب تا یک گواهی ریشه CA خودامضاشده. .PP انبار کلید \f[CR]cacerts\f[R] با مجموعه‌ای از گواهی‌های ریشه صادرشده توسط مراجع CA تحت \f[B]برنامه گواهی ریشه اوراکل جاوا\f[R] [https://www.oracle.com/java/technologies/javase/carootcertsprogram.html] ارائه می‌شود. اگر درخواست گواهی امضاشده‌ای به یک CA داده‌اید و گواهی تأییدکننده کلید عمومی آن CA به \f[CR]cacerts\f[R] اضافه نشده باشد، باید گواهی آن CA را به عنوان گواهی مورد اعتماد وارد کنید. .PP گواهی یک CA معمولاً خودامضاشده است یا توسط یک CA دیگر امضا شده است. اگر توسط CA دیگری امضا شده باشد، به گواهی تأییدکننده کلید عمومی آن CA نیاز دارید. .PP برای مثال، فرض کنید فایلی به نام \f[I]X\f[R]\f[CR].cer\f[R] از یک شرکت مرجع CA دریافت کرده‌اید و قرار است این فایل یک گواهی خودامضاشده باشد که کلید عمومی آن CA را احراز هویت می‌کند. پیش از وارد کردن آن به عنوان گواهی مورد اعتماد، باید از معتبر بودن آن از طریق زیر اطمینان حاصل کنید: .IP "1." 3 مشاهده آن با دستور \f[CR]keytool \-printcert\f[R] یا دستور \f[CR]keytool \-importcert\f[R] بدون استفاده از گزینه \f[CR]\-noprompt\f[R]. اطمینان حاصل کنید که اثرانگشت‌های نمایش‌داده‌شده گواهی با اثرانگشت‌های مورد انتظار مطابقت دارند. .IP "2." 3 تماس با فرد یا سازمانی که گواهی را ارسال کرده و مقایسه اثرانگشت‌های مشاهده‌شده با مواردی که آن‌ها ارائه می‌دهند یا در یک مخزن عمومی امن منتشر شده است. .PP تنها در صورت یکسان بودن اثرانگشت‌ها، این اطمینان حاصل می‌شود که گواهی در طول مسیر با گواهی فرد دیگری (مانند گواهی یک مهاجم) جایگزین نشده است. اگر چنین حمله‌ای رخ دهد و گواهی را پیش از وارد کردن بررسی نکرده باشید، به هر چیزی که مهاجم امضا کند اعتماد خواهید کرد. .RE .IP "2." 3 جایگزینی گواهی خودامضاشده با یک زنجیره گواهی که در آن هر گواهی در زنجیره، کلید عمومی امضاکننده گواهی قبلی را تا یک مرجع ریشه CA احراز هویت می‌کند. .RS 4 .PP اگر به معتبر بودن گواهی اعتماد دارید، می‌توانید با اجرای دستور زیر آن را به انبار کلید خود اضافه کنید: .RS .PP \f[CR]keytool \-importcert \-alias\f[R] \f[I]alias\f[R] \f[CR]\-file X.cer\f[R] .RE .PP این دستور یک مدخل گواهی مورد اعتماد در انبار کلید بر اساس داده‌های فایل گواهی CA ایجاد می‌کند و مقادیر \f[I]alias\f[R] را به آن مدخل اختصاص می‌دهد. .RE .SH "وارد کردن پاسخ گواهی از مرجع صدور (CA) (IMPORTING THE CERTIFICATE REPLY FROM THE CA)" پس از وارد کردن گواهی تأییدکننده کلید عمومی مرجع CA که درخواست امضای گواهی خود را به آن ارسال کرده‌اید (یا وجود چنین گواهی‌ای از قبل در فایل \f[CR]cacerts\f[R])، می‌توانید پاسخ گواهی را وارد کرده و گواهی خودامضاشده خود را با یک زنجیره گواهی جایگزین کنید. .PP زنجیره گواهی یکی از موارد زیر خواهد بود: .IP \(bu 2 توسط CA بازگردانده شده باشد هنگامی که پاسخ CA یک زنجیره باشد. .IP \(bu 2 هنگامی که پاسخ CA یک گواهی منفرد باشد، ساخته شود. این زنجیره گواهی با استفاده از پاسخ گواهی و گواهی‌های مورد اعتماد موجود در انبار کلیدی که پاسخ را در آن وارد می‌کنید یا فایل انبار کلید \f[CR]cacerts\f[R] ساخته می‌شود. .PP برای مثال، اگر درخواست امضای گواهی خود را به DigiCert ارسال کرده‌اید، می‌توانید با وارد کردن دستور زیر پاسخ آن‌ها را وارد کنید: .PP \f[B]نکته:\f[R] .PP در این مثال، گواهی بازگردانده‌شده \f[CR]DCmyname.cer\f[R] نام دارد: .RS .PP \f[CR]keytool \-importcert \-trustcacerts \-file DCmyname.cer\f[R] .RE .SH "صدور گواهی تأییدکننده کلید عمومی (EXPORTING A CERTIFICATE THAT AUTHENTICATES THE PUBLIC KEY)" \f[B]نکته:\f[R] .PP اگر از دستور \f[CR]jarsigner\f[R] برای امضای یک فایل آرشیو جاوا (JAR) استفاده کرده‌اید، کلاینت‌هایی که از این فایل استفاده می‌کنند می‌خواهند امضای شما را احراز هویت کنند. .PP یکی از راه‌هایی که کلاینت‌ها می‌توانند شما را احراز هویت کنند، وارد کردن گواهی کلید عمومی شما در انبار کلید خود به عنوان یک مدخل مورد اعتماد است. سپس می‌توانید گواهی را صادر کرده و در اختیار کلاینت‌های خود قرار دهید. .PP برای مثال: .IP "1." 3 کپی کردن گواهی خود در فایلی به نام \f[CR]myname.cer\f[R] با وارد کردن دستور زیر: .RS 4 .PP \f[B]نکته:\f[R] .PP در این مثال، مدخل دارای نام مستعار \f[CR]mykey\f[R] است: .RS .PP \f[CR]keytool \-exportcert \-alias mykey \-file myname.cer\f[R] .RE .RE .IP "2." 3 با داشتن گواهی و فایل JAR امضاشده، یک کلاینت می‌تواند از دستور \f[CR]jarsigner\f[R] برای احراز هویت امضای شما استفاده کند. .SH "وارد کردن انبار کلید (IMPORTING THE KEYSTORE)" از دستور \f[CR]importkeystore\f[R] برای وارد کردن یک انبار کلید کامل به یک انبار کلید دیگر استفاده کنید. این کار تمام مدخل‌های انبار کلید مبدأ شامل کلیدها و گواهی‌ها را با یک دستور واحد به انبار کلید مقصد وارد می‌کند. می‌توانید از این دستور برای وارد کردن مدخل‌ها از نوع متفاوتی از انبار کلید استفاده کنید. در طول فرآیند وارد کردن، تمام مدخل‌های جدید در انبار کلید مقصد دارای نام‌های مستعار و گذرواژه‌های حفاظتی یکسان (برای کلیدهای مخفی و کلیدهای خصوصی) خواهند بود. اگر دستور \f[CR]keytool\f[R] نتواند کلیدهای خصوصی یا کلیدهای مخفی را از انبار کلید مبدأ بازیابی کند، گذرواژه را از شما درخواست خواهد کرد. اگر نام مستعار تکراری شناسایی شود، نام مستعار جدیدی از شما درخواست می‌شود و می‌توانید یک نام مستعار جدید مشخص کنید یا به دستور \f[CR]keytool\f[R] اجازه دهید مدخل موجود را رونویسی کند. .PP برای مثال، وارد کردن مدخل‌ها از یک انبار کلید معمولی نوع JKS به نام \f[CR]key.jks\f[R] به یک انبار کلید مبتنی بر سخت‌افزار از نوع PKCS #11 با دستور زیر انجام می‌شود: .RS .PP \f[CR]keytool \-importkeystore \-srckeystore key.jks \-destkeystore NONE \-srcstoretype JKS \-deststoretype PKCS11 \-srcstorepass\f[R] \f[I]password\f[R] \f[CR]\-deststorepass\f[R] \f[I]password\f[R] .RE .PP دستور \f[CR]importkeystore\f[R] همچنین می‌تواند برای وارد کردن یک مدخل منفرد از انبار کلید مبدأ به انبار کلید مقصد استفاده شود. در این حالت، علاوه بر گزینه‌های استفاده‌شده در مثال قبل، باید نام مستعاری را که می‌خواهید وارد کنید مشخص نمایید. با تعیین گزینه \f[CR]\-srcalias\f[R]، می‌توانید نام مستعار مقصد، گذرواژه محافظت از کلید مخفی یا خصوصی و گذرواژه محافظت مقصد مورد نظر را به شرح زیر مشخص کنید: .RS .PP \f[CR]keytool \-importkeystore \-srckeystore key.jks \-destkeystore NONE \-srcstoretype JKS \-deststoretype PKCS11 \-srcstorepass\f[R] \f[I]password\f[R] \f[CR]\-deststorepass\f[R] \f[I]password\f[R] \f[CR]\-srcalias myprivatekey \-destalias myoldprivatekey \-srckeypass\f[R] \f[I]password\f[R] \f[CR]\-destkeypass\f[R] \f[I]password\f[R] \f[CR]\-noprompt\f[R] .RE .SH "تولید گواهی‌ها برای یک سرور SSL (GENERATING CERTIFICATES FOR AN SSL SERVER)" دستورات \f[CR]keytool\f[R] زیر برای تولید جفت‌کلیدها و گواهی‌ها برای سه هویت استفاده می‌شوند: .IP \(bu 2 مرجع ریشه CA (\f[CR]root\f[R]) .IP \(bu 2 مرجع میانی CA (\f[CR]ca\f[R]) .IP \(bu 2 سرور SSL (\f[CR]server\f[R]) .PP اطمینان حاصل کنید که تمام گواهی‌ها را در یک انبار کلید یکسان ذخیره می‌کنید. .IP .EX keytool \-genkeypair \-keystore root.jks \-alias root \-ext bc:c \-keyalg rsa keytool \-genkeypair \-keystore ca.jks \-alias ca \-ext bc:c \-keyalg rsa keytool \-genkeypair \-keystore server.jks \-alias server \-keyalg rsa keytool \-keystore root.jks \-alias root \-exportcert \-rfc > root.pem keytool \-storepass password \-keystore ca.jks \-certreq \-alias ca | keytool \-storepass password \-keystore root.jks \-gencert \-alias root \-ext BC=0 \-rfc > ca.pem keytool \-keystore ca.jks \-importcert \-alias ca \-file ca.pem keytool \-storepass password \-keystore server.jks \-certreq \-alias server | keytool \-storepass password \-keystore ca.jks \-gencert \-alias ca \-ext ku:c=dig,kE \-rfc > server.pem cat root.pem ca.pem server.pem | keytool \-keystore server.jks \-importcert \-alias server .EE .SH "اصطلاحات (TERMS)" .TP انبار کلید (Keystore) انبار کلید مکانی برای ذخیره‌سازی کلیدهای رمزنگاری و گواهی‌ها است. .TP مدخل‌های انبار کلید (Keystore entries) انبارهای کلید می‌توانند انواع متفاوتی از مدخل‌ها را در خود جای دهند. دو نوع مدخل پرکاربرد برای دستور \f[CR]keytool\f[R] شامل موارد زیر است: .RS مدخل‌های کلید (Key entries): هر مدخل حاوی اطلاعات بسیار حساس کلیدهای رمزنگاری است که در یک قالب محافظت‌شده برای جلوگیری از دسترسی‌های غیرمجاز ذخیره می‌شود. معمولاً کلیدی که در این نوع مدخل ذخیره می‌شود یک کلید مخفی است، یا یک کلید خصوصی به همراه زنجیره گواهی برای کلید عمومی متناظر. بخش \f[B]زنجیره‌های گواهی\f[R] را ببینید. دستور \f[CR]keytool\f[R] می‌تواند هر دو نوع مدخل را مدیریت کند، در حالی که ابزار \f[CR]jarsigner\f[R] تنها نوع دوم یعنی کلیدهای خصوصی و زنجیره گواهی مرتبط با آن‌ها را مدیریت می‌کند. .PP مدخل‌های گواهی مورد اعتماد (Trusted certificate entries): هر مدخل شامل یک گواهی کلید عمومی منفرد متعلق به یک طرف دیگر است. این مدخل گواهی مورد اعتماد نامیده می‌شود زیرا مالک انبار کلید اطمینان دارد که کلید عمومی موجود در گواهی متعلق به همان هویتی است که با موضوع (مالک) گواهی مشخص شده است. صادرکننده گواهی با امضای دیجیتال گواهی این موضوع را تضمین می‌کند. .RE .TP نام‌های مستعار انبار کلید (Keystore aliases) تمام مدخل‌های انبار کلید (مدخل‌های کلید و گواهی‌های مورد اعتماد) از طریق نام‌های مستعار (alias) منحصربه‌فرد در دسترس قرار می‌گیرند. .RS یک نام مستعار زمانی مشخص می‌شود که شما هویتی را با دستور \f[CR]\-genseckey\f[R] برای تولید کلید مخفی، دستور \f[CR]\-genkeypair\f[R] برای تولید جفت‌کلید (کلید عمومی و خصوصی) یا دستور \f[CR]\-importcert\f[R] برای افزودن گواهی یا زنجیره گواهی به فهرست گواهی‌های مورد اعتماد به انبار کلید اضافه می‌کنید. دستورات بعدی \f[CR]keytool\f[R] باید از همین نام مستعار برای ارجاع به آن هویت استفاده کنند. برای مثال، می‌توانید از نام مستعار \f[CR]duke\f[R] برای تولید یک جفت‌کلید عمومی/خصوصی جدید و قرار دادن کلید عمومی در یک گواهی خودامضاشده با دستور زیر استفاده کنید. بخش \f[B]زنجیره‌های گواهی\f[R] را ببینید. .RS .PP \f[CR]keytool \-genkeypair \-alias duke \-keyalg rsa \-keypass\f[R] \f[I]passwd\f[R] .RE .PP این مثال یک گذرواژه اولیه \f[I]passwd\f[R] را تعیین می‌کند که دستورات بعدی برای دسترسی به کلید خصوصی مرتبط با نام مستعار \f[CR]duke\f[R] به آن نیاز خواهند داشت. اگر بعداً بخواهید گذرواژه کلید خصوصی Duke را تغییر دهید، از دستوری مانند زیر استفاده کنید: .RS .PP \f[CR]keytool \-keypasswd \-alias duke \-keypass\f[R] \f[I]passwd\f[R] \f[CR]\-new\f[R] \f[I]newpasswd\f[R] .RE .PP این دستور گذرواژه اولیه \f[I]passwd\f[R] را به \f[I]newpasswd\f[R] تغییر می‌دهد. گذرواژه نباید در خط فرمان یا اسکریپت‌ها مشخص شود مگر اینکه برای اهداف آزمایشی باشد یا روی یک سیستم امن قرار داشته باشید. اگر یک گزینه گذرواژه الزامی را در خط فرمان مشخص نکنید، از شما درخواست خواهد شد. .RE .TP پیاده‌سازی انبار کلید (Keystore implementation) کلاس \f[CR]KeyStore\f[R] موجود در بسته \f[CR]java.security\f[R] رابط‌های مشخصی برای دسترسی و اصلاح اطلاعات موجود در انبار کلید فراهم می‌کند. امکان وجود چندین پیاده‌سازی عینی متفاوت وجود دارد که هر پیاده‌سازی مربوط به نوع خاصی از انبار کلید است. .RS در حال حاضر دو ابزار خط فرمان (\f[CR]keytool\f[R] و \f[CR]jarsigner\f[R]) از پیاده‌سازی‌های انبار کلید استفاده می‌کنند. از آنجا که کلاس \f[CR]KeyStore\f[R] عمومی (\f[CR]public\f[R]) است، کاربران می‌توانند برنامه‌های امنیتی دیگری بنویسند که از آن استفاده کنند. در JDK 9 و نسخه‌های پس از آن، پیاده‌سازی پیش‌فرض انبار کلید \f[CR]PKCS12\f[R] است. این یک انبار کلید چندسکویی مبتنی بر استاندارد نحوی تبادل اطلاعات شخصی RSA PKCS12 است. این استاندارد اصولاً برای ذخیره‌سازی یا انتقال کلیدهای خصوصی، گواهی‌ها و اسرار گوناگون کاربر در نظر گرفته شده است. یک پیاده‌سازی توکار دیگر نیز وجود دارد که توسط اوراکل ارائه شده است. این پیاده‌سازی انبار کلید را به صورت یک فایل با نوع (قالب) اختصاصی به نام \f[CR]JKS\f[R] پیاده‌سازی می‌کند. این فرمت از هر کلید خصوصی با گذرواژه اختصاصی آن محافظت کرده و همچنین یکپارچگی کل انبار کلید را با یک گذرواژه (احتمالاً متفاوت) محافظت می‌کند. پیاده‌سازی‌های انبار کلید مبتنی بر ارائه‌دهنده (Provider) هستند. به طور دقیق‌تر، رابط‌های برنامه‌نویسی ارائه‌شده توسط \f[CR]KeyStore\f[R] بر اساس رابط ارائه‌دهنده خدمات (SPI) پیاده‌سازی شده‌اند. یعنی یک کلاس انتزاعی متناظر \f[CR]KeystoreSpi\f[R] در بسته \f[CR]java.security\f[R] وجود دارد که متدهای SPI را که ارائه‌دهندگان باید پیاده‌سازی کنند تعریف می‌کند. اصطلاح \f[I]ارائه‌دهنده\f[R] (Provider) به یک بسته یا مجموعه‌ای از بسته‌ها اشاره دارد که پیاده‌سازی عینی زیرمجموعه‌ای از سرویس‌های قابل دسترس توسط رابط برنامه‌نویسی امنیت جاوا را فراهم می‌کنند. برای ارائه یک پیاده‌سازی انبار کلید، کلاینت‌ها باید یک ارائه‌دهنده پیاده‌سازی کرده و زیرکلاسی از \f[CR]KeystoreSpi\f[R] ارائه دهند. برنامه‌ها می‌توانند انواع مختلفی از پیاده‌سازی‌های انبار کلید را از ارائه‌دهندگان مختلف با استفاده از متد سازنده \f[CR]getInstance\f[R] موجود در کلاس \f[CR]KeyStore\f[R] انتخاب کنند. یک نوع انبار کلید، قالب ذخیره‌سازی و داده‌ای اطلاعات انبار کلید و الگوریتم‌های مورد استفاده برای محافظت از کلیدهای خصوصی/مخفی و یکپارچگی انبار کلید را تعیین می‌کند. پیاده‌سازی‌های انبارهای کلید از انواع مختلف با یکدیگر سازگار نیستند. دستور \f[CR]keytool\f[R] روی هر پیاده‌سازی انبار کلید مبتنی بر فایل کار می‌کند. این دستور مسیر انبار کلید را که در خط فرمان به آن ارسال شده به عنوان نام فایل در نظر گرفته و آن را به یک \f[CR]FileInputStream\f[R] تبدیل می‌کند تا اطلاعات انبار کلید را بارگیری کند. دستورات \f[CR]jarsigner\f[R] می‌توانند یک انبار کلید را از هر مکانی که با نشانی URL مشخص شود بخوانند. برای \f[CR]keytool\f[R] و \f[CR]jarsigner\f[R]، می‌توانید نوع انبار کلید را در خط فرمان با گزینه \f[CR]\-storetype\f[R] مشخص کنید. اگر نوع انبار کلید را صراحتاً تعیین نکنید، این ابزارها پیاده‌سازی انبار کلید را بر اساس مقدار مشخصه \f[CR]keystore.type\f[R] تعریف‌شده در فایل مشخصه‌های امنیتی انتخاب می‌کنند. فایل مشخصه‌های امنیتی \f[CR]java.security\f[R] نام دارد و در دایرکتوری مشخصه‌های امنیتی قرار دارد: .IP \(bu 2 \f[B]لینوکس و مک‌اواس:\f[R] \f[CR]java.home/lib/security\f[R] .IP \(bu 2 \f[B]ویندوز:\f[R] \f[CR]java.home\(rslib\(rssecurity\f[R] .PP هر ابزار مقدار \f[CR]keystore.type\f[R] را دریافت کرده و سپس تمام ارائه‌دهندگان نصب‌شده را بررسی می‌کند تا ارائه‌دهنده‌ای را بیابد که انبار کلیدی از آن نوع را پیاده‌سازی کرده باشد، سپس از پیاده‌سازی آن ارائه‌دهنده استفاده می‌کند. کلاس \f[CR]KeyStore\f[R] یک متد ایستا به نام \f[CR]getDefaultType\f[R] تعریف می‌کند که به برنامه‌ها اجازه می‌دهد مقدار مشخصه \f[CR]keystore.type\f[R] را بازیابی کنند. خط کد زیر یک نمونه از نوع انبار کلید پیش‌فرض را همان‌طور که در مشخصه \f[CR]keystore.type\f[R] تعیین شده ایجاد می‌کند: .RS .PP \f[CR]KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());\f[R] .RE .PP نوع انبار کلید پیش‌فرض \f[CR]pkcs12\f[R] است که یک انبار کلید چندسکویی بر اساس استاندارد نحوی تبادل اطلاعات شخصی RSA PKCS12 است. این مورد با خط زیر در فایل مشخصه‌های امنیتی مشخص شده است: .RS .PP \f[CR]keystore.type=pkcs12\f[R] .RE .PP برای استفاده از یک پیاده‌سازی انبار کلید دیگر به غیر از پیش‌فرض، می‌توانید آن خط را برای مشخص کردن نوع انبار کلید متفاوت ویرایش کنید. برای مثال، اگر می‌خواهید از پیاده‌سازی انبار کلید \f[CR]jks\f[R] اوراکل استفاده کنید، خط را به صورت زیر تغییر دهید: .RS .PP \f[CR]keystore.type=jks\f[R] .RE .PP \f[B]نکته:\f[R] بزرگی و کوچکی حروف در نام‌گذاری نوع انبار کلید اهمیتی ندارد؛ برای مثال \f[CR]JKS\f[R] همانند \f[CR]jks\f[R] در نظر گرفته می‌شود. .RE .TP گواهی (Certificate) یک گواهی (یا گواهی کلید عمومی) بیانیه‌ای با امضای دیجیتال از سوی یک هویت (صادرکننده یا issuer) است که بیان می‌کند کلید عمومی و برخی اطلاعات دیگر هویتی دیگر (موضوع یا subject) دارای مقداری مشخص است. اصطلاحات زیر با گواهی‌ها مرتبط هستند: .RS .IP \(bu 2 کلیدهای عمومی (Public Keys): اعدادی هستند که با یک هویت خاص مرتبط بوده و برای آگاهی تمام کسانی که نیاز به تعاملات مطمئن با آن هویت دارند در نظر گرفته شده‌اند. کلیدهای عمومی برای بررسی و اعتبارسنجی امضاها استفاده می‌شوند. .IP \(bu 2 امضاشده دیجیتالی (Digitally Signed): اگر داده‌هایی به صورت دیجیتالی امضا شوند، همراه با هویت صادرکننده و امضایی ذخیره می‌شوند که اثبات می‌کند آن هویت از داده‌ها آگاهی دارد. داده‌ها با امضا شدن توسط کلید خصوصی هویت، غیرقابل جعل می‌شوند. .IP \(bu 2 هویت (Identity): روشی شناخته‌شده برای نشانی‌دهی یک هویت. در برخی سیستم‌ها هویت همان کلید عمومی است و در برخی دیگر می‌تواند از UID سیستم‌عامل تا آدرس ایمیل یا نام متمایز X.509 متغیر باشد. .IP \(bu 2 امضا (Signature): یک امضا روی داده‌ها با استفاده از کلید خصوصی یک هویت محاسبه می‌شود. امضاکننده در مورد گواهی‌ها با عنوان صادرکننده (Issuer) نیز شناخته می‌شود. .IP \(bu 2 کلیدهای خصوصی (Private Keys): اعدادی هستند که باید تنها برای همان هویتی که کلید خصوصی به آن تعلق دارد شناخته‌شده باشند (یعنی محرمانه نگهداری شوند). کلیدهای خصوصی و عمومی در تمام سیستم‌های رمزنگاری کلید عمومی به صورت جفت وجود دارند. در یک سیستم معمولی رمزنگاری کلید عمومی مانند DSA، هر کلید خصوصی دقیقاً با یک کلید عمومی متناظر است. کلیدهای خصوصی برای محاسبه امضاها استفاده می‌شوند. .IP \(bu 2 موجودیت / هویت (Entity): یک هویت می‌تواند شخص، سازمان، برنامه، رایانه، کسب‌وکار، بانک یا هر چیزی باشد که تا حدی به آن اعتماد دارید. رمزنگاری کلید عمومی نیازمند دسترسی به کلیدهای عمومی کاربران است. در یک محیط شبکه‌ای در مقیاس بزرگ، تضمین برقراری روابط پیشین میان طرف‌های ارتباطی یا وجود یک مخزن مورد اعتماد حاوی تمام کلیدهای عمومی ناممکن است. گواهی‌ها به عنوان راهکاری برای این مشکل توزیع کلید عمومی ابداع شدند. اکنون یک مرجع صدور گواهی (CA) می‌تواند به عنوان شخص ثالث مورد اعتماد عمل کند. مراجع CA سازمان‌ها یا کسب‌وکارهایی هستند که برای امضا و صدور گواهی‌ها برای سایر هویت‌ها مورد اعتماد قرار می‌گیرند. فرض بر این است که مراجع CA تنها گواهی‌های معتبر و قابل اعتماد ایجاد می‌کنند زیرا ملزم به توافق‌نامه‌های قانونی هستند. مراجع صدور گواهی عمومی متعددی مانند DigiCert، Comodo، Entrust و غیره وجود دارند. همچنین می‌توانید مرجع صدور گواهی اختصاصی خود را با استفاده از محصولاتی مانند Microsoft Certificate Server یا محصول Entrust CA برای سازمان خود راه‌اندازی کنید. با دستور \f[CR]keytool\f[R] امکان نمایش، وارد کردن و صدور گواهی‌ها وجود دارد. همچنین امکان تولید گواهی‌های خودامضاشده نیز فراهم است. دستور \f[CR]keytool\f[R] در حال حاضر گواهی‌های X.509 را مدیریت می‌کند. .RE .TP گواهی‌های X.509 (X.509 Certificates) استاندارد X.509 اطلاعاتی را که می‌توانند درون یک گواهی قرار گیرند تعریف کرده و نحوه نگارش آن را (قالب داده) شرح می‌دهد. تمام داده‌های یک گواهی با دو استاندارد مرتبط به نام‌های ASN.1/DER کدگذاری می‌شوند. استاندارد نحوی انتزاعی ۱ (ASN.1) داده‌ها را توصیف می‌کند و قواعد کدگذاری معین (DER) روش واحدی را برای ذخیره و انتقال آن داده‌ها شرح می‌دهد. .RS تمام گواهی‌های X.509 علاوه بر امضا، دارای داده‌های زیر هستند: .IP \(bu 2 نسخه (Version): مشخص می‌کند کدام نسخه از استاندارد X.509 بر این گواهی حاکم است که بر اطلاعات قابل تعیین در آن تأثیر می‌گذارد. تاکنون سه نسخه تعریف شده است. دستور \f[CR]keytool\f[R] می‌تواند گواهی‌های نسخه ۱، ۲ و ۳ را وارد و صادر کند و گواهی‌های نسخه ۳ را تولید می‌کند. .RS 2 .IP \(bu 2 نسخه ۱ استاندارد X.509 از سال ۱۹۸۸ در دسترس بوده، به طور گسترده پیاده‌سازی شده و عمومی‌ترین نسخه است. .IP \(bu 2 نسخه ۲ استاندارد X.509 مفهوم شناسه‌های منحصربه‌فرد موضوع و صادرکننده را برای مدیریت احتمال استفاده مجدد از نام‌های موضوع یا صادرکننده در طول زمان معرفی کرد. اکثر اسناد مشخصات گواهی اکیداً توصیه می‌کنند که نام‌ها مجدداً استفاده نشوند و گواهی‌ها از شناسه‌های منحصربه‌فرد استفاده نکنند. گواهی‌های نسخه ۲ کاربرد گسترده‌ای ندارند. .IP \(bu 2 نسخه ۳ استاندارد X.509 جدیدترین نسخه (۱۹۹۶) است و از مفهوم پسوندها (Extensions) پشتیبانی می‌کند که در آن هر کسی می‌تواند یک پسوند تعریف کرده و آن را در گواهی قرار دهد. برخی از پسوندهای متداول عبارتند از: KeyUsage (محدود کردن استفاده از کلیدها به اهداف خاص مانند \f[CR]signing\-only\f[R]) و AlternativeNames (امکان ارتباط هویت‌های دیگر مانند نام‌های DNS، آدرس‌های ایمیل، آدرس‌های IP با این کلید عمومی). پسوندها می‌توانند به عنوان بحرانی (Critical) علامت‌گذاری شوند تا نشان دهند که پسوند باید حتماً بررسی شده و اعمال گردد. برای مثال، اگر گواهی دارای پسوند KeyUsage به صورت بحرانی و با مقدار \f[CR]keyCertSign\f[R] باشد، هنگامی که این گواهی در طول ارتباطات SSL ارائه شود باید رد شود، زیرا پسوند گواهی نشان می‌دهد که کلید خصوصی مرتبط تنها باید برای امضای گواهی‌ها استفاده شود و نه برای SSL. .RE .IP \(bu 2 شماره سریال (Serial number): هویتی که گواهی را ایجاد کرده موظف است شماره سریالی به آن اختصاص دهد تا آن را از سایر گواهی‌های صادرشده متمایز کند. این اطلاعات در موارد متعددی استفاده می‌شود؛ برای مثال، هنگامی که گواهی باطل می‌شود، شماره سریال آن در فهرست ابطال گواهی (CRL) قرار می‌گیرد. .IP \(bu 2 شناسه الگوریتم امضا (Signature algorithm identifier): الگوریتم مورد استفاده توسط مرجع CA برای امضای گواهی را مشخص می‌کند. .IP \(bu 2 نام صادرکننده (Issuer name): نام متمایز X.500 هویتی که گواهی را امضا کرده است. این هویت معمولاً یک مرجع CA است. استفاده از این گواهی به معنای اعتماد به هویتی است که آن را امضا کرده است. در برخی موارد مانند گواهی‌های ریشه یا مراجع CA سطح بالا، صادرکننده گواهی خود را امضا می‌کند. .IP \(bu 2 دوره اعتبار (Validity period): هر گواهی تنها برای مدت زمان محدودی معتبر است. این دوره با تاریخ و زمان شروع و پایان مشخص می‌شود و می‌تواند از چند ثانیه تا نزدیک به یک قرن متغیر باشد. دوره اعتبار انتخاب‌شده به عوامل مختلفی مانند استحکام کلید خصوصی استفاده‌شده برای امضا یا هزینه‌ای که فرد برای گواهی می‌پردازد بستگی دارد. این دوره، بازه زمانی مورد انتظاری است که هویت‌ها می‌توانند به مقدار عمومی اطمینان کنند مشروط بر اینکه کلید خصوصی به خطر نیفتاده باشد. .IP \(bu 2 نام موضوع (Subject name): نام هویتی که کلید عمومی گواهی متعلق به آن است. این نام از استاندارد X.500 استفاده می‌کند، بنابراین طوری طراحی شده که در سراسر اینترنت یکتا باشد. این نام همان نام متمایز (DN) هویت است؛ برای مثال: .RS 2 .RS .PP \f[CR]CN=Java Duke, OU=Java Software Division, O=Oracle Corporation, C=US\f[R] .RE .PP این موارد به نام عمومی (CN)، واحد سازمانی (OU)، سازمان (O) و کشور (C) موضوع اشاره دارند. .RE .IP \(bu 2 اطلاعات کلید عمومی موضوع (Subject public key information): کلید عمومی هویت نام‌برده به همراه یک شناسه الگوریتم که مشخص می‌کند این کلید متعلق به کدام سیستم رمزنگاری کلید عمومی است و پارامترهای کلید مرتبط. .RE .TP زنجیره‌های گواهی (Certificate Chains) دستور \f[CR]keytool\f[R] می‌تواند مدخل‌های کلید انبار کلید را ایجاد و مدیریت کند که هر یک حاوی یک کلید خصوصی و یک زنجیره گواهی مرتبط هستند. اولین گواهی در زنجیره شامل کلید عمومی متناظر با کلید خصوصی است. .RS هنگامی که کلیدها برای اولین بار تولید می‌شوند، زنجیره معمولاً با یک عضو منفرد یعنی یک گواهی خودامضاشده شروع می‌شود. بخش \f[B]تولید جفت‌کلید\f[R] را در \f[B]دستورات\f[R] ببینید. یک گواهی خودامضاشده گواهی‌ای است که صادرکننده (امضاکننده) آن همان موضوع گواهی است. موضوع هویتی است که کلید عمومی آن توسط گواهی احراز هویت می‌شود. هنگامی که دستور \f[CR]\-genkeypair\f[R] برای تولید یک جفت‌کلید عمومی/خصوصی جدید فراخوانی می‌شود، کلید عمومی را در یک گواهی خودامضاشده نیز قرار می‌دهد (مگر اینکه گزینه \f[CR]\-signer\f[R] مشخص شده باشد). سپس، پس از ایجاد یک درخواست امضای گواهی (CSR) با دستور \f[CR]\-certreq\f[R] و ارسال آن به یک مرجع صدور گواهی (CA)، پاسخ دریافتی از CA با دستور \f[CR]\-importcert\f[R] وارد شده و گواهی خودامضاشده با زنجیره‌ای از گواهی‌ها جایگزین می‌شود. در انتهای زنجیره، گواهی (پاسخ) صادرشده توسط CA قرار دارد که کلید عمومی موضوع را احراز هویت می‌کند. گواهی بعدی در زنجیره، کلید عمومی مرجع CA را احراز هویت می‌کند. در بسیاری از موارد، این گواهی یک گواهی خودامضاشده است که کلید عمومی خود CA را احراز هویت می‌کند و آخرین گواهی در زنجیره خواهد بود. در موارد دیگر، CA ممکن است زنجیره‌ای از گواهی‌ها را بازگرداند. در این حالت، گواهی پایین زنجیره همان است (گواهی امضاشده توسط CA که کلید عمومی مدخل کلید را احراز هویت می‌کند)، اما گواهی دوم در زنجیره گواهی‌ای است که توسط یک CA متفاوت امضا شده و کلید عمومی CA دریافت‌کننده CSR را احراز هویت می‌کند. گواهی بعدی در زنجیره کلید CA دوم را احراز هویت می‌کند و به همین ترتیب تا زمانی که به یک گواهی ریشه خودامضاشده برسد. هر گواهی در زنجیره (پس از اولی) کلید عمومی امضاکننده گواهی قبلی در زنجیره را احراز هویت می‌کند. بسیاری از مراجع CA تنها گواهی صادرشده را بدون زنجیره پشتیبان بازمی‌گردانند، به ویژه زمانی که سلسله‌مراتب مسطح باشد (بدون CAهای میانی). در این حالت، زنجیره گواهی باید از اطلاعات گواهی‌های مورد اعتماد که از قبل در انبار کلید ذخیره شده‌اند تشکیل شود. یک قالب پاسخ متفاوت (تعریف‌شده توسط استاندارد PKCS #7) شامل زنجیره گواهی پشتیبان علاوه بر گواهی صادرشده است. هر دو قالب پاسخ می‌توانند توسط دستور \f[CR]keytool\f[R] مدیریت شوند. گواهی مرجع ریشه (بالاترین سطح) CA خودامضاشده است. با این حال، اعتماد به کلید عمومی ریشه از خود گواهی ریشه حاصل نمی‌شود، بلکه از منابع دیگر مانند روزنامه‌ها به دست می‌آید. زیرا هر کسی می‌تواند یک گواهی خودامضاشده با نام متمایز مرجع ریشه مثلاً DigiCert ایجاد کند. کلید عمومی مرجع ریشه CA به طور گسترده‌ای شناخته شده است. تنها دلیل ذخیره آن در یک گواهی این است که این قالب برای اکثر ابزارها قابل فهم است، بنابراین گواهی در این حالت صرفاً به عنوان وسیله‌ای برای انتقال کلید عمومی ریشه CA استفاده می‌شود. پیش از افزودن گواهی ریشه CA به انبار کلید خود، باید آن را با گزینه \f[CR]\-printcert\f[R] مشاهده کرده و اثرانگشت نمایش‌داده‌شده را با اثرانگشت معتبر به دست آمده از وب‌سایت مرجع ریشه CA و منابع معتبر مقایسه کنید. .RE .TP فایل گواهی‌های cacerts (cacerts Certificates File) یک فایل گواهی به نام \f[CR]cacerts\f[R] در دایرکتوری مشخصه‌های امنیتی قرار دارد: .RS .IP \(bu 2 \f[B]لینوکس و مک‌اواس:\f[R] \f[I]JAVA_HOME\f[R]\f[CR]/lib/security\f[R] .IP \(bu 2 \f[B]ویندوز:\f[R] \f[I]JAVA_HOME\f[R]\f[CR]\(rslib\(rssecurity\f[R] .PP فایل \f[CR]cacerts\f[R] نشان‌دهنده یک انبار کلید در سطح سیستم حاوی گواهی‌های CA است. مدیران سیستم می‌توانند این فایل را با دستور \f[CR]keytool\f[R] و با تعیین \f[CR]jks\f[R] به عنوان نوع انبار کلید پیکربندی و مدیریت کنند. فایل انبار کلید \f[CR]cacerts\f[R] همراه با مجموعه‌ای از گواهی‌های ریشه CA پیش‌فرض عرضه می‌شود. در لینوکس، مک‌اواس و ویندوز می‌توانید گواهی‌های پیش‌فرض را با دستور زیر فهرست کنید: .RS .PP \f[CR]keytool \-list \-cacerts\f[R] .RE .PP گذرواژه اولیه فایل انبار کلید \f[CR]cacerts\f[R] برابر با \f[CR]changeit\f[R] است. مدیران سیستم باید این گذرواژه و مجوز دسترسی پیش‌فرض فایل را پس از نصب SDK تغییر دهند. .PP \f[B]نکته:\f[R] اعتبارسنجی فایل \f[CR]cacerts\f[R] اهمیت زیادی دارد. از آنجا که به مراجع CA موجود در فایل \f[CR]cacerts\f[R] به عنوان هویت‌هایی برای امضا و صدور گواهی‌ها به سایر هویت‌ها اعتماد می‌کنید، باید فایل \f[CR]cacerts\f[R] را با دقت مدیریت کنید. فایل \f[CR]cacerts\f[R] باید تنها شامل گواهی‌های مراجع CA باشد که به آن‌ها اعتماد دارید. بررسی گواهی‌های ریشه CA موجود در فایل \f[CR]cacerts\f[R] و تصمیم‌گیری درباره میزان اعتماد بر عهده شماست. برای حذف یک گواهی CA نامعتبر از فایل \f[CR]cacerts\f[R]، از گزینه \f[CR]\-delete\f[R] در دستور \f[CR]keytool\f[R] استفاده کنید. می‌توانید فایل \f[CR]cacerts\f[R] را در دایرکتوری \f[CR]$JAVA_HOME/lib/security\f[R] کیت توسعه جاوا پیدا کنید. اگر مجوز ویرایش این فایل را ندارید با مدیر سیستم خود تماس بگیرید. .RE .TP استاندارد کدگذاری گواهی RFC 1421 اینترنت (Internet RFC 1421 Certificate Encoding Standard) گواهی‌ها اغلب به جای کدگذاری دودویی، با استفاده از قالب کدگذاری متنی قابل‌چاپ تعریف‌شده توسط استاندارد RFC 1421 اینترنت ذخیره می‌شوند. این قالب گواهی که به عنوان کدگذاری Base64 نیز شناخته می‌شود، صدور گواهی‌ها به سایر برنامه‌ها از طریق ایمیل یا سازوکارهای دیگر را آسان می‌کند. .RS گواهی‌های خوانده‌شده توسط دستورات \f[CR]\-importcert\f[R] و \f[CR]\-printcert\f[R] می‌توانند در این قالب یا کدگذاری دودویی باشند. دستور \f[CR]\-exportcert\f[R] به طور پیش‌فرض گواهی را با کدگذاری دودویی صادر می‌کند، اما هنگامی که گزینه \f[CR]\-rfc\f[R] مشخص شود، گواهی را در قالب کدگذاری قابل‌چاپ صادر خواهد کرد. دستور \f[CR]\-list\f[R] به طور پیش‌فرض اثرانگشت SHA-256 گواهی را چاپ می‌کند. اگر گزینه \f[CR]\-v\f[R] مشخص شود، گواهی در قالب خوانا برای انسان چاپ می‌شود. اگر گزینه \f[CR]\-rfc\f[R] مشخص شود، گواهی در قالب کدگذاری قابل‌چاپ چاپ خواهد شد. در قالب کدگذاری قابل‌چاپ، گواهی کدگذاری‌شده در ابتدا و انتها با متن زیر محصور می‌شود: .IP .EX \-\-\-\-\-BEGIN CERTIFICATE\-\-\-\-\- encoded certificate goes here. \-\-\-\-\-END CERTIFICATE\-\-\-\-\- .EE .RE .TP نام‌های متمایز X.500 (X.500 Distinguished Names) نام‌های متمایز X.500 برای شناسایی هویت‌ها مانند مواردی که توسط فیلدهای \f[CR]subject\f[R] و \f[CR]issuer\f[R] (امضاکننده) گواهی‌های X.509 نام‌گذاری می‌شوند، استفاده می‌شوند. دستور \f[CR]keytool\f[R] از زیربخش‌های زیر پشتیبانی می‌کند: .RS .IP \(bu 2 commonName: نام عمومی شخص مانند Susan Jones. .IP \(bu 2 organizationUnit: نام واحد سازمانی کوچک (مانند دپارتمان یا بخش)؛ برای مثال Purchasing. .IP \(bu 2 localityName: نام محل یا شهر؛ برای مثال Palo Alto. .IP \(bu 2 stateName: نام ایالت یا استان؛ برای مثال California. .IP \(bu 2 country: کد کشور دوحرفی؛ برای مثال CH. .PP هنگامی که یک رشته نام متمایز را به عنوان مقدار گزینه \f[CR]\-dname\f[R] ارائه می‌دهید (مانند دستور \f[CR]\-genkeypair\f[R])، رشته باید در قالب زیر باشد: .RS .PP \f[CR]CN=cName, OU=orgUnit, O=org, L=city, S=state, C=countryCode\f[R] .RE .PP تمام موارد زیر نشان‌دهنده مقادیر واقعی هستند و کلیدواژه‌های قبلی اختصاراتی برای موارد زیر هستند: .IP .EX CN=commonName OU=organizationUnit O=organizationName L=localityName S=stateName C=country .EE یک نمونه رشته نام متمایز عبارت است از: .RS .PP \f[CR]CN=Mark Smith, OU=Java, O=Oracle, L=Cupertino, S=California, C=US\f[R] .RE .PP دستور نمونه با استفاده از چنین رشته‌ای: .RS .PP \f[CR]keytool \-genkeypair \-dname "CN=Mark Smith, OU=Java, O=Oracle, L=Cupertino, S=California, C=US" \-alias mark \-keyalg rsa\f[R] .RE .PP بزرگی و کوچکی حروف در اختصارات کلیدواژه‌ها تفاوتی ایجاد نمی‌کند؛ برای مثال CN، cn و Cn همگی یکسان در نظر گرفته می‌شوند. ترتیب قرارگیری اهمیت دارد؛ هر زیرمؤلفه باید به ترتیب تعیین‌شده درج شود. با این حال، درج تمام زیرمؤلفه‌ها الزامی نیست و می‌توانید از یک زیرمجموعه استفاده کنید: .RS .PP \f[CR]CN=Smith, OU=Java, O=Oracle, C=US\f[R] .RE .PP اگر مقدار رشته نام متمایز حاوی کاما باشد، هنگام تعیین رشته در خط فرمان کاما باید با یک نویسه بک‌اسلش (\\) اسکیپ شود: .RS .PP \f[CR]cn=Jack, ou=Java\, Product Development, o=Oracle, c=US\f[R] .RE .PP مشخص کردن رشته نام متمایز در خط فرمان هرگز اجباری نیست. هنگامی که نام متمایز برای دستوری مورد نیاز باشد اما در خط فرمان ارائه نشود، از کاربر برای تک‌تک زیرمؤلفه‌ها سوال خواهد شد. در این حالت، نیازی به اسکیپ کردن کاما با بک‌اسلش نیست. .RE .SH "هشدارها (WARNINGS)" .SH "هشدار وارد کردن گواهی‌های مورد اعتماد (IMPORTING TRUSTED CERTIFICATES WARNING)" \f[B]مهم\f[R]: پیش از وارد کردن یک گواهی به عنوان گواهی مورد اعتماد، حتماً آن را با دقت بسیار بررسی کنید. .PP \f[B]مثال ویندوز:\f[R] .PP ابتدا گواهی را با دستور \f[CR]\-printcert\f[R] یا دستور \f[CR]\-importcert\f[R] بدون گزینه \f[CR]\-noprompt\f[R] مشاهده کنید. اطمینان حاصل کنید که اثرانگشت‌های نمایش‌داده‌شده گواهی با اثرانگشت‌های مورد انتظار مطابقت دارند. برای مثال، فرض کنید شخصی گواهی‌ای را برای شما ایمیل کرده و شما آن را در فایلی به نام \f[CR]\(rstmp\(rscert\f[R] قرار داده‌اید. پیش از افزودن گواهی به فهرست گواهی‌های مورد اعتماد، می‌توانید دستور \f[CR]\-printcert\f[R] را برای مشاهده اثرانگشت‌های آن به صورت زیر اجرا کنید: .IP .EX keytool \-printcert \-file \(rstmp\(rscert Owner: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll Issuer: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll Serial Number: 59092b34 Valid from: Thu Jun 24 18:01:13 PDT 2016 until: Wed Jun 23 17:01:13 PST 2016 Certificate Fingerprints: SHA\-1: 20:B6:17:FA:EF:E5:55:8A:D0:71:1F:E8:D6:9D:C0:37:13:0E:5E:FE SHA\-256: 90:7B:70:0A:EA:DC:16:79:92:99:41:FF:8A:FE:EB:90: 17:75:E0:90:B2:24:4D:3A:2A:16:A6:E4:11:0F:67:A4 .EE .PP \f[B]مثال لینوکس:\f[R] .PP ابتدا گواهی را با دستور \f[CR]\-printcert\f[R] یا دستور \f[CR]\-importcert\f[R] بدون گزینه \f[CR]\-noprompt\f[R] مشاهده کنید. اطمینان حاصل کنید که اثرانگشت‌های نمایش‌داده‌شده گواهی با اثرانگشت‌های مورد انتظار مطابقت دارند. برای مثال، فرض کنید شخصی گواهی‌ای را برای شما ایمیل کرده و شما آن را در فایلی به نام \f[CR]/tmp/cert\f[R] قرار داده‌اید. پیش از افزودن گواهی به فهرست گواهی‌های مورد اعتماد، می‌توانید دستور \f[CR]\-printcert\f[R] را برای مشاهده اثرانگشت‌های آن به صورت زیر اجرا کنید: .IP .EX keytool \-printcert \-file /tmp/cert Owner: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll Issuer: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll Serial Number: 59092b34 Valid from: Thu Jun 24 18:01:13 PDT 2016 until: Wed Jun 23 17:01:13 PST 2016 Certificate Fingerprints: SHA\-1: 20:B6:17:FA:EF:E5:55:8A:D0:71:1F:E8:D6:9D:C0:37:13:0E:5E:FE SHA\-256: 90:7B:70:0A:EA:DC:16:79:92:99:41:FF:8A:FE:EB:90: 17:75:E0:90:B2:24:4D:3A:2A:16:A6:E4:11:0F:67:A4 .EE .PP سپس با فردی که گواهی را ارسال کرده تماس گرفته و اثرانگشت‌هایی را که می‌بینید با مواردی که آن‌ها ارائه می‌دهند مقایسه کنید. تنها در صورت یکسان بودن اثرانگشت‌ها تضمین می‌شود که گواهی در حین انتقال با گواهی فرد دیگری مانند یک مهاجم جایگزین نشده است. اگر چنین حمله‌ای رخ داده باشد و شما گواهی را پیش از وارد کردن بررسی نکرده باشید، به هر چیزی که مهاجم امضا کرده است اعتماد خواهید کرد؛ برای مثال یک فایل JAR حاوی فایل‌های کلاس مخرب. .PP \f[B]نکته:\f[R] .PP اجرای دستور \f[CR]\-printcert\f[R] پیش از وارد کردن گواهی اجباری نیست، زیرا قبل از افزودن گواهی به فهرست گواهی‌های مورد اعتماد در انبار کلید، دستور \f[CR]\-importcert\f[R] اطلاعات گواهی را چاپ کرده و از شما می‌خواهد آن را تأیید کنید. در این مرحله می‌توانید عملیات وارد کردن را متوقف کنید. اما این کار تنها زمانی ممکن است که دستور \f[CR]\-importcert\f[R] را بدون گزینه \f[CR]\-noprompt\f[R] اجرا کنید. اگر گزینه \f[CR]\-noprompt\f[R] مشخص شده باشد، هیچ تعاملی با کاربر صورت نخواهد گرفت. .SH "هشدار گذرواژه‌ها (PASSWORDS WARNING)" اکثر دستوراتی که روی یک انبار کلید عمل می‌کنند نیازمند گذرواژه انبار کلید هستند. برخی دستورات نیازمند گذرواژه کلید خصوصی/مخفی هستند. گذرواژه‌ها می‌توانند در خط فرمان در گزینه‌های \f[CR]\-storepass\f[R] و \f[CR]\-keypass\f[R] مشخص شوند. با این حال، گذرواژه نباید در خط فرمان یا اسکریپت‌ها مشخص شود مگر اینکه برای اهداف آزمایشی باشد یا روی یک سیستم امن قرار داشته باشید. هنگامی که یک گزینه گذرواژه الزامی را در خط فرمان مشخص نکنید، از شما درخواست خواهد شد. .SH "هشدار انطباق گواهی (CERTIFICATE CONFORMANCE WARNING)" سند \f[B]مشخصات گواهی و فهرست ابطال گواهی (CRL) زیرساخت کلید عمومی اینترنت X.509\f[R] [https://tools.ietf.org/rfc/rfc5280.txt] مشخصاتی را در مورد گواهی‌های منطبق با X.509 تعریف کرده که شامل مقادیر و ترکیبات مقادیر معتبر برای فیلدها و پسوندهای گواهی است. .PP دستور \f[CR]keytool\f[R] تمام این قوانین را اجبار نمی‌کند، بنابراین می‌تواند گواهی‌هایی تولید کند که با استاندارد منطبق نیستند، مانند گواهی‌های خودامضاشده‌ای که برای مقاصد آزمایش داخلی استفاده می‌شوند. گواهی‌هایی که با استاندارد منطبق نباشند ممکن است توسط JDK یا سایر برنامه‌ها رد شوند. کاربران باید اطمینان حاصل کنند که گزینه‌های صحیحی را برای \f[CR]\-dname\f[R]، \f[CR]\-ext\f[R] و غیره ارائه می‌دهند. .SH "وارد کردن یک گواهی مورد اعتماد جدید (IMPORT A NEW TRUSTED CERTIFICATE)" پیش از افزودن گواهی به انبار کلید، دستور \f[CR]keytool\f[R] با تلاش برای ساخت زنجیره‌ای از اعتماد از آن گواهی تا یک گواهی خودامضاشده (متعلق به مرجع ریشه CA) با استفاده از گواهی‌های مورد اعتماد موجود در انبار کلید، آن را اعتبارسنجی می‌کند. .PP اگر گزینه \f[CR]\-trustcacerts\f[R] مشخص شده باشد، گواهی‌های اضافی در فایلی به نام \f[CR]cacerts\f[R] برای زنجیره اعتماد در نظر گرفته می‌شوند. .PP اگر دستور \f[CR]keytool\f[R] نتواند یک مسیر اعتماد از گواهی ورودی تا یک گواهی خودامضاشده (از انبار کلید یا فایل \f[CR]cacerts\f[R]) برقرار کند، اطلاعات گواهی چاپ شده و از کاربر خواسته می‌شود با مقایسه اثرانگشت‌های نمایش‌داده‌شده با اثرانگشت‌های به دست آمده از منبع معتبر دیگر (مانند مالک گواهی)، آن را تأیید کند. پیش از وارد کردن گواهی به عنوان گواهی مورد اعتماد بسیار دقت کنید تا از معتبر بودن آن مطمئن شوید. سپس کاربر این امکان را دارد که عملیات وارد کردن را متوقف کند. اگر گزینه \f[CR]\-noprompt\f[R] مشخص شده باشد، هیچ تعاملی با کاربر انجام نخواهد شد. .SH "وارد کردن پاسخ گواهی (IMPORT A CERTIFICATE REPLY)" هنگامی که پاسخ گواهی را وارد می‌کنید، پاسخ گواهی با گواهی‌های مورد اعتماد موجود در انبار کلید و در صورت تعیین گزینه \f[CR]\-trustcacerts\f[R] با گواهی‌های پیکربندی‌شده در فایل انبار کلید \f[CR]cacerts\f[R] اعتبارسنجی می‌شود. .PP روش‌های تعیین معتبر بودن پاسخ گواهی به شرح زیر است: .IP \(bu 2 اگر پاسخ یک گواهی منفرد X.509 باشد، دستور \f[CR]keytool\f[R] تلاش می‌کند یک زنجیره اعتماد از پاسخ گواهی تا یک گواهی خودامضاشده (متعلق به مرجع ریشه CA) برقرار کند. پاسخ گواهی و سلسله‌مراتب گواهی‌ها برای احراز هویت پاسخ گواهی از زنجیره گواهی جدید نام‌های مستعار استفاده می‌شود. اگر زنجیره اعتماد برقرار نشود، پاسخ گواهی وارد نخواهد شد. در این حالت، دستور \f[CR]keytool\f[R] گواهی را چاپ نکرده و از کاربر برای تأیید سوال نمی‌کند، زیرا تشخیص اصالت پاسخ گواهی برای کاربر بسیار دشوار است. .IP \(bu 2 اگر پاسخ یک زنجیره گواهی با قالب PKCS #7 یا دنباله‌ای از گواهی‌های X.509 باشد، زنجیره به گونه‌ای مرتب می‌شود که گواهی کاربر در ابتدا و سپس صفر یا چند گواهی CA قرار می‌گیرد. اگر زنجیره با یک گواهی ریشه خودامضاشده CA پایان یابد و گزینه \f[CR]\-trustcacerts\f[R] مشخص شده باشد، دستور \f[CR]keytool\f[R] تلاش می‌کند آن را با هر یک از گواهی‌های مورد اعتماد موجود در انبار کلید یا فایل \f[CR]cacerts\f[R] مطابقت دهد. اگر زنجیره با یک گواهی ریشه خودامضاشده CA پایان نیابد و گزینه \f[CR]\-trustcacerts\f[R] مشخص شده باشد، دستور \f[CR]keytool\f[R] تلاش می‌کند گواهی ریشه را از گواهی‌های مورد اعتماد موجود در انبار کلید یا فایل \f[CR]cacerts\f[R] پیدا کرده و به انتهای زنجیره اضافه کند. اگر گواهی پیدا نشود و گزینه \f[CR]\-noprompt\f[R] مشخص نشده باشد، اطلاعات آخرین گواهی موجود در زنجیره چاپ شده و از کاربر برای تأیید آن سوال خواهد شد. .PP اگر کلید عمومی موجود در پاسخ گواهی با کلید عمومی کاربر که از قبل با \f[CR]alias\f[R] ذخیره شده مطابقت داشته باشد، زنجیره گواهی قدیمی با زنجیره گواهی جدید موجود در پاسخ جایگزین می‌شود. زنجیره قدیمی تنها با یک \f[CR]keypass\f[R] معتبر قابل جایگزینی است و بنابراین گذرواژه مورد استفاده برای محافظت از کلید خصوصی مدخل ارائه می‌شود. اگر هیچ گذرواژه‌ای ارائه نشود و گذرواژه کلید خصوصی با گذرواژه انبار کلید متفاوت باشد، از کاربر درخواست خواهد شد. .PP این دستور در نسخه‌های قبلی \f[CR]\-import\f[R] نام داشت. این نام قدیمی همچنان در این نسخه پشتیبانی می‌شود، اما نام جدید \f[CR]\-importcert\f[R] ترجیح داده می‌شود.