'\" t .\" Automatically generated by Pandoc 3.10.2 .\" .TH "KEYTOOL" "1" "2026" "JDK 26.0.2.1" "JDK Commands" .SH "نام (NAME)" keytool \- ابزار مدیریت کلید و گواهی .SH "خلاصه دستور (SYNOPSIS)" \f[CR]keytool\f[R] [\f[I]commands\f[R]] .TP \f[I]commands\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]: گواهی را صادر می‌کند .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]: یک گواهی یا زنجیره گواهی را وارد می‌کند .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]: مدخل‌های موجود در یک keystore را فهرست می‌کند .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]: گذرواژه ذخیره‌گاه (store password) یک keystore را تغییر می‌دهد .IP \(bu 2 \f[CR]\-showinfo\f[R]: اطلاعات مرتبط با امنیت را نمایش می‌دهد .IP \(bu 2 \f[CR]\-version\f[R]: نسخه برنامه را چاپ می‌کند برای شرح این دستورها به‌همراه گزینه‌هایشان، \f[B]Commands and Options\f[R] را ببینید. .RE .SH "توضیحات (DESCRIPTION)" دستور \f[CR]keytool\f[R] ابزاری برای مدیریت کلیدها و گواهی‌ها است. این ابزار به کاربران امکان می‌دهد تا جفت‌کلیدهای عمومی/خصوصی و گواهی‌های مرتبط با خود را برای استفاده در خوداحرازهویتی (جایی که کاربر هویت خود را برای سایر کاربران و سرویس‌ها احراز می‌کند) یا خدمات یکپارچگی داده و احراز اصالت از طریق امضاهای دیجیتال مدیریت کنند. دستور \f[CR]keytool\f[R] همچنین به کاربران اجازه می‌دهد کلیدهای عمومی طرف‌های ارتباطی خود را (در قالب گواهی) در حافظه موقت (cache) نگه‌داری کنند. .PP یک گواهی، بیانیه‌ای با امضای دیجیتال از سوی یک نهاد (شخص، شرکت و غیره) است که تأیید می‌کند کلید عمومی (و برخی اطلاعات دیگرِ) نهادی دیگر دارای مقداری مشخص است. هنگامی که داده‌ها به‌صورت دیجیتال امضا می‌شوند، می‌توان امضا را برای بررسی یکپارچگی و اصالت داده‌ها اعتبارسنجی کرد. یکپارچگی به این معناست که داده‌ها تغییر نیافته یا دستکاری نشده‌اند، و اصالت بدین معناست که داده‌ها از سوی همان فردی آمده که ادعای ایجاد و امضای آن را دارد. .PP دستور \f[CR]keytool\f[R] همچنین به کاربران امکان می‌دهد کلیدهای محرمانه و عبارت‌های عبور مورد استفاده در رمزگذاری و رمزگشایی متقارن (مانند Data Encryption Standard) را مدیریت کنند. این ابزار همچنین می‌تواند سایر اطلاعات مرتبط با امنیت را نمایش دهد. .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] برای تعیین این‌که کدام الگوریتم‌ها یک ریسک امنیتی محسوب می‌شوند استفاده می‌کند. این دستور هنگامی که الگوریتم‌های غیرفعال‌شده یا قدیمی (legacy) مورد استفاده قرار گیرند، هشدار صادر می‌کند. مشخصه‌های امنیتی \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] در JDK) تعریف شده‌اند..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] ابتدا تلاش می‌کند با استفاده از گذرواژهٔ keystore کلید خصوصی/سری را بازیابی کند. اگر این تلاش ناموفق باشد، دستور \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] را با نام واقعی فایل جایگزین کنید، به این صورت: \f[CR]keytool \-printcert \-file VScert.cer\f[R] .RE .IP \(bu 2 مقادیر گزینه‌ها چنانچه حاوی فاصله (space) باشند، باید درون علامت نقل‌قول قرار گیرند. .SH "دستورات و گزینه‌ها (COMMANDS AND OPTIONS)" دستورات \f[CR]keytool\f[R] و گزینه‌های آن‌ها را می‌توان بر اساس وظایفی که انجام می‌دهند دسته‌بندی کرد. .PP \f[B]دستورات ایجاد یا افزودن داده به Keystore\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]دستورات وارد کردن محتوا از یک Keystore دیگر\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]دستورات مدیریت Keystore\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]}: نام مخزن کلید (keystore) .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه مخزن کلید (keystore) .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع مخزن کلید (keystore) .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] یک تأمین‌کننده قدیمی باشد که از طریق reflection بارگذاری می‌شود، .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]}: مسیر کلاس (classpath) تأمین‌کننده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی با جزئیات (پُرگو) .IP \(bu 2 {\f[CR]\-protected\f[R]}: گذرواژه از طریق یک سازوکار محافظت‌شده ارائه می‌شود از دستور \f[CR]\-gencert\f[R] برای تولید گواهی در پاسخ به یک فایل درخواست گواهی (که می‌تواند با دستور \f[CR]keytool \-certreq\f[R] ایجاد شود) استفاده کنید. این دستور درخواست را از \f[I]infile\f[R] یا در صورت حذف آن، از ورودی استاندارد می‌خواند، آن را با استفاده از کلید خصوصی نام مستعار (alias) امضا می‌کند، و گواهی 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]گزینه‌های مشترک دستورات (Common Command Options)\f[R] را مطالعه کنید. گزینه \f[CR]\-gencert\f[R] این امکان را به شما می‌دهد که زنجیره‌های گواهی (certificate chains) ایجاد کنید. مثال زیر گواهی \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] را امضا می‌کند، که همگی خودصادرشده (self\-issued) هستند: .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]}: نام مخزن کلید (keystore) .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه مخزن کلید (keystore) .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع مخزن کلید (keystore) .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) همراه با یک آرگومان پیکربندی اختیاری..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) به همراه یک آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس (classpath) ارائه‌دهنده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی با جزئیات کامل .IP \(bu 2 {\f[CR]\-protected\f[R]}: گذرواژه از طریق یک سازوکار محافظت‌شده ارائه می‌شود از دستور \f[CR]\-genkeypair\f[R] برای تولید یک جفت‌کلید (یک کلید عمومی و کلید خصوصی مرتبط با آن) استفاده کنید. هنگامی که گزینهٔ \f[CR]\-signer\f[R] مشخص نشده باشد، کلید عمومی در یک گواهی خودامضا (self\-signed) از نوع X.509 v3 قرار گرفته و به عنوان یک زنجیرهٔ گواهی تک‌عنصری ذخیره می‌شود. هنگامی که گزینهٔ \f[CR]\-signer\f[R] مشخص شده باشد، گواهی جدیدی تولید شده و توسط امضاکنندهٔ تعیین‌شده امضا می‌شود و به عنوان یک زنجیرهٔ گواهی چندعنصری (شامل خود گواهی تولیدشده و زنجیرهٔ گواهی امضاکننده) ذخیره می‌گردد. زنجیرهٔ گواهی و کلید خصوصی در یک مدخل جدید در keystore که با نام مستعار (alias) آن مشخص می‌شود، ذخیره می‌گردند. مقدار \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] نام مستعار (alias) یک \f[CR]PrivateKeyEntry\f[R] را برای امضاکننده‌ای که از قبل در keystore وجود دارد مشخص می‌کند. این گزینه برای امضای گواهی با کلید خصوصی امضاکننده استفاده می‌شود. این ویژگی به‌ویژه برای الگوریتم‌های توافق کلید (یعنی زمانی که مقدار \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] باشد) مفید است، زیرا این کلیدها نمی‌توانند برای امضاهای دیجیتال استفاده شوند و بنابراین امکان ایجاد یک گواهی خودامضا (self\-signed) وجود ندارد. مقدار \f[CR]\-signerkeypass\f[R] گذرواژهٔ کلید خصوصی امضاکننده را مشخص می‌کند. اگر کلید خصوصی مدخل امضاکننده با گذرواژه‌ای متفاوت از گذرواژهٔ مخزن (store password) محافظت شده باشد، می‌توان آن را مشخص کرد. مقدار \f[CR]\-dname\f[R] نام متمایز (Distinguished Name) استاندارد X.500 را که باید با مقدار \f[CR]\-alias\f[R] مرتبط شود مشخص می‌کند. اگر گزینهٔ \f[CR]\-signer\f[R] مشخص نشده باشد، فیلدهای صادرکننده (issuer) و موضوع (subject) در گواهی خودامضا با نام متمایز مشخص‌شده مقداردهی می‌شوند. اگر گزینهٔ \f[CR]\-signer\f[R] مشخص شده باشد، فیلد موضوع (subject) گواهی با نام متمایز مشخص‌شده مقداردهی می‌شود و فیلد صادرکننده (issuer) با فیلد موضوع گواهیِ امضاکننده پر می‌گردد. اگر نام متمایز در خط فرمان ارائه نشود، از کاربر خواسته می‌شود تا آن را وارد کند. مقدار \f[CR]\-keypass\f[R] گذرواژه‌ای است که برای محافظت از کلید خصوصی جفت‌کلید تولیدشده استفاده می‌شود. اگر گذرواژه‌ای ارائه نشود، از کاربر خواسته می‌شود تا آن را وارد کند. اگر هنگام نمایش اعلان (prompt) کلید \f[B]Return\f[R] را فشار دهید، گذرواژهٔ کلید با گذرواژهٔ keystore یکسان تنظیم می‌شود. مقدار \f[CR]\-keypass\f[R] باید حداقل دارای شش نویسه باشد. مقدار \f[CR]\-startdate\f[R] زمان صدور گواهی را مشخص می‌کند که با عنوان مقدار \(dqNot Before\(dq در فیلد Validity گواهی X.509 نیز شناخته می‌شود. مقدار این گزینه می‌تواند در یکی از این دو قالب تنظیم شود: ([\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]] در قالب اول، زمان صدور به اندازهٔ مقدار مشخص‌شده نسبت به زمان کنونی جابه‌جا می‌شود. این مقدار، ترکیبی متوالی (الحاق) از دنباله‌ای از زیرمقدارها است. درون هر زیرمقدار، علامت بعلاوه (+) به معنای جابه‌جایی رو به جلو، و علامت منها (\-) به معنای جابه‌جایی رو به عقب است. مدت زمان جابه‌جایی شامل \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]}: نام keystore .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژهٔ keystore .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع keystore .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]}: مسیر کلاس (classpath) ارائه‌دهنده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی با جزئیات کامل .IP \(bu 2 {\f[CR]\-protected\f[R]}: گذرواژه از طریق یک سازوکار محافظت‌شده ارائه می‌شود از دستور \f[CR]\-genseckey\f[R] برای تولید یک کلید مخفی (secret key) و ذخیرهٔ آن در یک \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]}: نام keystore .IP \(bu 2 {\f[CR]\-cacerts\f[R]}: دسترسی به keystore مربوط به cacerts .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه keystore .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع keystore .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]}: مسیر کلاس (classpath) ارائه‌دهنده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی پرجزئیات از دستور \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 نسخه v1، v2 و v3 و همچنین زنجیره‌های گواهی با فرمت PKCS#7 متشکل از گواهی‌هایی از این نوع را وارد کند. داده‌هایی که باید وارد شوند باید یا در قالب کدگذاری دودویی و یا در قالب کدگذاری قابل‌چاپ (که با نام کدگذاری Base64 نیز شناخته می‌شود) طبق تعریف استاندارد اینترنتی RFC 1421 ارائه شوند. در حالت دوم، کدگذاری باید در ابتدا توسط رشته‌ای که با \f[CR]\-\-\-\-\-BEGIN\f[R] شروع می‌شود و در انتها توسط رشته‌ای که با \f[CR]\-\-\-\-\-END\f[R] شروع می‌شود، محدود شده باشد. شما به دو دلیل یک گواهی را وارد می‌کنید: برای افزودن آن به فهرست گواهی‌های مورد اعتماد، و برای وارد کردن پاسخ گواهی دریافت شده از یک مرجع صدور گواهی (CA) در نتیجه ارسال یک درخواست امضای گواهی (CSR) به آن CA. دستور \f[CR]\-certreq\f[R] را در \f[B]Commands for Generating a Certificate Request\f[R] ببینید. نوع واردسازی بر اساس مقدار گزینه \f[CR]\-alias\f[R] مشخص می‌شود. اگر نام مستعار به یک مدخل کلید اشاره نکند، دستور \f[CR]keytool\f[R] فرض می‌کند که شما در حال افزودن یک مدخل گواهی مورد اعتماد هستید. در این حالت، نام مستعار نباید از قبل در keystore وجود داشته باشد. اگر نام مستعار وجود داشته باشد، دستور \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]}: نام keystore .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه keystore .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع keystore .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]}: مسیر کلاس (classpath) ارائه‌دهنده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی پرجزئیات .IP \(bu 2 {\f[CR]\-protected\f[R]}: گذرواژه از طریق سازوکار محافظت‌شده ارائه می‌شود از دستور \f[CR]\-importpass\f[R] برای وارد کردن یک عبارت عبور (passphrase) و ذخیره آن در یک \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 "دستورهای وارد کردن محتوا از KEYSTORE دیگر (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]: نام keystore مبدأ .IP \(bu 2 {\f[CR]\-destkeystore\f[R] \f[I]keystore\f[R]}: نام keystore مقصد .IP \(bu 2 {\f[CR]\-srcstoretype\f[R] \f[I]type\f[R]}: نوع keystore مبدأ .IP \(bu 2 {\f[CR]\-deststoretype\f[R] \f[I]type\f[R]}: نوع keystore مقصد .IP \(bu 2 [\f[CR]\-srcstorepass\f[R] \f[I]arg\f[R]]: گذرواژه keystore مبدأ .IP \(bu 2 [\f[CR]\-deststorepass\f[R] \f[I]arg\f[R]]: گذرواژه keystore مقصد .IP \(bu 2 {\f[CR]\-srcprotected\f[R]}: محافظت‌شده با گذرواژه برای keystore مبدأ .IP \(bu 2 {\f[CR]\-destprotected\f[R]}: محافظت‌شده با گذرواژه برای keystore مقصد .IP \(bu 2 {\f[CR]\-srcprovidername\f[R] \f[I]name\f[R]}: نام تأمین‌کننده (provider) keystore مبدأ .IP \(bu 2 {\f[CR]\-destprovidername\f[R] \f[I]name\f[R]}: نام تأمین‌کننده keystore مقصد .IP \(bu 2 {\f[CR]\-srcalias\f[R] \f[I]alias\f[R]}: نام مستعار (alias) مبدأ .IP \(bu 2 {\f[CR]\-destalias\f[R] \f[I]alias\f[R]}: نام مستعار (alias) مقصد .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]]}: افزودن ارائه‌دهندهٔ امنیتی با نام کامل کلاس (fully qualified class name) همراه با یک آرگومان پیکربندی اختیاری .IP \(bu 2 {\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس (classpath) ارائه‌دهنده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی مشروح \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 از دستور \f[CR]\-importkeystore\f[R] برای وارد کردن یک مدخل (entry) منفرد یا تمامی مدخل‌ها از یک keystore مبدأ به یک keystore مقصد استفاده کنید. \f[B]نکته:\f[R] اگر هنگام استفاده از دستور \f[CR]keytool \-importkeystore\f[R] گزینهٔ \f[CR]\-destkeystore\f[R] را مشخص نکنید، keystore پیش‌فرض مورد استفاده \f[CR]$HOME/.keystore\f[R] خواهد بود. هنگامی که گزینهٔ \f[CR]\-srcalias\f[R] تعیین شود، دستور تنها مدخل مشخص‌شده با آن alias را به keystore مقصد وارد می‌کند. اگر alias مقصد با \f[CR]\-destalias\f[R] مشخص نشود، آنگاه از \f[CR]\-srcalias\f[R] به عنوان alias مقصد استفاده می‌شود. اگر مدخل مبدأ با یک گذرواژه محافظت شده باشد، از \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] در یک keystore از نوع PKCS #12 یکسان باشند. برای ایجاد یک keystore از نوع PKCS#12 برای این ابزارها، همواره \f[CR]\-destkeypass\f[R] را یکسان با \f[CR]\-deststorepass\f[R] تعیین کنید. اگر گزینهٔ \f[CR]\-srcalias\f[R] ارائه نشود، تمام مدخل‌های موجود در keystore مبدأ به keystore مقصد وارد می‌شوند. هر مدخل مقصد تحت همان alias مربوط به مدخل مبدأ ذخیره می‌شود. اگر مدخل مبدأ با یک گذرواژه محافظت شده باشد، از \f[CR]\-srcstorepass\f[R] برای بازیابی مدخل استفاده خواهد شد. اگر \f[CR]\-srcstorepass\f[R] ارائه نشده یا نادرست باشد، از کاربر درخواست وارد کردن گذرواژه می‌شود. اگر نوع یک مدخل keystore مبدأ در keystore مقصد پشتیبانی نشود، یا هنگام ذخیرهٔ یک مدخل در keystore مقصد خطایی رخ دهد، از کاربر خواسته می‌شود که یا از آن مدخل صرف‌نظر کرده و ادامه دهد یا خارج شود. مدخل مقصد با گذرواژهٔ مدخل مبدأ محافظت می‌شود. اگر alias مقصد از پیش در keystore مقصد وجود داشته باشد، به کاربر اعلان داده می‌شود تا یا روی مدخل بازنویسی کند یا یک مدخل جدید تحت نام alias متفاوتی بسازد. اگر گزینهٔ \f[CR]\-noprompt\f[R] داده شده باشد، برای یک alias مقصد جدید به کاربر اعلانی نشان داده نمی‌شود. مدخل‌های موجود با نام alias مقصد بازنویسی می‌شوند. از مدخل‌هایی که امکان وارد کردن آن‌ها وجود ندارد صرف‌نظر شده و یک هشدار نمایش داده می‌شود. .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]}: نام keystore .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]]: گذرواژه keystore .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع keystore .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) به‌همراه یک آرگومان پیکربندی اختیاری. .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) به‌همراه یک آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس (classpath) ارائه‌دهنده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی پرگو (verbose) .IP \(bu 2 {\f[CR]\-protected\f[R]}: گذرواژه از طریق سازوکاری حفاظت‌شده ارائه می‌شود برای تولید یک درخواست امضای گواهی (CSR) با قالب PKCS #10 از دستور \f[CR]\-certreq\f[R] استفاده کنید. یک CSR برای ارسال به یک CA در نظر گرفته شده است. مرکز CA هویت درخواست‌کننده گواهی را (معمولاً به‌صورت آفلاین) احراز هویت کرده و یک گواهی یا زنجیره گواهی را بازمی‌گرداند تا جایگزین زنجیره گواهی موجود (در ابتدا یک گواهی خودامضا \- self\-signed) در keystore شود. کلید خصوصی مرتبط با \f[I]alias\f[R] برای ایجاد درخواست گواهی PKCS #10 استفاده می‌شود. برای دسترسی به کلید خصوصی، باید گذرواژه صحیح ارائه شود. اگر \f[CR]\-keypass\f[R] در خط فرمان ارائه نشود و با گذرواژه‌ای که برای محافظت از یکپارچگی keystore استفاده شده متفاوت باشد، از کاربر درخواست می‌شود آن را وارد کند. اگر \f[CR]\-dname\f[R] ارائه شود، به‌عنوان موضوع (subject) در CSR استفاده می‌شود. در غیر این صورت، نام متمایز X.500 مرتبط با alias استفاده خواهد شد. مقدار \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]}: نام keystore .IP \(bu 2 {\f[CR]\-cacerts\f[R]}: دسترسی به keystore مربوط به cacerts .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه keystore .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع keystore .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) به‌همراه یک آرگومان پیکربندی اختیاری. .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]}: مسیر کلاس (classpath) ارائه‌دهنده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی پرگو (verbose) .IP \(bu 2 {\f[CR]\-protected\f[R]}: گذرواژه از طریق سازوکاری حفاظت‌شده ارائه می‌شود از دستور \f[CR]\-exportcert\f[R] برای خواندن یک گواهی از keystore که مرتبط با \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] به یک گواهی معتمد (trusted certificate) اشاره کند، آن گواهی خروجی داده می‌شود. در غیر این صورت، \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]}: نام مستعار (alias) مدخل مورد پردازش .IP \(bu 2 {\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: نام keystore .IP \(bu 2 {\f[CR]\-cacerts\f[R]}: دسترسی به keystore مرجع cacerts .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه keystore .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع keystore .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) به‌همراه یک آرگومان پیکربندی اختیاری. .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) به‌همراه یک آرگومان پیکربندی اختیاری. .IP \(bu 2 {\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس (classpath) ارائه‌دهنده .IP \(bu 2 {\f[CR]\-v\f[R]}: خروجی پرگو (verbose) .IP \(bu 2 {\f[CR]\-protected\f[R]}: گذرواژه از طریق یک سازوکار حفاظت‌شده ارائه می‌شود از دستور \f[CR]\-list\f[R] برای چاپ محتوای مدخل keystore مشخص‌شده توسط \f[CR]\-alias\f[R] در \f[CR]stdout\f[R] استفاده کنید. اگر \f[CR]\-alias\f[R] \f[I]alias\f[R] مشخص نشده باشد، محتویات کل keystore چاپ خواهد شد. به‌طور پیش‌فرض، این دستور اثرانگشت (fingerprint) از نوع SHA\-256 گواهی را چاپ می‌کند. اگر گزینه \f[CR]\-v\f[R] مشخص شده باشد، گواهی در قالبی خوانا برای انسان، همراه با اطلاعات اضافی مانند مالک، صادرکننده، شماره سریال و هرگونه افزونه چاپ می‌شود. اگر گزینه \f[CR]\-rfc\f[R] مشخص شده باشد، محتوای گواهی با استفاده از قالب کدگذاری قابل‌چاپ، همان‌طور که توسط استاندارد کدگذاری گواهی Internet RFC 1421 تعریف شده است، چاپ می‌شود. \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]]}:: میزبان و درگاه سرور Secure Sockets Layer (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]}: نام keystore .IP \(bu 2 {\f[CR]\-trustcacerts\f[R]}: اعتماد به گواهی‌های حاصل از cacerts .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه keystore .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع keystore .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]}: خروجی پرگو از دستور \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 در نظر گرفته می‌شود. \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 همان‌طور که در استاندارد کدگذاری گواهی Internet RFC 1421 تعریف شده، چاپ می‌کند. اگر گواهی از یک فایل یا \f[CR]stdin\f[R] خوانده شود، می‌تواند با کدگذاری دودویی (باینری) یا در قالب کدگذاری قابل‌چاپ تعریف‌شده در استاندارد RFC 1421 باشد. اگر سرور SSL پشت دیوار آتش (firewall) قرار داشته باشد، گزینه‌های \f[CR]\-J\-Dhttps.proxyHost=proxyhost\f[R] و \f[CR]\-J\-Dhttps.proxyPort=proxyport\f[R] را می‌توان در خط فرمان برای تونل‌سازی پراکسی (proxy tunneling) مشخص کرد. \f[B]نکته:\f[R] این دستور می‌تواند مستقل از یک keystore استفاده شود. این دستور در صورتی که گواهی، یک گواهی مورد اعتماد در keystore کاربر (مشخص‌شده با \f[CR]\-keystore\f[R]) یا در keystore متعلق به \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]}: خروجی پرگو از دستور \f[CR]\-printcertreq\f[R] برای چاپ محتوای یک درخواست گواهی در قالب PKCS #10 (که می‌تواند توسط دستور \f[CR]keytool \-certreq\f[R] تولید شود) استفاده کنید. این دستور، درخواست را از فایل می‌خواند. اگر فایلی وجود نداشته باشد، درخواست از ورودی استاندارد (standard input) خوانده می‌شود. .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]}: نام keystore .IP \(bu 2 {\f[CR]\-trustcacerts\f[R]}: اعتماد به گواهی‌های حاصل از cacerts .IP \(bu 2 [\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه keystore .IP \(bu 2 {\f[CR]\-storetype\f[R] \f[I]type\f[R]}: نوع keystore .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]}: خروجی پرگو از دستور \f[CR]\-printcrl\f[R] برای خواندن فهرست ابطال گواهی (CRL یا Certificate Revocation List) از \f[CR]\-file crl\f[R] استفاده کنید. یک CRL فهرستی از گواهی‌های دیجیتالی است که توسط مرجع صدور گواهی (CA) صادرکننده آن‌ها باطل شده‌اند. مرجع CA فایل \f[CR]crl\f[R] را تولید می‌کند. \f[B]نکته:\f[R] این دستور می‌تواند مستقل از یک keystore استفاده شود. این دستور تلاش می‌کند CRL را با استفاده از یک گواهی از keystore کاربر (مشخص‌شده با \f[CR]\-keystore\f[R]) یا keystore متعلق به \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]}: خروجی پرگو برای تغییر گذرواژه‌ای که به منظور محافظت از یکپارچگی محتویات مخزن کلید استفاده می‌شود، از دستور \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]}: خروجی پرگو از دستور \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]}: گذرواژه از طریق یک سازوکار حفاظت‌شده ارائه شده است از دستور \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]}: گذرواژه از طریق یک سازوکار حفاظت‌شده ارائه شده است از دستور \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]}: خروجی پرگو (مشروح) از دستور \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] ظاهر می‌شود، بیانگر حالت پرگو است، به این معنی که اطلاعات بیشتری در خروجی ارائه می‌شود. .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] مشخص‌شده مستقیماً به مفسر Java فرستاده می‌شود. این گزینه نباید شامل هیچ فاصله‌ای باشد. این ویژگی برای تنظیم محیط اجرا یا میزان مصرف حافظه کاربرد دارد. برای مشاهدهٔ فهرستی از گزینه‌های ممکن مفسر، \f[CR]java \-h\f[R] یا \f[CR]java \-X\f[R] را در خط فرمان وارد کنید. .PP این گزینه‌ها می‌توانند برای تمام دستورهایی که بر روی یک keystore عمل می‌کنند ظاهر شوند: .TP \f[CR]\-storetype\f[R] \f[I]storetype\f[R] این شناسه نوع keystore را که باید نمونه‌سازی شود تعیین می‌کند. .TP \f[CR]\-keystore\f[R] \f[I]keystore\f[R] مکان keystore. .RS اگر \f[CR]storetype\f[R] از نوع JKS استفاده شود و فایل keystore هنوز وجود نداشته باشد، برخی دستورهای \f[CR]keytool\f[R] می‌توانند منجر به ایجاد یک فایل keystore جدید شوند. برای مثال، اگر \f[CR]keytool \-genkeypair\f[R] فراخوانی شود و گزینهٔ \f[CR]\-keystore\f[R] مشخص نشده باشد، فایل پیش‌فرض keystore با نام \f[CR].keystore\f[R] در صورت عدم وجود، در دایرکتوری خانگی کاربر ایجاد می‌شود. به همین ترتیب، اگر گزینهٔ \f[CR]\-keystore ks_file\f[R] مشخص شود اما \f[CR]ks_file\f[R] وجود نداشته باشد، ایجاد خواهد شد. برای اطلاعات بیشتر دربارهٔ JKS \f[CR]storetype\f[R]، بخش \f[B]KeyStore Implementation\f[R] را در \f[B]KeyStore aliases\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] فرستاده می‌شود. در صورتی که keystore مبتنی بر فایل نباشد، باید \f[CR]NONE\f[R] مشخص شود؛ برای مثال هنگامی که keystore بر روی یک دستگاه توکن سخت‌افزاری قرار دارد. .RE .TP \f[CR]\-cacerts\f[R] \f[I]cacerts\f[R] بر روی keystore با نام \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] گذرواژه‌ای که برای محافظت از یکپارچگی keystore استفاده می‌شود. .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]. \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] را می‌پذیرند. به یاد داشته باشید که گزینهٔ گذرواژه و اصلاح‌کننده را با یک دونقطه (:) از یکدیگر جدا کنید. گذرواژه باید برای تمام دستورهایی که به محتویات keystore دسترسی دارند ارائه شود. برای چنین دستورهایی، هنگامی که گزینهٔ \f[CR]\-storepass\f[R] در خط فرمان مشخص نشده باشد، از کاربر پرسیده خواهد شد. هنگام بازیابی اطلاعات از keystore، ارائهٔ گذرواژه اختیاری است. اگر گذرواژه‌ای مشخص نشود، یکپارچگی اطلاعات بازیابی‌شده قابل تأیید نخواهد بود و یک هشدار نمایش داده می‌شود. .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] برای تعیین نام فایل کلاس اصلی (master class) یک ارائه‌دهندهٔ خدمات رمزنگاری در صورتی که در فایل مشخصه‌های امنیتی فهرست نشده باشد، استفاده می‌شود. .TP \f[CR]\-providerpath\f[R] \f[I]list\f[R] برای تعیین مسیر کلاس (classpath) ارائه‌دهنده استفاده می‌شود. .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] مشخص کنید. از آنجا که در دستور \f[CR]\-importkeystore\f[R] دو keystore دخیل هستند، دو گزینهٔ زیر، یعنی \f[CR]\-srcprotected\f[R] و \f[CR]\-destprotected\f[R] به ترتیب برای keystore مبدأ و مقصد ارائه شده‌اند. .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]Supported Named Extensions\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]:c\f[R] به جای \f[CR]:critical\f[R] استفاده کنید. .TP \f[CR]\-conf\f[R] \f[I]file\f[R] یک فایل گزینه‌های از پیش‌پیکربندی‌شده را مشخص می‌کند..SH "فایل گزینه‌های از پیش‌پیکربندی‌شده (PRE\-CONFIGURED OPTIONS FILE)" یک فایل گزینه‌های از پیش‌پیکربندی‌شده، یک فایل مشخصات جاوا (Java properties) است که می‌توان آن را با گزینهٔ \f[CR]\-conf\f[R] مشخص کرد. هر مشخصه بیانگر گزینه(های) پیش‌فرض برای یکی از دستورات keytool با استفاده از \(dqkeytool.\f[I]command_name\f[R]\(dq به عنوان نام مشخصه است. یک مشخصهٔ ویژه به نام \(dqkeytool.all\(dq بیانگر گزینه(های) پیش‌فرضی است که بر همهٔ دستورات اعمال می‌شود. مقدار یک مشخصه می‌تواند شامل \f[CR]${prop}\f[R] باشد که به مشخصهٔ سیستمی مرتبط با آن بسط داده خواهد شد. اگر مقدار یک گزینه حاوی نویسه‌های فاصله باشد، باید درون علامت‌های نقل‌قول (\(dq یا \(aq) قرار گیرد. تمام نام‌های مشخصه‌ها باید با حروف کوچک باشند. .PP هنگامی که \f[CR]keytool\f[R] با یک فایل گزینه‌های از پیش‌پیکربندی‌شده اجرا می‌شود، مقدار \(dqkeytool.all\(dq (در صورت وجود) ابتدا به ابتدای خط فرمان \f[CR]keytool\f[R] افزوده می‌شود، سپس مقدار مربوط به نام دستور (در صورت وجود) قرار می‌گیرد و در نهایت گزینه‌های موجود در خط فرمان اعمال می‌گردند. برای یک گزینهٔ تک‌مقداری، این سازوکار اجازه می‌دهد تا مشخصهٔ مربوط به یک دستور خاص، مقدار \(dqkeytool.all\(dq را لغو کند و مقدار تعیین‌شده در خط فرمان، هر دوی آن‌ها را بازنویسی (override) نماید. برای گزینه‌های چندمقداری، تمام آن‌ها توسط \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 \(dqmykey\(dq \-keysize 2048 (هنگام استفاده از \-genkeypair و در صورتی که \-keyalg برابر \(dqDSA\(dq باشد) 3072 (هنگام استفاده از \-genkeypair و در صورتی که \-keyalg برابر \(dqRSA\(dq، \(dqRSASSA\-PSS\(dq یا \(dqDH\(dq باشد) 384 (هنگام استفاده از \-genkeypair و در صورتی که \-keyalg برابر \(dqEC\(dq باشد) 56 (هنگام استفاده از \-genseckey و در صورتی که \-keyalg برابر \(dqDES\(dq باشد) 168 (هنگام استفاده از \-genseckey و در صورتی که \-keyalg برابر \(dqDESede\(dq باشد) \-groupname ed25519 (هنگام استفاده از \-genkeypair و در صورتی که \-keyalg برابر \(dqEdDSA\(dq و اندازه کلید 255 باشد) x25519 (هنگام استفاده از \-genkeypair و در صورتی که \-keyalg برابر \(dqXDH\(dq و اندازه کلید 255 باشد) \-validity 90 \-keystore <فایل با نام .keystore در دایرکتوری خانگی کاربر> \-destkeystore <فایل با نام .keystore در دایرکتوری خانگی کاربر> \-storetype <مقدار مشخصهٔ \(dqkeystore.type\(dq در فایل مشخصات امنیتی، که توسط متد ایستای getDefaultType در java.security.KeyStore بازگردانده می‌شود> \-file stdin (در صورت خواندن) stdout (در صورت نوشتن) \-protected false .EE .PP هنگام تولید یک گواهی یا درخواست گواهی، الگوریتم امضای پیش‌فرض (گزینهٔ \f[CR]\-sigalg\f[R]) از الگوریتم کلید خصوصی زیرین مشتق می‌شود تا سطح مناسبی از استحکام امنیتی را به شرح زیر فراهم آورد: .PP الگوریتم‌های امضای پیش‌فرض .TS tab(@); l l l. T{ keyalg T}@T{ اندازه کلید T}@T{ sigalg پیش‌فرض T} _ T{ DSA T}@T{ هر اندازه‌ای T}@T{ SHA256withDSA T} T{ RSA T}@T{ < 624 T}@T{ SHA256withRSA (اندازه کلید برای استفاده از 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 (با SHA\-256، اندازه کلید برای استفاده T} T{ T}@T{ T}@T{ از SHA\-384 بسیار کوچک است) T} T{ T}@T{ <= 7680 T}@T{ RSASSA\-PSS (با SHA\-384) T} T{ T}@T{ > 7680 T}@T{ RSASSA\-PSS (با 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] به عنوان الگوریتم‌های درهم‌سازی (هش) و MGF1 خود استفاده می‌کند. .IP \(bu 2 اگر نه \f[CR]\-keysize\f[R] و نه \f[CR]\-groupname\f[R] پیش‌فرضی برای یک الگوریتم تعریف نشده باشد، ارائه‌دهنده امنیت یک تنظیم پیش‌فرض را انتخاب خواهد کرد. .PP \f[B]نکته:\f[R] .PP برای بهبود امنیت اولیه، مقادیر پیش‌فرض keysize، groupname و نام‌های الگوریتم امضا با هر انتشار 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])* \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] به شرط آنکه ابهامی وجود نداشته باشد، آرگومان \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])* \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 به شرط آنکه ابهامی وجود نداشته باشد، آرگومان \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])* \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] آرگومان \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])* \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 آرگومان‌های \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]. آرگومان \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 باشد، مقدار آن تخلیهٔ شانزده‌شانزدهی (hexadecimal dump) از کدگذاری قواعد کدگذاری معین (DER) مربوط به \f[CR]extnValue\f[R] برای افزونه، بدون در نظر گرفتن بایت‌های نوع و طول OCTET STRING است. به جز ارقام استاندارد هگزادسیمال (0\-9، a\-f، A\-F)، هرگونه نویسهٔ اضافی در رشته HEX نادیده گرفته می‌شود. بنابراین، هر دو مقدار 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 نیز ظاهر شود، آنگاه مقدار و صفت بحرانی بودن (criticality) آن، مقدار موجود در درخواست را بازنویسی می‌کند. اگر افزونه‌ای از همان نوع چندین بار از طریق نام یا OID ارائه شود، تنها آخرین افزونه استفاده خواهد شد. .PP افزونهٔ \f[CR]subjectKeyIdentifier\f[R] همواره ایجاد می‌شود. برای گواهی‌های غیر خودامضاشده، افزونهٔ \f[CR]authorityKeyIdentifier\f[R] ایجاد می‌شود..PP \f[B]احتیاط:\f[R] .PP کاربران باید آگاه باشند که برخی از ترکیب‌های افزونه‌ها (و سایر فیلدهای گواهی) ممکن است با استانداردهای اینترنت سازگار نباشند. به بخش \f[B]Certificate Conformance Warning\f[R] مراجعه کنید. .SH "مثال‌هایی از مراحل ساخت مخزن کلید (EXAMPLES OF TASKS IN CREATING A KEYSTORE)" مثال‌های زیر توالی اقدامات را در ساخت یک 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]وارد کردن Keystore\f[R] .IP \(bu 2 \f[B]تولید گواهی‌ها برای یک سرور SSL\f[R] .SH "تولید جفت‌کلید (GENERATING THE KEY PAIR)" یک keystore بسازید و سپس جفت‌کلید را تولید کنید. .PP می‌توانید دستور را به‌صورت یک خط تکی مانند زیر وارد کنید: .RS .PP \f[CR]keytool \-genkeypair \-dname \(dqcn=myname, ou=mygroup, o=mycompany, c=mycountry\(dq \-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] را به آن اختصاص می‌دهد. این دستور یک جفت‌کلید عمومی/خصوصی برای هویتی تولید می‌کند که نام متمایز (distinguished name) آن \f[CR]myname\f[R]، \f[CR]mygroup\f[R]، \f[CR]mycompany\f[R] و کد کشور دو حرفی آن \f[CR]mycountry\f[R] است. دستور برای ایجاد کلیدها از الگوریتم تولید کلید RSA استفاده می‌کند؛ هر دو کلید ۳۰۷۲ بیتی هستند. .PP این دستور از الگوریتم امضای پیش‌فرض SHA384withRSA برای ایجاد یک گواهی خودامضا (self\-signed) که شامل کلید عمومی و اطلاعات نام متمایز است، استفاده می‌کند. این گواهی به مدت ۱۸۰ روز معتبر است و با کلید خصوصی در یک مدخل keystore که با \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 در این حالت، یک مدخل keystore با نام مستعار \f[CR]mykey\f[R] ایجاد می‌شود که حاوی یک جفت‌کلید تازه‌تولیدشده و گواهی‌ای با اعتبار ۹۰ روز است. این مدخل در دایرکتوری خانگی شما در یک keystore با نام \f[CR].keystore\f[R] قرار داده می‌شود. اگر \f[CR].keystore\f[R] از قبل وجود نداشته باشد، ایجاد می‌شود. اطلاعات نام متمایز، گذرواژه keystore و گذرواژه کلید خصوصی از شما پرسیده خواهد شد. .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" \f[B]نکته:\f[R] .PP تولید جفت‌کلید، یک گواهی خودامضاشده (self\-signed) ایجاد کرده است؛ با این حال، هنگامی که یک گواهی توسط یک CA امضا شده باشد، احتمال این‌که توسط دیگران مورد اعتماد قرار گیرد بسیار بیشتر است. .PP برای دریافت امضای CA، فرایند زیر را انجام دهید: .IP "1." 3 تولید یک CSR: .RS 4 .RS .PP \f[CR]keytool \-certreq \-file myname.csr\f[R] .RE .PP این دستور یک CSR برای موجودیت شناسایی‌شده با نام مستعار (alias) پیش‌فرض \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" برای وارد کردن یک گواهی برای CA، فرایند زیر را انجام دهید: .IP "1." 3 پیش از وارد کردن پاسخ گواهی از یک CA، به یک یا چند گواهی معتمد در keystore خود یا در فایل پایگاه کلید \f[CR]cacerts\f[R] نیاز دارید. گزینهٔ \f[CR]\-importcert\f[R] را در \f[B]دستورات (Commands)\f[R] ببینید. .RS 4 .IP \(bu 2 اگر پاسخ گواهی یک زنجیرهٔ گواهی است، به بالاترین گواهی این زنجیره نیاز خواهید داشت؛ یعنی گواهی CA ریشه (root CA) که کلید عمومی مرجع CA را اعتبارسنجی می‌کند. .IP \(bu 2 اگر پاسخ گواهی یک گواهی منفرد است، به گواهی مرجع CA صادرکننده (همان مرجعی که آن را امضا کرده است) نیاز دارید. اگر آن گواهی خودامضاشده نباشد، به گواهی امضاکنندهٔ آن نیاز خواهید داشت، و به همین ترتیب تا رسیدن به یک گواهی خودامضاشدهٔ CA ریشه. .PP پایگاه کلید \f[CR]cacerts\f[R] همراه با مجموعه‌ای از گواهی‌های ریشه ارائه می‌شود که توسط مراجع صدور گواهی در \f[B]برنامه گواهی ریشه اوراکل جاوا (Oracle Java Root Certificate program)\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 اگر اطمینان دارید که گواهی معتبر است، می‌توانید با وارد کردن دستور زیر آن را به keystore خود اضافه کنید: .RS .PP \f[CR]keytool \-importcert \-alias\f[R] \f[I]alias\f[R] \f[CR]\-file *X*\f[R].cer\(ga .RE .PP این دستور بر اساس داده‌های موجود در فایل گواهی CA، یک مدخل گواهی معتمد در keystore ایجاد می‌کند و مقادیر \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 یک تک‌گواهی باشد، ساخته می‌شود. این زنجیره گواهی با استفاده از پاسخ گواهی و گواهی‌های معتبر موجود در keystore محل وارد کردن پاسخ یا در فایل keystore \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 یک راه برای اینکه کلاینت‌ها بتوانند هویت شما را اعتبارسنجی کنند این است که گواهی کلید عمومی شما را به عنوان یک مدخل مورد اعتماد در keystore خود وارد کنند. سپس می‌توانید گواهی را صادر (export) کرده و در اختیار کلاینت‌های خود قرار دهید. .PP برای نمونه: .IP "1." 3 با وارد کردن دستور زیر، گواهی خود را در فایلی به نام \f[CR]myname.cer\f[R] کپی کنید: .RS 4 .PP \f[B]نکته:\f[R] .PP در این مثال، مدخل دارای نام مستعار (alias) \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 "وارد کردن KEYSTORE (IMPORTING THE KEYSTORE)" از دستور \f[CR]importkeystore\f[R] برای وارد کردن یک keystore کامل به یک keystore دیگر استفاده کنید. این کار تمام مدخل‌های keystore مبدأ، شامل کلیدها و گواهی‌ها را با یک دستور واحد به keystore مقصد وارد می‌کند. می‌توانید از این دستور برای وارد کردن مدخل‌ها از نوع متفاوتی از keystore استفاده کنید. در حین فرایند وارد کردن، تمام مدخل‌های جدید در keystore مقصد، همان نام‌های مستعار و گذرواژه‌های حفاظتی (برای کلیدهای محرمانه و کلیدهای خصوصی) را خواهند داشت. اگر دستور \f[CR]keytool\f[R] نتواند کلیدهای خصوصی یا کلیدهای محرمانه را از keystore مبدأ بازیابی کند، از شما گذرواژه درخواست می‌کند. اگر تکرار نام مستعار را تشخیص دهد، از شما یک نام مستعار جدید می‌خواهد، و شما می‌توانید یک نام مستعار جدید تعیین کرده یا صرفاً اجازه دهید دستور \f[CR]keytool\f[R] روی مدخل موجود بازنویسی انجام دهد. .PP برای نمونه، جهت وارد کردن مدخل‌ها از یک keystore معمولی نوع JKS به نام \f[CR]key.jks\f[R] به یک keystore سخت‌افزاری نوع 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] همچنین می‌تواند برای وارد کردن یک مدخل تکی از keystore مبدأ به keystore مقصد استفاده شود. در این حالت، علاوه بر گزینه‌هایی که در مثال پیشین استفاده کردید، باید نام مستعاری را که می‌خواهید وارد کنید مشخص نمایید. با مشخص کردن گزینهٔ \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 مرجع صدور گواهی ریشه (\f[CR]root\f[R]) .IP \(bu 2 مرجع صدور گواهی میانی (\f[CR]ca\f[R]) .IP \(bu 2 کارساز SSL (\f[CR]server\f[R]) .PP اطمینان حاصل کنید که تمام گواهی‌ها را در همان keystore ذخیره کنید. .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 (مخزن کلید) یک keystore مکانی برای ذخیره‌سازی کلیدها و گواهی‌های رمزنگاری است. .TP ورودی‌های Keystore (Keystore entries) مخازن کلید می‌توانند انواع مختلفی از ورودی‌ها را داشته باشند. دو نوع ورودی که بیشترین کاربرد را برای دستور \f[CR]keytool\f[R] دارند، شامل موارد زیر هستند: .RS ورودی‌های کلید (Key entries): هر ورودی حامل اطلاعات کلید رمزنگاری بسیار حساس است که در قالبی محافظت‌شده برای جلوگیری از دسترسی غیرمجاز ذخیره می‌شود. به طور معمول، کلید ذخیره‌شده در این نوع ورودی، یک کلید محرمانه (secret key) یا یک کلید خصوصی (private key) همراه با زنجیره گواهی برای کلید عمومی متناظر است. بخش \f[B]Certificate Chains\f[R] را ببینید. دستور \f[CR]keytool\f[R] می‌تواند هر دو نوع ورودی را مدیریت کند، در حالی که ابزار \f[CR]jarsigner\f[R] تنها نوع دوم ورودی را مدیریت می‌نماید، یعنی کلیدهای خصوصی و زنجیره‌های گواهی مرتبط با آن‌ها. ورودی‌های گواهی معتمد (Trusted certificate entries): هر ورودی شامل یک گواهی کلید عمومی منفرد است که متعلق به طرف دیگری است. این ورودی «گواهی معتمد» نامیده می‌شود زیرا مالک keystore اعتماد دارد که کلید عمومی موجود در گواهی، متعلق به هویتی است که توسط موضوع (مالک) گواهی مشخص شده است. صادرکننده گواهی با امضای گواهی، این موضوع را تأیید می‌کند. .RE .TP نام‌های مستعار Keystore (Keystore aliases) دسترسی به تمامی ورودی‌های keystore (ورودی‌های کلید و ورودی‌های گواهی معتمد) از طریق نام‌های مستعار (alias) یکتا انجام می‌شود. .RS یک نام مستعار هنگامی تعیین می‌شود که موجودیتی را با دستور \f[CR]\-genseckey\f[R] برای تولید کلید محرمانه، دستور \f[CR]\-genkeypair\f[R] برای تولید یک جفت‌کلید (کلید عمومی و خصوصی)، یا دستور \f[CR]\-importcert\f[R] برای افزودن یک گواهی یا زنجیره گواهی به فهرست گواهی‌های معتمد، به keystore اضافه می‌کنید. دستورهای بعدی \f[CR]keytool\f[R] باید از همین نام مستعار برای ارجاع به آن موجودیت استفاده کنند. به عنوان مثال، می‌توانید با دستور زیر از نام مستعار \f[CR]duke\f[R] برای تولید یک جفت‌کلید عمومی/خصوصی جدید و قرار دادن کلید عمومی در یک گواهی خودامضا (self\-signed) استفاده کنید. بخش \f[B]Certificate Chains\f[R] را ببینید. .RS .PP \f[CR]keytool \-genkeypair \-alias duke \-keyalg rsa \-keypass\f[R] \f[I]passwd\f[R] .RE این مثال یک \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 این دستور \f[I]passwd\f[R] اولیه را به \f[I]newpasswd\f[R] تغییر می‌دهد. نباید یک گذرواژه در خط فرمان یا در یک اسکریپت مشخص شود مگر اینکه برای اهداف آزمایشی باشد، یا در سامانه‌ای امن قرار داشته باشید. اگر گزینه گذرواژه لازم را در خط فرمان مشخص نکنید، برای وارد کردن آن اعلان دریافت خواهید کرد. .RE .TP پیاده‌سازی Keystore (Keystore implementation) کلاس \f[CR]KeyStore\f[R] ارائه‌شده در بسته \f[CR]java.security\f[R]، رابط‌های مشخص و تعریف‌شده‌ای را برای دسترسی و تغییر اطلاعات درون یک keystore فراهم می‌کند. این امکان وجود دارد که چندین پیاده‌سازی عینی (concrete) مختلف وجود داشته باشد، به گونه‌ای که هر پیاده‌سازی مربوط به نوع خاصی از keystore باشد. .RS در حال حاضر دو ابزار خط فرمانی (\f[CR]keytool\f[R] و \f[CR]jarsigner\f[R]) از پیاده‌سازی‌های keystore استفاده می‌کنند. از آنجا که کلاس \f[CR]KeyStore\f[R] به صورت \f[CR]public\f[R] است، کاربران می‌توانند برنامه‌های کاربردی امنیتی بیشتری بنویسند که از آن بهره می‌برند. در JDK 9 و نسخه‌های پس از آن، پیاده‌سازی پیش‌فرض keystore برابر با \f[CR]PKCS12\f[R] است. این یک keystore چندسکویی بر پایه استاندارد RSA PKCS12 Personal Information Exchange Syntax Standard است. این استاندارد اصولاً برای ذخیره‌سازی یا انتقال کلیدهای خصوصی، گواهی‌ها و اسرار متفرقه کاربر در نظر گرفته شده است. پیاده‌سازی توکار دیگری نیز وجود دارد که توسط Oracle ارائه شده است. این پیاده‌سازی، keystore را به عنوان فایلی با یک نوع (قالب) اختصاصی keystore به نام \f[CR]JKS\f[R] پیاده می‌کند. این قالب از هر کلید خصوصی با گذرواژه مجزای خودش محافظت کرده، و همچنین یکپارچگی کل keystore را با یک گذرواژه (احتمالاً متفاوت) محافظت می‌نماید. پیاده‌سازی‌های keystore مبتنی بر ارائه‌دهنده (provider\-based) هستند. به طور مشخص‌تر، رابط‌های برنامه‌نویسی ارائه‌شده توسط \f[CR]KeyStore\f[R] در قالب یک Service Provider Interface (SPI) پیاده‌سازی شده‌اند. بدین معنا که یک کلاس انتزاعی متناظر به نام \f[CR]KeystoreSpi\f[R] نیز در \f[CR]java.security package\f[R] وجود دارد که متدهای Service Provider Interface را که ارائه‌دهندگان باید پیاده‌سازی کنند، تعریف می‌کند. اصطلاح \f[I]ارائه‌دهنده (provider)\f[R] به یک بسته یا مجموعه‌ای از بسته‌ها اشاره دارد که پیاده‌سازی عینی زیرمجموعه‌ای از خدمات قابل دسترس توسط Java Security API را فراهم می‌کنند. برای ارائه یک پیاده‌سازی keystore، کلاینت‌ها باید یک ارائه‌دهنده را پیاده‌سازی کرده و پیاده‌سازی زیرکلاسی از \f[CR]KeystoreSpi\f[R] را ارائه دهند، همان‌طور که در Steps to Implement and Integrate a Provider توضیح داده شده است. برنامه‌های کاربردی می‌توانند انواع مختلفی از پیاده‌سازی‌های keystore را از ارائه‌دهندگان گوناگون با استفاده از متد کارخانه‌ای \f[CR]getInstance\f[R] موجود در کلاس \f[CR]KeyStore\f[R] انتخاب نمایند. نوع keystore، قالب داده و ذخیره‌سازی اطلاعات keystore و همچنین الگوریتم‌های مورد استفاده برای حفاظت از کلیدهای خصوصی/محرمانه در keystore و یکپارچگی keystore را تعریف می‌کند. پیاده‌سازی‌های keystore با انواع متفاوت با یکدیگر سازگار نیستند. دستور \f[CR]keytool\f[R] با هر پیاده‌سازی مبتنی بر فایلِ keystore کار می‌کند. این دستور با مکان keystore که در خط فرمان به آن ارسال می‌شود مانند یک نام فایل رفتار کرده و آن را به یک \f[CR]FileInputStream\f[R] تبدیل می‌کند، که اطلاعات keystore را از آن بارگذاری می‌نماید. دستورهای \f[CR]jarsigner\f[R] می‌توانند keystore را از هر مکانی که بتوان با یک URL مشخص کرد بخوانند. برای \f[CR]keytool\f[R] و \f[CR]jarsigner\f[R]، می‌توانید نوع keystore را در خط فرمان با گزینه \f[CR]\-storetype\f[R] مشخص کنید. اگر صراحتاً نوع keystore را تعیین نکنید، ابزارها پیاده‌سازی keystore را بر اساس مقدار مشخصه \f[CR]keystore.type\f[R] که در فایل مشخصه‌های امنیتی تعیین شده است انتخاب می‌کنند. فایل مشخصه‌های امنیتی \f[CR]java.security\f[R] نام دارد و در دایرکتوری مشخصه‌های امنیتی قرار گرفته است: .IP \(bu 2 \f[B]لینوکس و macOS:\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] هر ابزار مقدار \f[CR]keystore.type\f[R] را دریافت کرده و سپس تمامی ارائه‌دهندگان نصب‌شده فعلی را بررسی می‌کند تا ارائه‌دهنده‌ای را بیابد که یک keystore از آن نوع را پیاده‌سازی کرده باشد. سپس از پیاده‌سازی keystore آن ارائه‌دهنده استفاده می‌کند. کلاس \f[CR]KeyStore\f[R] یک متد ایستا به نام \f[CR]getDefaultType\f[R] تعریف می‌کند که به برنامه‌ها امکان بازیابی مقدار مشخصه \f[CR]keystore.type\f[R] را می‌دهد. خط کد زیر یک نمونه از نوع پیش‌فرض keystore را مطابق آنچه در مشخصه \f[CR]keystore.type\f[R] تعیین شده ایجاد می‌کند: .RS .PP \f[CR]KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());\f[R] .RE نوع پیش‌فرض keystore مقدار \f[CR]pkcs12\f[R] است، که یک keystore چندسکویی بر پایه استاندارد RSA PKCS12 Personal Information Exchange Syntax Standard می‌باشد. این مورد با خط زیر در فایل مشخصه‌های امنیتی تعیین می‌شود: .RS .PP \f[CR]keystore.type=pkcs12\f[R] .RE برای اینکه ابزارها از پیاده‌سازی keystore دیگری غیر از مقدار پیش‌فرض استفاده کنند، می‌توانید آن خط را برای تعیین نوع متفاوتی از keystore تغییر دهید. برای نمونه، اگر می‌خواهید از پیاده‌سازی keystore مربوط به Oracle به نام \f[CR]jks\f[R] استفاده کنید، آن خط را به صورت زیر تغییر دهید: .RS.PP \f[CR]keystore.type=jks\f[R] .RE \f[B]نکته:\f[R] بزرگی یا کوچکی حروف در نام‌گذاری نوع keystore اهمیتی ندارد. برای نمونه، \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 در Oracle Solaris گرفته تا یک نشانی رایانامه یا یک نام متمایز در X.509. .IP \(bu 2 امضا (Signature): یک امضا بر روی داده‌ها با استفاده از کلید خصوصی یک موجودیت محاسبه می‌شود. امضاکننده، که در مورد یک گواهی با عنوان صادرکننده (issuer) نیز شناخته می‌شود. .IP \(bu 2 کلیدهای خصوصی (Private Keys): این‌ها اعدادی هستند که فرض بر این است تنها برای همان موجودیت خاصی که کلید متعلق به آن است شناخته‌شده باشند (یعنی باید مخفی نگه داشته شوند). کلیدهای خصوصی و عمومی به‌صورت جفت در تمام سیستم‌های رمزنگاری کلید عمومی (که به آن‌ها سیستم‌های رمزنگاری نامتقارن نیز گفته می‌شود) وجود دارند. در یک سیستم رمزنگاری کلید عمومی معمول، مانند DSA، یک کلید خصوصی دقیقاً با یک کلید عمومی متناظر است. از کلیدهای خصوصی برای محاسبه‌ی امضاها استفاده می‌شود. .IP \(bu 2 موجودیت (Entity): یک موجودیت می‌تواند یک شخص، سازمان، برنامه، رایانه، کسب‌وکار، بانک یا هر چیز دیگری باشد که شما تا حدی به آن اعتماد دارید. رمزنگاری کلید عمومی نیازمند دسترسی به کلیدهای عمومی کاربران است. در یک محیط شبکه‌ای در مقیاس بزرگ، تضمین این‌که از پیش روابطی میان موجودیت‌های در حال ارتباط برقرار شده باشد، یا مخزن مورد اعتمادی شامل تمام کلیدهای عمومیِ استفاده‌شده وجود داشته باشد، غیرممکن است. گواهی‌ها به‌عنوان راه‌حلی برای این مشکلِ توزیع کلید عمومی ابداع شدند. اکنون یک مرجع صدور گواهی (CA یا Certification Authority) می‌تواند به‌عنوان شخص ثالث معتمد عمل کند. مراجع CA موجودیت‌هایی مانند شرکت‌ها و کسب‌وکارهایی هستند که برای امضا (صدور) گواهی برای سایر موجودیت‌ها مورد اعتماد قرار دارند. فرض بر این است که مراجع CA تنها گواهی‌های معتبر و قابل‌اطمینان ایجاد می‌کنند زیرا تحت توافق‌نامه‌های قانونی متعهد هستند. مراجع صدور گواهی عمومی متعددی وجود دارند، مانند DigiCert، Comodo، Entrust و غیره. شما همچنین می‌توانید با استفاده از محصولاتی مانند Microsoft Certificate Server یا محصول Entrust CA، مرجع صدور گواهی خودتان را برای سازمان خود اجرا کنید. با دستور \f[CR]keytool\f[R]، نمایش، وارد کردن (import) و صادر کردن (export) گواهی‌ها امکان‌پذیر است. همچنین تولید گواهی‌های خودامضا (self\-signed) امکان‌پذیر است. دستور \f[CR]keytool\f[R] در حال حاضر گواهی‌های X.509 را مدیریت می‌کند. .RE .TP گواهی‌های X.509 (X.509 Certificates) استاندارد X.509 مشخص می‌کند چه اطلاعاتی می‌تواند درون یک گواهی قرار گیرد و نحوه‌ی ثبت آن (قالب داده) را شرح می‌دهد. تمام داده‌ها در یک گواهی با استفاده از دو استاندارد مرتبط به نام ASN.1/DER کدگذاری می‌شوند. استاندارد Abstract Syntax Notation 1 داده‌ها را توصیف می‌کند. قواعد Definite Encoding Rules روشی یکتا برای ذخیره و انتقال آن داده‌ها را شرح می‌دهند. .RS تمام گواهی‌های X.509، علاوه بر امضا، دارای داده‌های زیر هستند: .IP \(bu 2 نسخه (Version): مشخص می‌کند کدام نسخه از استاندارد X.509 بر این گواهی اعمال می‌شود، که بر اطلاعات قابل‌تعیین در آن اثر می‌گذارد. تاکنون، سه نسخه تعریف شده است. دستور \f[CR]keytool\f[R] می‌تواند گواهی‌های v1، v2 و v3 را وارد و صادر کند. این دستور گواهی‌های v3 تولید می‌کند. .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): نام متمایز (Distinguished Name) استاندارد X.500 از موجودیتی که گواهی را امضا کرده است. این معمولاً یک CA است. استفاده از این گواهی به معنای اعتماد به موجودیتی است که این گواهی را امضا کرده است. در برخی موارد، مانند گواهی‌های ریشه یا گواهی‌های CA بالاترین سطح، صادرکننده گواهیِ خود را امضا می‌کند. .IP \(bu 2 دوره اعتبار (Validity period): هر گواهی فقط برای مدت زمان محدودی معتبر است. این دوره با تاریخ و زمان شروع و تاریخ و زمان پایان توصیف می‌شود و می‌تواند به کوتاهی چند ثانیه یا به درازای تقریباً یک قرن باشد. دوره اعتبارِ انتخاب‌شده به عوامل متعددی بستگی دارد، مانند قدرت کلید خصوصیِ مورداستفاده برای امضای گواهی، یا هزینه‌ای که فرد حاضر است برای یک گواهی بپردازد. این دوره‌ای است که انتظار می‌رود موجودیت‌ها بتوانند به مقدار عمومی اتکا کنند، به شرطی که کلید خصوصی مرتبط فاش یا مخدوش نشده باشد. .IP \(bu 2 نام موضوع (Subject name): نام موجودیتی که گواهی، کلید عمومی او را تعیین هویت می‌کند. این نام از استاندارد X.500 استفاده می‌کند، بنابراین هدف این است که در سرتاسر اینترنت یکتا باشد. این نام، نام متمایز (DN) تحت استاندارد X.500 برای موجودیت است. برای مثال، .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] می‌تواند مدخل‌های کلید در keystore را ایجاد و مدیریت کند که هرکدام شامل یک کلید خصوصی و یک زنجیره گواهی مرتبط هستند. اولین گواهی در زنجیره حاوی کلید عمومیِ متناظر با کلید خصوصی است. .RS هنگامی که کلیدها برای نخستین بار تولید می‌شوند، زنجیره معمولاً با یک عنصر واحد آغاز می‌شود؛ یک گواهی خودامضا (self\-signed). دستور \-genkeypair را در بخش \f[B]دستورات (Commands)\f[R] ببینید. گواهی خودامضا گواهی‌ای است که صادرکننده (امضاکننده) آن با موضوع (subject) یکسان است. موضوع، موجودیتی است که کلید عمومی آن توسط گواهی احراز اصالت می‌شود. هنگامی که دستور \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 دوم را احراز اصالت می‌کند، و به همین ترتیب ادامه می‌یابد تا به یک گواهی ریشه‌ی (root) خودامضا برسد. هر گواهی در زنجیره (پس از اولی)، کلید عمومیِ امضاکننده‌ی گواهی قبلی در زنجیره را احراز اصالت می‌کند. بسیاری از مراجع CA تنها گواهی صادرشده را بدون زنجیره پشتیبان بازمی‌گردانند، به‌ویژه زمانی که یک ساختار سلسله‌مراتبی مسطح وجود دارد (بدون CAهای میانی). در این حالت، زنجیره گواهی باید از روی اطلاعات گواهی‌های قابل‌اعتمادی که از پیش در keystore ذخیره شده‌اند تشکیل شود. یک قالب پاسخ دیگر (که توسط استاندارد PKCS #7 تعریف شده است) علاوه بر گواهی صادرشده، شامل زنجیره گواهی پشتیبان نیز می‌شود. هر دو قالب پاسخ می‌توانند توسط دستور \f[CR]keytool\f[R] پردازش و مدیریت شوند. گواهی CA بالاترین سطح (ریشه یا root) به‌صورت خودامضا است. با این حال، اعتماد به کلید عمومی ریشه از خود گواهی ریشه حاصل نمی‌شود، بلکه از منابع دیگری همچون یک روزنامه به دست می‌آید. این به این دلیل است که هر کسی می‌تواند یک گواهی خودامضا با نام متمایزِ مثلاً CA ریشه‌ی DigiCert تولید کند. کلید عمومی CA ریشه به‌طور گسترده شناخته‌شده است. تنها دلیلی که در یک گواهی ذخیره می‌شود این است که این قالب توسط اکثر ابزارها پشتیبانی و فهمیده می‌شود، بنابراین گواهی در این حالت صرفاً به‌عنوان وسیله‌ای برای انتقال کلید عمومی CA ریشه به کار می‌رود. پیش از افزودن گواهی CA ریشه به keystore خود، باید آن را با گزینه‌ی \f[CR]\-printcert\f[R] مشاهده کرده و اثرانگشت (fingerprint) نمایش‌داده‌شده را با اثرانگشت معروفی که از یک روزنامه، وبگاه CA ریشه یا منابع معتبر دیگر به دست آمده است مقایسه کنید. .RE.TP فایل گواهی‌های cacerts یک فایل گواهی با نام \f[CR]cacerts\f[R] در دایرکتوری ویژگی‌های امنیتی قرار دارد: .RS .IP \(bu 2 \f[B]لینوکس و macOS:\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] فایل \f[CR]cacerts\f[R] نشان‌دهنده یک keystore در سطح کل سیستم حاوی گواهی‌های CA است. مدیران سیستم می‌توانند با مشخص کردن \f[CR]jks\f[R] به عنوان نوع keystore، این فایل را با دستور \f[CR]keytool\f[R] پیکربندی و مدیریت کنند. فایل keystore با نام \f[CR]cacerts\f[R] همراه با مجموعه‌ای پیش‌فرض از گواهی‌های ریشهٔ CA عرضه می‌شود. برای لینوکس، macOS و ویندوز، می‌توانید گواهی‌های پیش‌فرض را با دستور زیر فهرست کنید: .RS .PP \f[CR]keytool \-list \-cacerts\f[R] .RE گذرواژه اولیه فایل keystore با نام \f[CR]cacerts\f[R]، \f[CR]changeit\f[R] است. مدیران سیستم باید پس از نصب SDK، این گذرواژه و مجوز دسترسی پیش‌فرض آن فایل را تغییر دهند. \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] مربوط به JDK بیابید. اگر مجوز ویرایش این فایل را ندارید، با مدیر سیستم خود تماس بگیرید. .RE .TP استاندارد کدگذاری گواهی Internet RFC 1421 گواهی‌ها اغلب به جای کدگذاری باینری، با استفاده از قالب کدگذاری قابل‌چاپ تعریف‌شده توسط استاندارد اینترنتی 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 برای شناسایی هویت‌ها (نهادها) استفاده می‌شوند، مانند مواردی که با فیلدهای \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. هنگامی که یک رشته نام متمایز را به عنوان مقدار گزینه \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 تمامی موارد زیر نشان‌دهنده مقادیر واقعی هستند و کلیدواژه‌های قبلی مخفف موارد زیر می‌باشند: .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 یک نمونه دستور با استفاده از چنین رشته‌ای عبارت است از: .RS .PP \f[CR]keytool \-genkeypair \-dname \(dqCN=Mark Smith, OU=Java, O=Oracle, L=Cupertino, S=California, C=US\(dq \-alias mark \-keyalg rsa\f[R] .RE بزرگی و کوچکی حروف برای اختصارات کلیدواژه‌ها تفاوتی ندارد. برای مثال، با CN، cn و Cn به یک شکل رفتار می‌شود. ترتیب مهم است؛ هر زیرمؤلفه باید دقیقاً به همان ترتیب تعیین‌شده ظاهر شود. با این حال، لازم نیست همه زیرمؤلفه‌ها وجود داشته باشند. می‌توانید از یک زیرمجموعه استفاده کنید، برای مثال: .RS .PP \f[CR]CN=Smith, OU=Java, O=Oracle, C=US\f[R] .RE اگر مقدار یک رشته نام متمایز حاوی کاما باشد، هنگام مشخص کردن رشته در خط فرمان باید قبل از کاما یک نویسه بک‌اسلش (\(rs) قرار داده شود (اسکیپ شود)، مانند: .RS .PP \f[CR]cn=Jack, ou=Java\(rs, Product Development, o=Oracle, c=US\f[R] .RE هرگز الزامی نیست که یک رشته نام متمایز را در خط فرمان مشخص کنید. هنگامی که نام متمایز برای یک دستور مورد نیاز باشد اما در خط فرمان وارد نشده باشد، از کاربر برای هر یک از زیرمؤلفه‌ها درخواست ورودی می‌شود. در این حالت، نیازی به اسکیپ کردن کاما با بک‌اسلش (\(rs) نیست. .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] را اجرا کنید. زیرا پیش از افزودن گواهی به فهرست گواهی‌های مورد اعتماد در keystore، دستور \f[CR]\-importcert\f[R] اطلاعات گواهی را چاپ کرده و از شما می‌خواهد که آن را تأیید کنید. سپس می‌توانید عملیات وارد کردن را متوقف سازید. با این حال، تنها در صورتی می‌توانید این کار را انجام دهید که دستور \f[CR]\-importcert\f[R] را بدون گزینهٔ \f[CR]\-noprompt\f[R] فراخوانی کرده باشید. اگر گزینهٔ \f[CR]\-noprompt\f[R] مشخص شده باشد، هیچ تعاملی با کاربر وجود نخواهد داشت. .SH "هشدار گذرواژه‌ها (PASSWORDS WARNING)" بیشتر دستوراتی که روی یک keystore عمل می‌کنند به گذرواژهٔ مخزن نیاز دارند. برخی از دستورها به گذرواژهٔ کلید خصوصی/محرمانه احتیاج دارند. گذرواژه‌ها را می‌توان در خط فرمان در گزینه‌های \f[CR]\-storepass\f[R] و \f[CR]\-keypass\f[R] مشخص کرد. با این حال، یک گذرواژه نباید در خط فرمان یا در یک اسکریپت مشخص شود، مگر اینکه صرفاً برای آزمایش باشد یا اینکه در یک سامانهٔ امن قرار داشته باشید. هنگامی که یک گزینهٔ گذرواژهٔ الزامی را در خط فرمان مشخص نکنید، اعلان برای وارد کردن آن به شما نمایش داده می‌شود..SH "هشدار انطباق گواهی (CERTIFICATE CONFORMANCE WARNING)" سند \f[B]Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile\f[R] [https://tools.ietf.org/rfc/rfc5280.txt] نمایه‌ای برای گواهی‌های منطبق بر X.509 تعریف کرده است که مشخص می‌کند چه مقادیر و ترکیبی از مقادیر برای فیلدها و افزونه‌های (extensions) گواهی معتبر هستند. .PP دستور \f[CR]keytool\f[R] تمام این قوانین را اعمال نمی‌کند، بنابراین می‌تواند گواهی‌هایی تولید کند که با استاندارد مطابقت ندارند؛ مانند گواهی‌های خودامضاشده (self\-signed) که برای اهداف آزمایش داخلی استفاده می‌شوند. گواهی‌هایی که با استاندارد مطابقت ندارند ممکن است توسط JDK یا سایر برنامه‌ها رد شوند. کاربران باید اطمینان حاصل کنند که گزینه‌های صحیحی را برای \f[CR]\-dname\f[R]، \f[CR]\-ext\f[R] و غیره فراهم می‌کنند. .SH "وارد کردن یک گواهی معتمد جدید (IMPORT A NEW TRUSTED CERTIFICATE)" پیش از افزودن گواهی به keystore، دستور \f[CR]keytool\f[R] با تلاش برای ساخت یک زنجیره اعتماد (chain of trust) از آن گواهی تا یک گواهی خودامضاشده (متعلق به یک CA ریشه)، با استفاده از گواهی‌های معتمدی که از قبل در keystore موجود هستند، آن را اعتبارسنجی می‌کند. .PP اگر گزینهٔ \f[CR]\-trustcacerts\f[R] مشخص شده باشد، گواهی‌های اضافی برای زنجیره اعتماد در نظر گرفته می‌شوند، به‌ویژه گواهی‌های موجود در فایلی به نام \f[CR]cacerts\f[R]. .PP اگر دستور \f[CR]keytool\f[R] نتواند یک مسیر اعتماد از گواهی مورد نظر برای وارد شدن تا یک گواهی خودامضاشده (چه از keystore یا از فایل \f[CR]cacerts\f[R]) برقرار کند، اطلاعات گواهی چاپ می‌شود و از کاربر خواسته می‌شود تا با مقایسهٔ اثرانگشت‌های نمایش‌داده‌شده با اثرانگشت‌های به‌دست‌آمده از یک منبع اطلاعاتی دیگر (معتمد)، که ممکن است مالک گواهی باشد، آن را تأیید کند. بسیار دقت کنید تا قبل از وارد کردن گواهی به‌عنوان یک گواهی معتمد، از معتبر بودن آن اطمینان حاصل نمایید. سپس کاربر این گزینه را دارد که عملیات وارد کردن را لغو کند. اگر گزینهٔ \f[CR]\-noprompt\f[R] مشخص شده باشد، هیچ تعاملی با کاربر صورت نخواهد گرفت. .SH "وارد کردن پاسخ گواهی (IMPORT A CERTIFICATE REPLY)" هنگامی که یک پاسخ گواهی (certificate reply) را وارد می‌کنید، پاسخ گواهی با استفاده از گواهی‌های معتمد از keystore اعتبارسنجی می‌شود، و در صورت مشخص شدن گزینهٔ \f[CR]\-trustcacerts\f[R]، به‌صورت اختیاری با گواهی‌های پیکربندی‌شده در فایل keystore به نام \f[CR]cacerts\f[R] نیز اعتبارسنجی صورت می‌گیرد. .PP روش‌های تعیین معتمد بودن پاسخ گواهی به شرح زیر است: .IP \(bu 2 اگر پاسخ یک گواهی X.509 تکی باشد، دستور \f[CR]keytool\f[R] تلاش می‌کند تا یک زنجیره اعتماد برقرار کند که از پاسخ گواهی آغاز شده و به یک گواهی خودامضاشده (متعلق به یک CA ریشه) ختم می‌شود. پاسخ گواهی و سلسله‌مراتب گواهی‌ها برای احراز هویت پاسخ گواهی از زنجیره گواهی جدید نام‌های مستعار (aliases) استفاده می‌شوند. اگر زنجیره اعتمادی برقرار نشود، پاسخ گواهی وارد نخواهد شد. در این حالت، دستور \f[CR]keytool\f[R] گواهی را چاپ نمی‌کند و از کاربر سؤالی برای تأیید آن نمی‌پرسد، زیرا تعیین اصالت پاسخ گواهی برای کاربر بسیار دشوار است. .IP \(bu 2 اگر پاسخ یک زنجیره گواهی با قالب PKCS #7 یا دنباله‌ای از گواهی‌های X.509 باشد، زنجیره به‌گونه‌ای مرتب می‌شود که ابتدا گواهی کاربر و سپس صفر یا چند گواهی CA قرار می‌گیرند. اگر زنجیره به یک گواهی خودامضاشدهٔ CA ریشه ختم شود و گزینهٔ \f[CR]\-trustcacerts\f[R] مشخص شده باشد، دستور \f[CR]keytool\f[R] تلاش می‌کند آن را با هر یک از گواهی‌های معتمد موجود در keystore یا فایل keystore به نام \f[CR]cacerts\f[R] مطابقت دهد. اگر زنجیره به یک گواهی خودامضاشدهٔ CA ریشه ختم نشود و گزینهٔ \f[CR]\-trustcacerts\f[R] مشخص شده باشد، دستور \f[CR]keytool\f[R] تلاش می‌کند تا یکی از گواهی‌های معتمد را در keystore یا فایل keystore به نام \f[CR]cacerts\f[R] پیدا کرده و آن را به انتهای زنجیره اضافه کند. اگر گواهی یافت نشود و گزینهٔ \f[CR]\-noprompt\f[R] نیز مشخص نشده باشد، اطلاعات آخرین گواهی در زنجیره چاپ شده و از کاربر خواسته می‌شود تا آن را تأیید کند. .PP اگر کلید عمومی موجود در پاسخ گواهی با کلید عمومی کاربر که از قبل با \f[CR]alias\f[R] ذخیره شده است مطابقت داشته باشد، زنجیره گواهی قدیمی با زنجیره گواهی جدید موجود در پاسخ جایگزین می‌شود. زنجیره قدیمی تنها در صورت ارائه یک \f[CR]keypass\f[R] معتبر قابل جایگزینی است، بنابراین گذرواژه‌ای که برای محافظت از کلید خصوصی مدخل استفاده می‌شود باید ارائه شود. اگر هیچ گذرواژه‌ای ارائه نشود و گذرواژهٔ کلید خصوصی با گذرواژهٔ keystore متفاوت باشد، از کاربر خواسته می‌شود تا آن را وارد کند. .PP این دستور در انتشار‌های پیشین \f[CR]\-import\f[R] نامیده می‌شد. این نام قدیمی همچنان در این نسخه پشتیبانی می‌شود. نام جدید، یعنی \f[CR]\-importcert\f[R]، ترجیح داده می‌شود.