.\" Copyright (c) 1998, 2020, Oracle and/or its affiliates. All rights reserved. .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. .\" .\" This code is free software; you can redistribute it and/or modify it .\" under the terms of the GNU General Public License version 2 only, as .\" published by the Free Software Foundation. .\" .\" This code is distributed in the hope that it will be useful, but WITHOUT .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or .\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License .\" version 2 for more details (a copy is included in the LICENSE file that .\" accompanied this code). .\" .\" You should have received a copy of the GNU General Public License version .\" 2 along with this work; if not, write to the Free Software Foundation, .\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. .\" .\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA .\" or visit www.oracle.com if you need additional information or have any .\" questions. .\" .\"t .\" Automatically generated by Pandoc 2.3.1 .\" .TH "KEYTOOL" "1" "2021" "JDK 17" "JDK Commands" .hy .SH "نام (NAME)" .PP keytool \- ابزار مدیریت کلید و گواهی .SH "خلاصه دستور (SYNOPSIS)" .PP \f[CB]keytool\f[R] [\f[I]commands\f[R]] .TP .B \f[I]commands\f[R] دستورهای \f[CB]keytool\f[R] شامل موارد زیر است: .RS .IP \[bu] 2 \f[CB]\-certreq\f[R]: یک درخواست گواهی تولید می‌کند .IP \[bu] 2 \f[CB]\-changealias\f[R]: نام مستعار یک مدخل را تغییر می‌دهد .IP \[bu] 2 \f[CB]\-delete\f[R]: یک مدخل را حذف می‌کند .IP \[bu] 2 \f[CB]\-exportcert\f[R]: گواهی را صادر می‌کند .IP \[bu] 2 \f[CB]\-genkeypair\f[R]: یک جفت‌کلید تولید می‌کند .IP \[bu] 2 \f[CB]\-genseckey\f[R]: یک کلید محرمانه تولید می‌کند .IP \[bu] 2 \f[CB]\-gencert\f[R]: یک گواهی از روی درخواست گواهی تولید می‌کند .IP \[bu] 2 \f[CB]\-importcert\f[R]: یک گواهی یا زنجیره گواهی را وارد می‌کند .IP \[bu] 2 \f[CB]\-importpass\f[R]: یک گذرواژه را وارد می‌کند .IP \[bu] 2 \f[CB]\-importkeystore\f[R]: یک یا همه مدخل‌ها را از یک keystore دیگر وارد می‌کند .IP \[bu] 2 \f[CB]\-keypasswd\f[R]: گذرواژه کلید یک مدخل را تغییر می‌دهد .IP \[bu] 2 \f[CB]\-list\f[R]: مدخل‌های موجود در یک keystore را فهرست می‌کند .IP \[bu] 2 \f[CB]\-printcert\f[R]: محتوای یک گواهی را چاپ می‌کند .IP \[bu] 2 \f[CB]\-printcertreq\f[R]: محتوای یک درخواست گواهی را چاپ می‌کند .IP \[bu] 2 \f[CB]\-printcrl\f[R]: محتوای یک فایل فهرست ابطال گواهی (CRL) را چاپ می‌کند .IP \[bu] 2 \f[CB]\-storepasswd\f[R]: گذرواژه مخزن یک keystore را تغییر می‌دهد .IP \[bu] 2 \f[CB]\-showinfo\f[R]: اطلاعات مرتبط با امنیت را نمایش می‌دهد .PP برای مشاهده شرح این دستورها و گزینه‌های آن‌ها، بخش \f[B]Commands and Options\f[R] را ببینید. .RE .SH "توضیحات (DESCRIPTION)" .PP دستور \f[CB]keytool\f[R] یک ابزار مدیریت کلید و گواهی است. این ابزار به کاربران امکان می‌دهد جفت‌کلیدهای عمومی/خصوصی و گواهی‌های مرتبط خود را برای استفاده در خوداحرازهویتی (جایی که کاربر هویت خود را برای سایر کاربران و سرویس‌ها اثبات می‌کند) یا خدمات جامعیت داده و احراز هویت، با استفاده از امضاهای دیجیتال مدیریت کنند. دستور \f[CB]keytool\f[R] همچنین به کاربران اجازه می‌دهد کلیدهای عمومی (در قالب گواهی‌ها) همتایان ارتباطی خود را ذخیره (cache) کنند. .PP گواهی یک بیانیه دارای امضای دیجیتال از سوی یک نهاد (شخص، شرکت و غیره) است که بیان می‌کند کلید عمومی (و برخی اطلاعات دیگر) نهادی دیگر دارای مقداری مشخص است. هنگامی که داده‌ها به‌صورت دیجیتال امضا می‌شوند، امضا می‌تواند برای بررسی جامعیت و اصالت داده‌ها راستی‌آزمایی شود. جامعیت بدان معناست که داده‌ها تغییر نیافته یا دستکاری نشده‌اند، و اصالت بدین معنی است که داده‌ها از سوی همان فردی آمده است که ادعای ایجاد و امضای آن را دارد. .PP دستور \f[CB]keytool\f[R] همچنین به کاربران امکان می‌دهد کلیدهای محرمانه و عبارت‌های عبور استفاده‌شده در رمزنگاری و رمزگشایی متقارن (استاندارد رمزنگاری داده‌ها \- Data Encryption Standard) را مدیریت کنند. این ابزار همچنین می‌تواند سایر اطلاعات مرتبط با امنیت را نمایش دهد. .PP دستور \f[CB]keytool\f[R] کلیدها و گواهی‌ها را در یک keystore ذخیره می‌کند. .PP دستور \f[CB]keytool\f[R] از ویژگی‌های امنیتی \f[CB]jdk.certpath.disabledAlgorithms\f[R] و \f[CB]jdk.security.legacyAlgorithms\f[R] برای تعیین این‌که کدام الگوریتم‌ها یک ریسک امنیتی در نظر گرفته می‌شوند استفاده می‌کند. این دستور در هنگام استفاده از الگوریتم‌های غیرفعال‌شده یا قدیمی (legacy) هشدارهایی صادر می‌کند. ویژگی‌های امنیتی \f[CB]jdk.certpath.disabledAlgorithms\f[R] و \f[CB]jdk.security.legacyAlgorithms\f[R] در فایل \f[CB]java.security\f[R] (واقع در دایرکتوری \f[CB]$JAVA_HOME/conf/security\f[R] مربوط به JDK) تعریف شده‌اند..SH "نکات دستورات و گزینه‌ها (COMMAND AND OPTION NOTES)" .PP نکات زیر در مورد توضیحات بخش \f[B]دستورات و گزینه‌ها (Commands and Options)\f[R] صدق می‌کنند: .IP \[bu] 2 نام تمام دستورات و گزینه‌ها با علامت خط پیوند (\f[CB]\-\f[R]) آغاز می‌شود. .IP \[bu] 2 تنها یک دستور می‌تواند مشخص شود. .IP \[bu] 2 گزینه‌های هر دستور را می‌توان به هر ترتیبی وارد کرد. .IP \[bu] 2 دو نوع گزینه وجود دارد؛ یکی تک‌مقداری که تنها باید یک بار مشخص شود. اگر یک گزینهٔ تک‌مقداری چند بار وارد شود، مقدار آخرین گزینه استفاده خواهد شد. نوع دیگر چندمقداری است که می‌تواند چندین بار مشخص شود و تمام مقادیر آن استفاده می‌شوند. تنها گزینهٔ چندمقداری که در حال حاضر پشتیبانی می‌شود گزینهٔ \f[CB]\-ext\f[R] است که برای تولید افزونه‌های گواهی X.509v3 استفاده می‌شود. .IP \[bu] 2 تمام مواردی که کج‌نویس (ایتالیک) نبوده یا در آکولاد ({ }) یا قلاب ([ ]) قرار ندارند، باید دقیقاً به همان صورت وارد شوند. .IP \[bu] 2 آکولاد دور یک گزینه نشان می‌دهد در صورتی که گزینه در خط فرمان مشخص نشود، یک مقدار پیش‌فرض استفاده خواهد شد. همچنین آکولاد دور گزینه‌های \f[CB]\-v\f[R]، \f[CB]\-rfc\f[R] و \f[CB]\-J\f[R] نیز قرار گرفته است که تنها هنگام حضور در خط فرمان معنا دارند. این گزینه‌ها هیچ مقدار پیش‌فرضی ندارند. .IP \[bu] 2 قلاب دور یک گزینه نشان می‌دهد در صورتی که گزینه در خط فرمان مشخص نشود، مقدار آن از کاربر پرسیده می‌شود. برای گزینهٔ \f[CB]\-keypass\f[R]، اگر گزینه را در خط فرمان مشخص نکنید، دستور \f[CB]keytool\f[R] ابتدا سعی می‌کند از گذرواژهٔ keystore برای بازیابی کلید خصوصی/سری استفاده کند. اگر این تلاش ناموفق باشد، دستور \f[CB]keytool\f[R] گذرواژهٔ کلید خصوصی/سری را از شما درخواست می‌کند. .IP \[bu] 2 موارد کج‌نویس (مقادیر گزینه‌ها) نشان‌دهندهٔ مقادیر واقعی هستند که باید وارد شوند. برای مثال، قالب دستور \f[CB]\-printcert\f[R] به صورت زیر است: .RS 2 .RS .PP \f[CB]keytool\ \-printcert\f[R] {\f[CB]\-file\f[R] \f[I]cert_file\f[R]} {\f[CB]\-v\f[R]} .RE .PP هنگامی که یک دستور \f[CB]\-printcert\f[R] را مشخص می‌کنید، \f[I]cert_file\f[R] را با نام واقعی فایل جایگزین کنید، به صورت زیر: \f[CB]keytool\ \-printcert\ \-file\ VScert.cer\f[R] .RE .IP \[bu] 2 اگر مقادیر گزینه‌ها شامل فاصله (space) باشند، باید داخل علامت نقل‌قول قرار گیرند. .SH "دستورات و گزینه‌ها (COMMANDS AND OPTIONS)" .PP دستورات keytool و گزینه‌های آن‌ها را می‌توان بر اساس وظایفی که انجام می‌دهند دسته‌بندی کرد. .PP \f[B]دستورات مربوط به ایجاد یا افزودن داده به Keystore\f[R]: .IP \[bu] 2 \f[CB]\-gencert\f[R] .IP \[bu] 2 \f[CB]\-genkeypair\f[R] .IP \[bu] 2 \f[CB]\-genseckey\f[R] .IP \[bu] 2 \f[CB]\-importcert\f[R] .IP \[bu] 2 \f[CB]\-importpass\f[R] .PP \f[B]دستورات مربوط به وارد کردن محتوا از یک Keystore دیگر\f[R]: .IP \[bu] 2 \f[CB]\-importkeystore\f[R] .PP \f[B]دستورات مربوط به تولید درخواست گواهی\f[R]: .IP \[bu] 2 \f[CB]\-certreq\f[R] .PP \f[B]دستورات مربوط به برون‌بری داده‌ها\f[R]: .IP \[bu] 2 \f[CB]\-exportcert\f[R] .PP \f[B]دستورات مربوط به نمایش داده‌ها\f[R]: .IP \[bu] 2 \f[CB]\-list\f[R] .IP \[bu] 2 \f[CB]\-printcert\f[R] .IP \[bu] 2 \f[CB]\-printcertreq\f[R] .IP \[bu] 2 \f[CB]\-printcrl\f[R] .PP \f[B]دستورات مربوط به مدیریت Keystore\f[R]: .IP \[bu] 2 \f[CB]\-storepasswd\f[R] .IP \[bu] 2 \f[CB]\-keypasswd\f[R] .IP \[bu] 2 \f[CB]\-delete\f[R] .IP \[bu] 2 \f[CB]\-changealias\f[R] .PP \f[B]دستورات مربوط به نمایش اطلاعات امنیتی\f[R]: .IP \[bu] 2 \f[CB]\-showinfo\f[R].SH "دستورهای ایجاد یا افزودن داده به مخزن کلید (COMMANDS FOR CREATING OR ADDING DATA TO THE KEYSTORE)" .TP .B \f[CB]\-gencert\f[R] گزینه‌های موجود برای دستور \f[CB]\-gencert\f[R] عبارتند از: .RS .IP \[bu] 2 {\f[CB]\-rfc\f[R]}: خروجی در قالب RFC (درخواست برای نظر) .IP \[bu] 2 {\f[CB]\-infile\f[R] \f[I]infile\f[R]}: نام فایل ورودی .IP \[bu] 2 {\f[CB]\-outfile\f[R] \f[I]outfile\f[R]}: نام فایل خروجی .IP \[bu] 2 {\f[CB]\-alias\f[R] \f[I]alias\f[R]}: نام مستعار مدخل مورد پردازش .IP \[bu] 2 {\f[CB]\-sigalg\f[R] \f[I]sigalg\f[R]}: نام الگوریتم امضا .IP \[bu] 2 {\f[CB]\-dname\f[R] \f[I]dname\f[R]}: نام متمایز (Distinguished name) .IP \[bu] 2 {\f[CB]\-startdate\f[R] \f[I]startdate\f[R]}: تاریخ و زمان آغاز اعتبار گواهی .IP \[bu] 2 {\f[CB]\-ext\f[R] \f[I]ext\f[R]}*: افزونه‌ی X.509 .IP \[bu] 2 {\f[CB]\-validity\f[R] \f[I]days\f[R]}: تعداد روزهای اعتبار .IP \[bu] 2 [\f[CB]\-keypass\f[R] \f[I]arg\f[R]]: گذرواژه کلید .IP \[bu] 2 {\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: نام مخزن کلید (keystore) .IP \[bu] 2 [\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه مخزن کلید .IP \[bu] 2 {\f[CB]\-storetype\f[R] \f[I]type\f[R]}: نوع مخزن کلید .IP \[bu] 2 {\f[CB]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده (Provider) .IP \[bu] 2 {\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیتی بر پایه نام (مانند SunPKCS11) با یک آرگومان پیکربندی اختیاری. مقدار ارائه‌دهنده امنیتی، نام ارائه‌دهنده امنیتی‌ای است که در یک ماژول تعریف شده باشد. .RS 2 .PP برای نمونه، .RS .PP \f[CB]keytool\ \-addprovider\ SunPKCS11\ \-providerarg\ some.cfg\ ...\f[R] .RE .PP \f[B]نکته:\f[R] .PP به دلایل سازگاری، ارائه‌دهنده SunPKCS11 همچنان می‌تواند با \f[CB]\-providerclass\ sun.security.pkcs11.SunPKCS11\f[R] بارگذاری شود حتی اگر اکنون درون یک ماژول تعریف شده باشد. این تنها ماژول موجود در JDK است که به پیکربندی نیاز دارد، و بنابراین بیشترین استفاده را با گزینه \f[CB]\-providerclass\f[R] دارد. برای ارائه‌دهندگان امنیتی موروثی واقع در classpath که از طریق reflection بارگذاری می‌شوند، همچنان باید از \f[CB]\-providerclass\f[R] استفاده شود. .RE .IP \[bu] 2 {\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیتی با نام کامل کلاس به همراه یک آرگومان پیکربندی اختیاری. .RS 2 .PP برای نمونه، اگر \f[CB]MyProvider\f[R] یک ارائه‌دهنده قدیمی باشد که از طریق reflection بارگذاری می‌شود، .RS .PP \f[CB]keytool\ \-providerclass\ com.example.MyProvider\ ...\f[R] .RE .RE .IP \[bu] 2 {\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس (classpath) ارائه‌دهنده .IP \[bu] 2 {\f[CB]\-v\f[R]}: خروجی مشروح و پرگو .IP \[bu] 2 {\f[CB]\-protected\f[R]}: گذرواژه از طریق سازوکاری حفاظت‌شده ارائه می‌شود .PP از دستور \f[CB]\-gencert\f[R] برای تولید یک گواهی در پاسخ به یک فایل درخواست گواهی (که می‌تواند با دستور \f[CB]keytool\ \-certreq\f[R] ایجاد شود) استفاده کنید. این دستور درخواست را یا از \f[I]infile\f[R] و یا در صورت عدم ذکر، از ورودی استاندارد می‌خواند، آن را با استفاده از کلید خصوصی نام مستعار (alias) امضا می‌کند و گواهی X.509 را در \f[I]outfile\f[R] یا در صورت عدم ذکر در خروجی استاندارد قرار می‌دهد. هنگامی که \f[CB]\-rfc\f[R] مشخص شده باشد، قالب خروجی با کدگذاری Base64 در قالب PEM خواهد بود؛ در غیر این صورت، یک DER باینری ایجاد می‌شود. .PP مقدار \f[CB]\-sigalg\f[R] الگوریتمی را مشخص می‌کند که باید برای امضای گواهی استفاده شود. آرگومان \f[I]startdate\f[R] تاریخ و زمان آغاز معتبر بودن گواهی است. آرگومان \f[I]days\f[R] تعداد روزهایی را تعیین می‌کند که گواهی باید در طول آن‌ها معتبر در نظر گرفته شود. .PP هنگامی که \f[I]dname\f[R] ارائه شود، به عنوان موضوع (subject) گواهی تولیدشده استفاده می‌شود. در غیر این صورت، از موضوع موجود در درخواست گواهی استفاده خواهد شد. .PP مقدار \f[CB]\-ext\f[R] نشان می‌دهد چه افزونه‌های X.509ای در گواهی تعبیه خواهند شد. برای آگاهی از ساختار دستوری \f[CB]\-ext\f[R]، بخش \f[B]Common Command Options\f[R] را مطالعه کنید. .PP گزینه \f[CB]\-gencert\f[R] به شما امکان می‌دهد زنجیره‌های گواهی ایجاد کنید. مثال زیر گواهی‌ای با نام \f[CB]e1\f[R] ایجاد می‌کند که شامل سه گواهی در زنجیره گواهی خود است. .PP دستورهای زیر چهار جفت‌کلید با نام‌های \f[CB]ca\f[R]، \f[CB]ca1\f[R]، \f[CB]ca2\f[R] و \f[CB]e1\f[R] ایجاد می‌کنند: .IP .nf \f[CB] 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 \f[R] .fi .PP دو دستور زیر یک زنجیره از گواهی‌های امضاشده ایجاد می‌کنند؛ \f[CB]ca\f[R] گواهی \f[CB]ca1\f[R] را امضا می‌کند و \f[CB]ca1\f[R] گواهی \f[CB]ca2\f[R] را امضا می‌کند، که همگی خود\-صادرشده (self\-issued) هستند: .IP .nf \f[CB] 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 \f[R] .fi .PP دستور زیر گواهی \f[CB]e1\f[R] را ایجاد کرده و آن را در فایل \f[CB]e1.cert\f[R] ذخیره می‌کند که توسط \f[CB]ca2\f[R] امضا شده است. در نتیجه، \f[CB]e1\f[R] باید شامل \f[CB]ca\f[R]، \f[CB]ca1\f[R] و \f[CB]ca2\f[R] در زنجیره گواهی خود باشد: .RS .PP \f[CB]keytool\ \-alias\ e1\ \-certreq\ |\ keytool\ \-alias\ ca2\ \-gencert\ >\ e1.cert\f[R] .RE .RE .TP .B \f[CB]\-genkeypair\f[R] گزینه‌های موجود برای دستور \f[CB]\-genkeypair\f[R] عبارتند از: .RS .IP \[bu] 2 {\f[CB]\-alias\f[R] \f[I]alias\f[R]}: نام مستعار مدخل مورد پردازش .IP \[bu] 2 \f[CB]\-keyalg\f[R] \f[I]alg\f[R]: نام الگوریتم کلید .IP \[bu] 2 {\f[CB]\-keysize\f[R] \f[I]size\f[R]}: اندازه کلید بر حسب بیت .IP \[bu] 2 {\f[CB]\-groupname\f[R] \f[I]name\f[R]}: نام گروه. برای نمونه، نام یک منحنی بیضوی (Elliptic Curve). .IP \[bu] 2 {\f[CB]\-sigalg\f[R] \f[I]alg\f[R]}: نام الگوریتم امضا .IP \[bu] 2 {\f[CB]\-signer\f[R] \f[I]alias\f[R]}: نام مستعار امضاکننده .IP \[bu] 2 [\f[CB]\-signerkeypass\f[R] \f[I]arg\f[R]]: گذرواژه کلید امضاکننده .IP \[bu] 2 [\f[CB]\-dname\f[R] \f[I]name\f[R]]: نام متمایز (Distinguished name) .IP \[bu] 2 {\f[CB]\-startdate\f[R] \f[I]date\f[R]}: تاریخ و زمان آغاز اعتبار گواهی .IP \[bu] 2 {\f[CB]\-ext\f[R] \f[I]value\f[R]}*: افزونه‌ی X.509 .IP \[bu] 2 {\f[CB]\-validity\f[R] \f[I]days\f[R]}: تعداد روزهای اعتبار .IP \[bu] 2 [\f[CB]\-keypass\f[R] \f[I]arg\f[R]]: گذرواژه کلید .IP \[bu] 2 {\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: نام مخزن کلید .IP \[bu] 2 [\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه مخزن کلید.IP \[bu] 2 {\f[CB]\-storetype\f[R] \f[I]type\f[R]}: نوع مخزن کلید (keystore) .IP \[bu] 2 {\f[CB]\-providername\f[R] \f[I]name\f[R]}: نام تأمین‌کننده (provider) .IP \[bu] 2 {\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن تأمین‌کنندهٔ امنیتی بر پایهٔ نام (مانند SunPKCS11) همراه با یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]] }: افزودن تأمین‌کنندهٔ امنیتی با نام کامل کلاس (fully qualified class name) همراه با یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس (classpath) تأمین‌کننده .IP \[bu] 2 {\f[CB]\-v\f[R]}: خروجی پرگو (با جزئیات کامل) .IP \[bu] 2 {\f[CB]\-protected\f[R]}: ارائهٔ گذرواژه از طریق یک سازوکار حفاظت‌شده .PP از دستور \f[CB]\-genkeypair\f[R] برای تولید یک جفت‌کلید (یک کلید عمومی و کلید خصوصی مرتبط با آن) استفاده کنید. هنگامی که گزینهٔ \f[CB]\-signer\f[R] مشخص نشده باشد، کلید عمومی در یک گواهی خودامضای X.509 v3 قرار گرفته و به عنوان یک زنجیره گواهی تک‌عضوی ذخیره می‌شود. هنگامی که گزینهٔ \f[CB]\-signer\f[R] مشخص شده باشد، یک گواهی جدید تولید شده و توسط امضاکنندهٔ تعیین‌شده امضا می‌شود و به عنوان یک زنجیره گواهی چندعضوی ذخیره می‌گردد (شامل خود گواهی تولیدشده و زنجیره گواهیِ امضاکننده). زنجیره گواهی و کلید خصوصی در یک مدخل جدید مخزن کلید ذخیره می‌شوند که با نام مستعار آن شناسایی می‌شود. .PP مقدار \f[CB]\-keyalg\f[R] الگوریتم مورد استفاده برای تولید جفت‌کلید را مشخص می‌کند، و مقدار \f[CB]\-keysize\f[R] اندازهٔ هر کلید تولیدشده را تعیین می‌نماید. مقدار \f[CB]\-sigalg\f[R] الگوریتمی را مشخص می‌کند که باید برای امضای گواهی استفاده شود. این الگوریتم باید با مقدار \f[CB]\-keyalg\f[R] سازگار باشد. .PP مقدار \f[CB]\-groupname\f[R] گروه نام‌گذاری‌شدهٔ (برای نمونه، نام استاندارد یا از پیش تعریف‌شدهٔ یک منحنی بیضوی) کلیدی که باید تولید شود را مشخص می‌کند. تنها یکی از دو گزینهٔ \f[CB]\-groupname\f[R] و \f[CB]\-keysize\f[R] را می‌توان مشخص کرد. .PP مقدار \f[CB]\-signer\f[R] نام مستعار یک \f[CB]PrivateKeyEntry\f[R] متعلق به امضاکننده‌ای را مشخص می‌کند که از قبل در مخزن کلید وجود دارد. این گزینه برای امضای گواهی با کلید خصوصی امضاکننده استفاده می‌شود. این مورد به ویژه برای الگوریتم‌های توافق کلید (یعنی زمانی که مقدار \f[CB]\-keyalg\f[R] برابر با \f[CB]XDH\f[R]، \f[CB]X25519\f[R]، \f[CB]X448\f[R]، یا \f[CB]DH\f[R] است) مفید است، زیرا این کلیدها نمی‌توانند برای امضاهای دیجیتال استفاده شوند و بنابراین امکان ایجاد یک گواهی خودامضا وجود ندارد. .PP مقدار \f[CB]\-signerkeypass\f[R] گذرواژهٔ کلید خصوصی امضاکننده را مشخص می‌کند. در صورتی که کلید خصوصی مدخلِ امضاکننده با گذرواژه‌ای متفاوت از گذرواژهٔ مخزن محافظت شده باشد، می‌توان آن را مشخص کرد. .PP مقدار \f[CB]\-dname\f[R] نام متمایز X.500 (Distinguished Name) را مشخص می‌کند که باید با مقدار \f[CB]\-alias\f[R] مرتبط شود. اگر گزینهٔ \f[CB]\-signer\f[R] مشخص نشده باشد، فیلدهای صادرکننده (issuer) و موضوع (subject) گواهی خودامضا با نام متمایز مشخص‌شده مقداردهی می‌شوند. اگر گزینهٔ \f[CB]\-signer\f[R] مشخص شده باشد، فیلد موضوع گواهی با نام متمایز مشخص‌شده و فیلد صادرکننده با فیلد موضوع گواهیِ امضاکننده مقداردهی می‌شوند. اگر نام متمایز در خط فرمان ارائه نشود، از کاربر خواسته می‌شود تا آن را وارد کند. .PP مقدار \f[CB]\-keypass\f[R] گذرواژه‌ای است که برای محافظت از کلید خصوصیِ جفت‌کلید تولیدشده استفاده می‌شود. اگر گذرواژه‌ای ارائه نشود، از کاربر خواسته می‌شود تا آن را وارد کند. اگر هنگام درخواست، کلید \f[B]Return\f[R] را فشار دهید، گذرواژهٔ کلید برابر با همان گذرواژهٔ مخزن کلید تنظیم می‌شود. مقدار \f[CB]\-keypass\f[R] باید حداقل شش نویسه داشته باشد. .PP مقدار \f[CB]\-startdate\f[R] زمان صدور گواهی را مشخص می‌کند که با عنوان مقدار «Not Before» در فیلد Validity (اعتبار) گواهی X.509 نیز شناخته می‌شود. .PP مقدار این گزینه می‌تواند در یکی از این دو قالب تنظیم شود: .PP ([\f[CB]+\-\f[R]]\f[I]nnn\f[R][\f[CB]ymdHMS\f[R]])+ .PP [\f[I]yyyy\f[R]\f[CB]/\f[R]\f[I]mm\f[R]\f[CB]/\f[R]\f[I]dd\f[R]] [\f[I]HH\f[R]\f[CB]:\f[R]\f[I]MM\f[R]\f[CB]:\f[R]\f[I]SS\f[R]] .PP در قالب نخست، زمان صدور به اندازهٔ مقدار مشخص‌شده نسبت به زمان کنونی جابه‌جا می‌شود. این مقدار، ترکیبی از دنباله‌ای از زیرمقدارها است. درون هر زیرمقدار، علامت بعلاوه (+) به معنای جابه‌جایی به جلو، و علامت منها (\-) به معنای جابه‌جایی به عقب است. زمان جابه‌جایی شامل \f[I]nnn\f[R] واحد از سال، ماه، روز، ساعت، دقیقه یا ثانیه است (که به ترتیب با یک نویسه از \f[CB]y\f[R]، \f[CB]m\f[R]، \f[CB]d\f[R]، \f[CB]H\f[R]، \f[CB]M\f[R] یا \f[CB]S\f[R] نشان داده می‌شوند). مقدار دقیق زمان صدور با استفاده از متد \f[CB]java.util.GregorianCalendar.add(int\ field,\ int\ amount)\f[R] روی هر زیرمقدار، از چپ به راست محاسبه می‌شود. برای نمونه، زمان صدور می‌تواند با کد زیر مشخص شود: .IP .nf \f[CB] Calendar\ c\ =\ new\ GregorianCalendar(); c.add(Calendar.YEAR,\ \-1); c.add(Calendar.MONTH,\ 1); c.add(Calendar.DATE,\ \-1); return\ c.getTime() \f[R] .fi .PP در قالب دوم، کاربر زمان دقیق صدور را در دو بخش مشخص می‌کند: سال/ماه/روز و ساعت:دقیقه:ثانیه (بر اساس منطقهٔ زمانی محلی). کاربر می‌تواند تنها یک بخش را ارائه دهد، که به این معناست که بخش دیگر با تاریخ (یا زمان) فعلی یکسان خواهد بود. کاربر باید دقیقاً همان تعداد ارقام نشان‌داده‌شده در تعریف قالب را وارد کند (در صورت کوتاه‌تر بودن، با 0 پر شود). هنگامی که هم تاریخ و هم زمان ارائه شوند، یک (و تنها یک) نویسهٔ فاصله میان دو بخش قرار می‌گیرد. ساعت همیشه باید در قالب ۲۴\-ساعته وارد شود. .PP هنگامی که این گزینه ارائه نشود، تاریخ آغاز برابر با زمان کنونی خواهد بود. این گزینه را تنها یک بار می‌توان مشخص کرد. .PP مقدار \f[I]date\f[R] تعداد روزهایی را مشخص می‌کند (با شروع از تاریخی که توسط \f[CB]\-startdate\f[R] مشخص شده، یا تاریخ کنونی هنگامی که \f[CB]\-startdate\f[R] مشخص نشده است) که گواهی باید معتبر در نظر گرفته شود. .RE .TP .B \f[CB]\-genseckey\f[R] گزینه‌های موجود برای دستور \f[CB]\-genseckey\f[R] به شرح زیر است: .RS .IP \[bu] 2 {\f[CB]\-alias\f[R] \f[I]alias\f[R]}: نام مستعار مدخل برای پردازش .IP \[bu] 2 [\f[CB]\-keypass\f[R] \f[I]arg\f[R]]: گذرواژهٔ کلید .IP \[bu] 2 \f[CB]\-keyalg\f[R] \f[I]alg\f[R]: نام الگوریتم کلید .IP \[bu] 2 {\f[CB]\-keysize\f[R] \f[I]size\f[R]}: اندازهٔ بیتیِ کلید .IP \[bu] 2 {\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: نام مخزن کلید .IP \[bu] 2 [\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژهٔ مخزن کلید .IP \[bu] 2 {\f[CB]\-storetype\f[R] \f[I]type\f[R]}: نوع مخزن کلید .IP \[bu] 2 {\f[CB]\-providername\f[R] \f[I]name\f[R]}: نام تأمین‌کننده .IP \[bu] 2 {\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن تأمین‌کنندهٔ امنیتی بر پایهٔ نام (مانند SunPKCS11) همراه با یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن تأمین‌کنندهٔ امنیتی با نام کامل کلاس همراه با یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس تأمین‌کننده .IP \[bu] 2 {\f[CB]\-v\f[R]}: خروجی پرگو (با جزئیات کامل) .IP \[bu] 2 {\f[CB]\-protected\f[R]}: ارائهٔ گذرواژه از طریق یک سازوکار حفاظت‌شده .PP از دستور \f[CB]\-genseckey\f[R] برای تولید یک کلید مخفی (secret key) و ذخیرهٔ آن در یک مدخل جدید \f[CB]KeyStore.SecretKeyEntry\f[R] با نام مستعار مشخص‌شده توسط \f[CB]alias\f[R] استفاده کنید. .PP مقدار \f[CB]\-keyalg\f[R] الگوریتم مورد استفاده برای تولید کلید مخفی را مشخص می‌کند، و مقدار \f[CB]\-keysize\f[R] اندازهٔ کلید تولیدشده را تعیین می‌نماید. مقدار \f[CB]\-keypass\f[R] گذرواژه‌ای است که از کلید مخفی محافظت می‌کند. اگر گذرواژه‌ای ارائه نشود، از کاربر خواسته می‌شود آن را وارد کند. اگر هنگام درخواست، کلید \f[B]Return\f[R] را فشار دهید، گذرواژهٔ کلید برابر با همان گذرواژه‌ای که برای \f[CB]\-keystore\f[R] استفاده شده است تنظیم می‌شود. مقدار \f[CB]\-keypass\f[R] باید حداقل شامل شش نویسه باشد. .RE.TP .B \f[CB]\-importcert\f[R] گزینه‌های موجود برای دستور \f[CB]\-importcert\f[R] به شرح زیر است: .RS .IP \[bu] 2 {\f[CB]\-noprompt\f[R]}: بدون درخواست تأیید از کاربر .IP \[bu] 2 {\f[CB]\-trustcacerts\f[R]}: اعتماد به گواهی‌های موجود در cacerts .IP \[bu] 2 {\f[CB]\-protected\f[R]}: گذرواژه از طریق سازوکار حفاظت‌شده ارائه می‌شود .IP \[bu] 2 {\f[CB]\-alias\f[R] \f[I]alias\f[R]}: نام مستعار (alias) مدخلی که باید پردازش شود .IP \[bu] 2 {\f[CB]\-file\f[R] \f[I]file\f[R]}: نام فایل ورودی .IP \[bu] 2 [\f[CB]\-keypass\f[R] \f[I]arg\f[R]]: گذرواژهٔ کلید .IP \[bu] 2 {\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: نام keystore .IP \[bu] 2 {\f[CB]\-cacerts\f[R]}: دسترسی به keystore از نوع cacerts .IP \[bu] 2 [\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژهٔ keystore .IP \[bu] 2 {\f[CB]\-storetype\f[R] \f[I]type\f[R]}: نوع keystore .IP \[bu] 2 {\f[CB]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده (provider) .IP \[bu] 2 {\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهندهٔ امنیتی با نام (مانند SunPKCS11) به همراه یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهندهٔ امنیتی با نام کامل کلاس به همراه یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس (classpath) ارائه‌دهنده .IP \[bu] 2 {\f[CB]\-v\f[R]}: خروجی پرجزئیات .PP از دستور \f[CB]\-importcert\f[R] برای خواندن گواهی یا زنجیرهٔ گواهی (که دومی در یک پاسخ با قالب PKCS#7 یا به صورت دنباله‌ای از گواهی‌های X.509 ارائه می‌شود) از \f[CB]\-file\f[R] \f[I]file\f[R] و ذخیرهٔ آن در مدخل \f[CB]keystore\f[R] که با \f[CB]\-alias\f[R] مشخص شده، استفاده کنید. اگر \f[CB]\-file\f[R] \f[I]file\f[R] مشخص نشده باشد، گواهی یا زنجیرهٔ گواهی از \f[CB]stdin\f[R] خوانده می‌شود. .PP دستور \f[CB]keytool\f[R] می‌تواند گواهی‌های X.509 نگارش‌های ۱، ۲ و ۳، و نیز زنجیره‌های گواهی در قالب PKCS#7 متشکل از این نوع گواهی‌ها را وارد کند. داده‌هایی که قرار است وارد شوند باید با قالب کدگذاری باینری یا در قالب کدگذاری قابل‌چاپ (که با نام کدگذاری Base64 نیز شناخته می‌شود) طبق استاندارد RFC 1421 اینترنت ارائه شوند. در حالت دوم، کدگذاری باید در ابتدا با رشته‌ای که با \f[CB]\-\-\-\-\-BEGIN\f[R] آغاز می‌شود و در انتها با رشته‌ای که با \f[CB]\-\-\-\-\-END\f[R] شروع می‌شود، محدود شده باشد. .PP وارد کردن یک گواهی به دو دلیل انجام می‌شود: افزودن آن به فهرست گواهی‌های مورد اعتماد، و وارد کردن یک پاسخ گواهی دریافت‌شده از مرجع صدور گواهی (CA) که در نتیجهٔ ارسال یک درخواست امضای گواهی (CSR) به آن CA صادر شده است. دستور \f[CB]\-certreq\f[R] را در \f[B]Commands for Generating a Certificate Request\f[R] ببینید. .PP نوع عمل وارد کردن بر اساس مقدار گزینهٔ \f[CB]\-alias\f[R] تعیین می‌شود. اگر alias به مدخل یک کلید اشاره نکند، دستور \f[CB]keytool\f[R] فرض می‌کند که در حال افزودن یک مدخل گواهی معتمد هستید. در این حالت، نباید از قبل چنین نام مستعاری در keystore وجود داشته باشد. اگر این alias وجود داشته باشد، دستور \f[CB]keytool\f[R] یک خطا خروجی می‌دهد زیرا گواهی معتمدی از قبل برای آن alias وجود دارد، و گواهی را وارد نمی‌کند. اگر \f[CB]\-alias\f[R] به مدخل یک کلید اشاره کند، دستور \f[CB]keytool\f[R] فرض می‌کند که در حال وارد کردن یک پاسخ گواهی هستید. .RE .TP .B \f[CB]\-importpass\f[R] گزینه‌های موجود برای دستور \f[CB]\-importpass\f[R] به شرح زیر است: .RS .IP \[bu] 2 {\f[CB]\-alias\f[R] \f[I]alias\f[R]}: نام مستعار (alias) مدخلی که باید پردازش شود .IP \[bu] 2 [\f[CB]\-keypass\f[R] \f[I]arg\f[R]]: گذرواژهٔ کلید .IP \[bu] 2 {\f[CB]\-keyalg\f[R] \f[I]alg\f[R]}: نام الگوریتم کلید .IP \[bu] 2 {\f[CB]\-keysize\f[R] \f[I]size\f[R]}: اندازهٔ بیتی کلید .IP \[bu] 2 {\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: نام keystore .IP \[bu] 2 [\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژهٔ keystore .IP \[bu] 2 {\f[CB]\-storetype\f[R] \f[I]type\f[R]}: نوع keystore .IP \[bu] 2 {\f[CB]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده (provider) .IP \[bu] 2 {\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهندهٔ امنیتی با نام (مانند SunPKCS11) به همراه یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهندهٔ امنیتی با نام کامل کلاس به همراه یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس (classpath) ارائه‌دهنده .IP \[bu] 2 {\f[CB]\-v\f[R]}: خروجی پرجزئیات .IP \[bu] 2 {\f[CB]\-protected\f[R]}: گذرواژه از طریق یک سازوکار حفاظت‌شده ارائه می‌شود .PP از دستور \f[CB]\-importpass\f[R] برای وارد کردن یک عبارت عبور (passphrase) و ذخیرهٔ آن در یک \f[CB]KeyStore.SecretKeyEntry\f[R] جدید که با \f[CB]\-alias\f[R] مشخص شده، استفاده کنید. عبارت عبور می‌تواند از طریق جریان ورودی استاندارد ارائه شود؛ در غیر این صورت از کاربر خواسته می‌شود آن را وارد کند. گزینهٔ \f[CB]\-keypass\f[R] گذرواژه‌ای را برای محافظت از عبارت عبور واردشده فراهم می‌کند. اگر گذرواژه‌ای تعیین نشده باشد، از کاربر خواسته می‌شود آن را وارد کند. اگر در اعلان کلید \f[B]Return\f[R] را فشار دهید، گذرواژهٔ کلید برابر با همان گذرواژهٔ به‌کاررفته برای \f[CB]keystore\f[R] تنظیم می‌شود. مقدار \f[CB]\-keypass\f[R] باید دست‌کم شامل شش نویسه باشد. .RE.SH "دستورهای وارد کردن محتوا از KEYSTORE دیگر (COMMANDS FOR IMPORTING CONTENTS FROM ANOTHER KEYSTORE)" .TP .B \f[CB]\-importkeystore\f[R] گزینه‌های موجود برای دستور \f[CB]\-importkeystore\f[R] به شرح زیر است: .RS .IP \[bu] 2 \f[CB]\-srckeystore\f[R] \f[I]keystore\f[R]: نام keystore مبدأ .IP \[bu] 2 {\f[CB]\-destkeystore\f[R] \f[I]keystore\f[R]}: نام keystore مقصد .IP \[bu] 2 {\f[CB]\-srcstoretype\f[R] \f[I]type\f[R]}: نوع keystore مبدأ .IP \[bu] 2 {\f[CB]\-deststoretype\f[R] \f[I]type\f[R]}: نوع keystore مقصد .IP \[bu] 2 [\f[CB]\-srcstorepass\f[R] \f[I]arg\f[R]]: گذرواژه keystore مبدأ .IP \[bu] 2 [\f[CB]\-deststorepass\f[R] \f[I]arg\f[R]]: گذرواژه keystore مقصد .IP \[bu] 2 {\f[CB]\-srcprotected\f[R]}: keystore مبدأ محافظت‌شده با گذرواژه .IP \[bu] 2 {\f[CB]\-destprotected\f[R]}: keystore مقصد محافظت‌شده با گذرواژه .IP \[bu] 2 {\f[CB]\-srcprovidername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده keystore مبدأ .IP \[bu] 2 {\f[CB]\-destprovidername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده keystore مقصد .IP \[bu] 2 {\f[CB]\-srcalias\f[R] \f[I]alias\f[R]}: نام مستعار (alias) مبدأ .IP \[bu] 2 {\f[CB]\-destalias\f[R] \f[I]alias\f[R]}: نام مستعار (alias) مقصد .IP \[bu] 2 [\f[CB]\-srckeypass\f[R] \f[I]arg\f[R]]: گذرواژه کلید مبدأ .IP \[bu] 2 [\f[CB]\-destkeypass\f[R] \f[I]arg\f[R]]: گذرواژه کلید مقصد .IP \[bu] 2 {\f[CB]\-noprompt\f[R]}: عدم نمایش اعلان (prompt) .IP \[bu] 2 {\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]: افزودن ارائه‌دهنده امنیتی بر اساس نام (مانند SunPKCS11) به همراه یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیتی با نام کامل کلاس (fully qualified class name) به همراه یک آرگومان پیکربندی اختیاری .IP \[bu] 2 {\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس (classpath) ارائه‌دهنده .IP \[bu] 2 {\f[CB]\-v\f[R]}: خروجی با جزئیات کامل (verbose) .PP \f[B]نکته:\f[R] .PP این خط اول تمامی گزینه‌ها است: .RS .PP \f[CB]\-srckeystore\f[R] \f[I]keystore\f[R] \f[CB]\-destkeystore\f[R] \f[I]keystore\f[R] .RE .PP از دستور \f[CB]\-importkeystore\f[R] برای وارد کردن یک مدخل مشخص یا تمامی مدخل‌ها از یک keystore مبدأ به یک keystore مقصد استفاده کنید. .PP \f[B]نکته:\f[R] .PP اگر هنگام استفاده از دستور \f[CB]keytool\ \-importkeystore\f[R] گزینه \f[CB]\-destkeystore\f[R] را تعیین نکنید، keystore پیش‌فرض مورد استفاده \f[CB]$HOME/.keystore\f[R] خواهد بود. .PP هنگامی که گزینه \f[CB]\-srcalias\f[R] ارائه شود، دستور تک‌مدخل شناسایی‌شده با نام مستعار را به keystore مقصد وارد می‌کند. اگر نام مستعار مقصد با \f[CB]\-destalias\f[R] تعیین نشده باشد، از \f[CB]\-srcalias\f[R] به عنوان نام مستعار مقصد استفاده می‌شود. اگر مدخل مبدأ با گذرواژه محافظت شده باشد، از \f[CB]\-srckeypass\f[R] برای بازیابی آن مدخل استفاده می‌شود. اگر \f[CB]\-srckeypass\f[R] ارائه نشود، دستور \f[CB]keytool\f[R] تلاش می‌کند تا از \f[CB]\-srcstorepass\f[R] برای بازیابی مدخل استفاده کند. اگر \f[CB]\-srcstorepass\f[R] ارائه نشده باشد یا نادرست باشد، برای دریافت گذرواژه به کاربر اعلان نشان داده می‌شود. مدخل مقصد با \f[CB]\-destkeypass\f[R] محافظت می‌شود. اگر \f[CB]\-destkeypass\f[R] تعیین نشود، مدخل مقصد با همان گذرواژه مدخل مبدأ محافظت خواهد شد. به عنوان مثال، اکثر ابزارهای شخص ثالث نیازمند این هستند که \f[CB]storepass\f[R] و \f[CB]keypass\f[R] در یک keystore از نوع PKCS #12 یکسان باشند. برای ایجاد یک keystore از نوع PKCS#12 برای این ابزارها، همواره گزینه \f[CB]\-destkeypass\f[R] را برابر با \f[CB]\-deststorepass\f[R] تعیین کنید. .PP اگر گزینه \f[CB]\-srcalias\f[R] مشخص نشود، تمامی مدخل‌های موجود در keystore مبدأ به keystore مقصد وارد می‌شوند. هر مدخل مقصد تحت همان نام مستعار مدخل مبدأ ذخیره می‌شود. اگر مدخل مبدأ با گذرواژه محافظت شده باشد، از \f[CB]\-srcstorepass\f[R] برای بازیابی مدخل استفاده می‌شود. اگر \f[CB]\-srcstorepass\f[R] ارائه نشود یا اشتباه باشد، برای دریافت گذرواژه به کاربر اعلان نشان داده می‌شود. اگر نوع یک مدخل در keystore مبدأ توسط keystore مقصد پشتیبانی نشود، یا اگر هنگام ذخیره یک مدخل در keystore مقصد خطایی رخ دهد، از کاربر خواسته می‌شود که یا از آن مدخل رد شده و ادامه دهد، یا خارج شود. مدخل مقصد با گذرواژه مدخل مبدأ محافظت می‌شود. .PP اگر نام مستعار مقصد از قبل در keystore مقصد موجود باشد، به کاربر اعلان داده می‌شود تا مشخص کند که روی مدخل قبلی بازنویسی انجام شود یا یک مدخل جدید با یک نام مستعار متفاوت ایجاد گردد. .PP اگر گزینه \f[CB]\-noprompt\f[R] داده شود، از کاربر برای نام مستعار جدید مقصد سؤالی پرسیده نخواهد شد. مدخل‌های موجود با همان نام مستعار مقصد رونویسی می‌شوند. مدخل‌هایی که قابلیت وارد شدن ندارند نادیده گرفته شده و یک هشدار نمایش داده می‌شود. .RE.SH "دستورهای تولید درخواست گواهی (COMMANDS FOR GENERATING A CERTIFICATE REQUEST)" .TP .B \f[CB]\-certreq\f[R] گزینه‌های موجود برای دستور \f[CB]\-certreq\f[R] به شرح زیر است: .RS .IP \[bu] 2 {\f[CB]\-alias\f[R] \f[I]alias\f[R]}: نام مستعار مدخل مورد پردازش .IP \[bu] 2 {\f[CB]\-sigalg\f[R] \f[I]alg\f[R]}: نام الگوریتم امضا .IP \[bu] 2 {\f[CB]\-file\f[R] \f[I]file\f[R]}: نام فایل خروجی .IP \[bu] 2 [ \f[CB]\-keypass\f[R] \f[I]arg\f[R]]: گذرواژه کلید .IP \[bu] 2 {\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: نام keystore .IP \[bu] 2 {\f[CB]\-dname\f[R] \f[I]name\f[R]}: نام متمایز (Distinguished name) .IP \[bu] 2 {\f[CB]\-ext\f[R] \f[I]value\f[R]}: افزونه X.509 .IP \[bu] 2 [\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه keystore .IP \[bu] 2 {\f[CB]\-storetype\f[R] \f[I]type\f[R]}: نوع keystore .IP \[bu] 2 {\f[CB]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده (provider) .IP \[bu] 2 {\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیتی بر اساس نام (مانند SunPKCS11) با یک آرگومان اختیاری پیکربندی. .IP \[bu] 2 {\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیتی بر اساس نام کامل کلاس با یک آرگومان اختیاری پیکربندی. .IP \[bu] 2 {\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس ارائه‌دهنده (classpath) .IP \[bu] 2 {\f[CB]\-v\f[R]}: خروجی با جزئیات (verbose) .IP \[bu] 2 {\f[CB]\-protected\f[R]}: گذرواژه از طریق سازوکار حفاظت‌شده ارائه شود .PP از دستور \f[CB]\-certreq\f[R] برای تولید یک درخواست امضای گواهی (CSR) با استفاده از قالب PKCS #10 استفاده کنید. .PP یک CSR برای ارسال به یک مرجع صدور گواهی (CA) در نظر گرفته شده است. مرجع CA هویت درخواست‌کننده گواهی را (معمولاً به‌صورت آفلاین) تأیید اعتبار کرده و یک گواهی یا زنجیره گواهی بازمی‌گرداند تا جایگزین زنجیره گواهی فعلی (که در ابتدا یک گواهی خودامضا است) در keystore شود. .PP کلید خصوصی مرتبط با \f[I]alias\f[R] برای ایجاد درخواست گواهی PKCS #10 استفاده می‌شود. برای دسترسی به کلید خصوصی، باید گذرواژه صحیح ارائه شود. اگر \f[CB]\-keypass\f[R] در خط فرمان مشخص نشده باشد و با گذرواژه‌ای که برای حفاظت از یکپارچگی keystore استفاده می‌شود متفاوت باشد، از کاربر خواسته می‌شود آن را وارد کند. اگر \f[CB]\-dname\f[R] ارائه شود، به عنوان موضوع (subject) در CSR استفاده می‌شود. در غیر این صورت، نام متمایز X.500 مرتبط با نام مستعار به کار گرفته می‌شود. .PP مقدار \f[CB]\-sigalg\f[R] الگوریتمی را که باید برای امضای CSR به کار رود مشخص می‌کند. .PP درخواست CSR در فایل \f[CB]\-file\f[R] \f[I]file\f[R] ذخیره می‌شود. اگر فایلی مشخص نشود، CSR به \f[CB]\-stdout\f[R] فرستاده می‌شود. .PP از دستور \f[CB]\-importcert\f[R] برای درون‌ریزی پاسخ دریافتی از CA استفاده کنید. .RE .SH "دستورهای برون‌بری داده (COMMANDS FOR EXPORTING DATA)" .TP .B \f[CB]\-exportcert\f[R] گزینه‌های موجود برای دستور \f[CB]\-exportcert\f[R] به شرح زیر است: .RS .IP \[bu] 2 {\f[CB]\-rfc\f[R]}: خروجی به سبک RFC .IP \[bu] 2 {\f[CB]\-alias\f[R] \f[I]alias\f[R]}: نام مستعار مدخل مورد پردازش .IP \[bu] 2 {\f[CB]\-file\f[R] \f[I]file\f[R]}: نام فایل خروجی .IP \[bu] 2 {\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: نام keystore .IP \[bu] 2 {\f[CB]\-cacerts\f[R]}: دسترسی به keystore گواهی‌های cacerts .IP \[bu] 2 [\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه keystore .IP \[bu] 2 {\f[CB]\-storetype\f[R] \f[I]type\f[R]}: نوع keystore .IP \[bu] 2 {\f[CB]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده (provider) .IP \[bu] 2 {\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیتی بر اساس نام (مانند SunPKCS11) با یک آرگومان اختیاری پیکربندی. .IP \[bu] 2 {\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]] }: افزودن ارائه‌دهنده امنیتی بر اساس نام کامل کلاس با یک آرگومان اختیاری پیکربندی. .IP \[bu] 2 {\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس ارائه‌دهنده (classpath) .IP \[bu] 2 {\f[CB]\-v\f[R]}: خروجی با جزئیات (verbose) .IP \[bu] 2 {\f[CB]\-protected\f[R]}: گذرواژه از طریق سازوکار حفاظت‌شده ارائه شود .PP از دستور \f[CB]\-exportcert\f[R] برای خواندن گواهی مرتبط با \f[CB]\-alias\f[R] \f[I]alias\f[R] از keystore و ذخیره آن در \f[CB]\-file\f[R] \f[I]file\f[R] استفاده کنید. هنگامی که فایلی مشخص نشود، گواهی به \f[CB]stdout\f[R] فرستاده می‌شود. .PP به‌طور پیش‌فرض، گواهی در کدگذاری باینری خارج می‌شود. اگر گزینه \f[CB]\-rfc\f[R] مشخص شود، خروجی در قالب کدگذاری چاپی تعریف‌شده توسط استاندارد کدگذاری گواهی اینترنتی RFC 1421 خواهد بود. .PP اگر \f[CB]\-alias\f[R] به یک گواهی مورد اعتماد اشاره کند، همان گواهی در خروجی قرار می‌گیرد. در غیر این صورت، \f[CB]\-alias\f[R] به یک مدخل کلید با یک زنجیره گواهی مرتبط اشاره دارد. در آن حالت، اولین گواهی در زنجیره بازگردانده می‌شود. این گواهی کلید عمومی نهادی را که توسط \f[CB]\-alias\f[R] مشخص شده، تأیید اعتبار می‌کند. .RE.SH "دستورهای نمایش داده‌ها (COMMANDS FOR DISPLAYING DATA)" .TP .B \f[CB]\-list\f[R] گزینه‌های دردسترس برای دستور \f[CB]\-list\f[R] عبارتند از: .RS .IP \[bu] 2 {\f[CB]\-rfc\f[R]}: خروجی در سبک RFC .IP \[bu] 2 {\f[CB]\-alias\f[R] \f[I]alias\f[R]}: نام مستعار مدخل برای پردازش .IP \[bu] 2 {\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: نام مخزن کلید (keystore) .IP \[bu] 2 {\f[CB]\-cacerts\f[R]}: دسترسی به مخزن کلید cacerts .IP \[bu] 2 [\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه مخزن کلید .IP \[bu] 2 {\f[CB]\-storetype\f[R] \f[I]type\f[R]}: نوع مخزن کلید .IP \[bu] 2 {\f[CB]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده (provider) .IP \[bu] 2 {\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام (مانند SunPKCS11) به همراه یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]] }: افزودن ارائه‌دهنده امنیت با نام کامل کلاس (fully qualified class name) به همراه یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس (classpath) ارائه‌دهنده .IP \[bu] 2 {\f[CB]\-v\f[R]}: خروجی پرگو (verbose) .IP \[bu] 2 {\f[CB]\-protected\f[R]}: گذرواژه از طریق سازوکار حفاظت‌شده ارائه می‌شود .PP از دستور \f[CB]\-list\f[R] برای چاپ محتویات مدخل مخزن کلید مشخص‌شده توسط \f[CB]\-alias\f[R] در \f[CB]stdout\f[R] استفاده کنید. اگر \f[CB]\-alias\f[R] \f[I]alias\f[R] مشخص نشده باشد، محتویات کل مخزن کلید چاپ می‌شود. .PP به‌طور پیش‌فرض، این دستور اثر انگشت SHA\-256 یک گواهی را چاپ می‌کند. اگر گزینه \f[CB]\-v\f[R] مشخص شده باشد، گواهی در قالبی خوانا برای انسان، همراه با اطلاعات تکمیلی نظیر مالک، صادرکننده، شماره سریال و هرگونه افزونه چاپ می‌شود. اگر گزینه \f[CB]\-rfc\f[R] مشخص شده باشد، محتویات گواهی با استفاده از قالب کدگذاری قابل‌چاپ، مطابق با استاندارد کدگذاری گواهی Internet RFC 1421 چاپ خواهد شد. .PP \f[B]نکته:\f[R] .PP نمی‌توانید هم‌زمان هر دو گزینه \f[CB]\-v\f[R] و \f[CB]\-rfc\f[R] را در یک دستور مشخص کنید. در غیر این صورت، خطا گزارش می‌شود. .RE .TP .B \f[CB]\-printcert\f[R] گزینه‌های دردسترس برای دستور \f[CB]\-printcert\f[R] عبارتند از: .RS .IP \[bu] 2 {\f[CB]\-rfc\f[R]}: خروجی در سبک RFC .IP \[bu] 2 {\f[CB]\-file\f[R] \f[I]cert_file\f[R]}: نام فایل ورودی .IP \[bu] 2 {\f[CB]\-sslserver\f[R] \f[I]server\f[R][\f[CB]:\f[R]\f[I]port\f[R]]}:: میزبان و پورت سرور لایه سوکت‌های امن (SSL) .IP \[bu] 2 {\f[CB]\-jarfile\f[R] \f[I]JAR_file\f[R]}: فایل امضاشده \f[CB]\&.jar\f[R] .IP \[bu] 2 {\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: نام مخزن کلید .IP \[bu] 2 {\f[CB]\-trustcacerts\f[R]}: اعتماد به گواهی‌های موجود در cacerts .IP \[bu] 2 [\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه مخزن کلید .IP \[bu] 2 {\f[CB]\-storetype\f[R] \f[I]type\f[R]}: نوع مخزن کلید .IP \[bu] 2 {\f[CB]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده .IP \[bu] 2 {\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام (مانند SunPKCS11) به همراه یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام کامل کلاس به همراه یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس ارائه‌دهنده .IP \[bu] 2 {\f[CB]\-protected\f[R]}: گذرواژه از طریق سازوکار حفاظت‌شده ارائه می‌شود .IP \[bu] 2 {\f[CB]\-v\f[R]}: خروجی پرگو .PP از دستور \f[CB]\-printcert\f[R] برای خواندن و چاپ گواهی از \f[CB]\-file\f[R] \f[I]cert_file\f[R]، سرور SSL واقع در \f[CB]\-sslserver\f[R] \f[I]server\f[R][\f[CB]:\f[R]\f[I]port\f[R]]، یا فایل JAR امضاشده مشخص‌شده توسط \f[CB]\-jarfile\f[R] \f[I]JAR_file\f[R] استفاده کنید. این دستور محتویات را در قالبی خوانا برای انسان چاپ می‌کند. در صورتی که پورتی مشخص نشود، پورت استاندارد HTTPS یعنی 443 در نظر گرفته می‌شود. .PP \f[B]نکته:\f[R] .PP گزینه‌های \f[CB]\-sslserver\f[R] و \f[CB]\-file\f[R] نمی‌توانند هم‌زمان در یک دستور ارائه شوند. در غیر این صورت، خطا گزارش می‌شود. اگر هیچ‌یک از این گزینه‌ها را مشخص نکنید، گواهی از \f[CB]stdin\f[R] خوانده می‌شود. .PP هنگامی که \f[CB]\-rfc\f[R] مشخص شود، دستور \f[CB]keytool\f[R] گواهی را در حالت PEM، همان‌گونه که توسط استاندارد کدگذاری گواهی Internet RFC 1421 تعریف شده است، چاپ می‌کند. .PP اگر گواهی از یک فایل یا \f[CB]stdin\f[R] خوانده شود، ممکن است به‌صورت کدگذاری دودویی یا در قالب کدگذاری قابل‌چاپ طبق استاندارد کدگذاری گواهی RFC 1421 باشد. .PP اگر سرور SSL در پشت یک دیوار آتش (فایروال) قرار داشته باشد، می‌توان گزینه‌های \f[CB]\-J\-Dhttps.proxyHost=proxyhost\f[R] و \f[CB]\-J\-Dhttps.proxyPort=proxyport\f[R] را در خط فرمان برای ایجاد تونل پروکسی مشخص کرد. .PP \f[B]نکته:\f[R] .PP این دستور می‌تواند مستقل از مخزن کلید مورد استفاده قرار گیرد. این دستور ضعف در الگوریتم امضای یک گواهی را بررسی نمی‌کند اگر آن گواهی، یک گواهی معتمد در مخزن کلید کاربر (مشخص‌شده با \f[CB]\-keystore\f[R]) یا در مخزن کلید \f[CB]cacerts\f[R] (در صورت مشخص شدن \f[CB]\-trustcacerts\f[R]) باشد. .RE .TP .B \f[CB]\-printcertreq\f[R] گزینه‌های دردسترس برای دستور \f[CB]\-printcertreq\f[R] عبارتند از: .RS .IP \[bu] 2 {\f[CB]\-file\f[R] \f[I]file\f[R]}: نام فایل ورودی .IP \[bu] 2 {\f[CB]\-v\f[R]}: خروجی پرگو .PP از دستور \f[CB]\-printcertreq\f[R] برای چاپ محتویات درخواست گواهی در قالب PKCS #10 استفاده کنید که می‌تواند توسط دستور \f[CB]keytool\ \-certreq\f[R] ایجاد شود. این دستور درخواست را از فایل می‌خواند. اگر فایلی وجود نداشته باشد، درخواست از ورودی استاندارد خوانده می‌شود. .RE .TP .B \f[CB]\-printcrl\f[R] گزینه‌های دردسترس برای دستور \f[CB]\-printcrl\f[R] عبارتند از: .RS .IP \[bu] 2 {\f[CB]\-file\ crl\f[R]}: نام فایل ورودی .IP \[bu] 2 {\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: نام مخزن کلید .IP \[bu] 2 {\f[CB]\-trustcacerts\f[R]}: اعتماد به گواهی‌های موجود در cacerts .IP \[bu] 2 [\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه مخزن کلید .IP \[bu] 2 {\f[CB]\-storetype\f[R] \f[I]type\f[R]}: نوع مخزن کلید .IP \[bu] 2 {\f[CB]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده .IP \[bu] 2 {\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام (مانند SunPKCS11) به همراه یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیت با نام کامل کلاس به همراه یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس ارائه‌دهنده .IP \[bu] 2 {\f[CB]\-protected\f[R]}: گذرواژه از طریق سازوکار حفاظت‌شده ارائه می‌شود .IP \[bu] 2 {\f[CB]\-v\f[R]}: خروجی پرگو .PP از دستور \f[CB]\-printcrl\f[R] برای خواندن فهرست ابطال گواهی (CRL) از \f[CB]\-file\ crl\f[R] استفاده کنید. یک CRL فهرستی از گواهی‌های دیجیتالی است که توسط مرجع صدور گواهی (CA) که آن‌ها را صادر کرده، باطل شده‌اند. مرجع CA فایل \f[CB]crl\f[R] را ایجاد می‌کند..PP \f[B]نکته:\f[R] .PP این دستور می‌تواند مستقل از یک مخزن کلید استفاده شود. این دستور تلاش می‌کند تا CRL را با استفاده از یک گواهی از مخزن کلید کاربر (مشخص‌شده با \f[CB]\-keystore\f[R]) یا مخزن کلید \f[CB]cacerts\f[R] (در صورت مشخص بودن \f[CB]\-trustcacerts\f[R]) اعتبارسنجی کند، و در صورتی که نتواند آن را اعتبارسنجی کند، یک هشدار چاپ خواهد کرد. .RE .SH "دستورهای مدیریت مخزن کلید (COMMANDS FOR MANAGING THE KEYSTORE)" .TP .B \f[CB]\-storepasswd\f[R] گزینه‌های در دسترس برای دستور \f[CB]\-storepasswd\f[R] عبارتند از: .RS .IP \[bu] 2 [\f[CB]\-new\f[R] \f[I]arg\f[R]]: گذرواژه جدید .IP \[bu] 2 {\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: نام مخزن کلید .IP \[bu] 2 {\f[CB]\-cacerts\f[R]}: دسترسی به مخزن کلید cacerts .IP \[bu] 2 [\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه مخزن کلید .IP \[bu] 2 {\f[CB]\-storetype\f[R] \f[I]type\f[R]}: نوع مخزن کلید .IP \[bu] 2 {\f[CB]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده .IP \[bu] 2 {\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیتی بر اساس نام (مانند SunPKCS11) به همراه یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیتی بر اساس نام کامل کلاس به همراه یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس (classpath) ارائه‌دهنده .IP \[bu] 2 {\f[CB]\-v\f[R]}: خروجی پرگو (با جزئیات کامل) .PP از دستور \f[CB]\-storepasswd\f[R] برای تغییر گذرواژه‌ای که جهت محافظت از یکپارچگی محتویات مخزن کلید استفاده می‌شود، بهره ببرید. گذرواژه جدید توسط \f[CB]\-new\f[R] \f[I]arg\f[R] تنظیم می‌شود و باید دست‌کم شامل شش نویسه باشد. .RE .TP .B \f[CB]\-keypasswd\f[R] گزینه‌های در دسترس برای دستور \f[CB]\-keypasswd\f[R] عبارتند از: .RS .IP \[bu] 2 {\f[CB]\-alias\f[R] \f[I]alias\f[R]}: نام مستعار (alias) مدخل مورد پردازش .IP \[bu] 2 [\f[CB]\-keypass\f[R] \f[I]old_keypass\f[R]]: گذرواژه کلید .IP \[bu] 2 [\f[CB]\-new\f[R] \f[I]new_keypass\f[R]]: گذرواژه جدید .IP \[bu] 2 {\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: نام مخزن کلید .IP \[bu] 2 {\f[CB]\-storepass\f[R] \f[I]arg\f[R]}: گذرواژه مخزن کلید .IP \[bu] 2 {\f[CB]\-storetype\f[R] \f[I]type\f[R]}: نوع مخزن کلید .IP \[bu] 2 {\f[CB]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده .IP \[bu] 2 {\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیتی بر اساس نام (مانند SunPKCS11) به همراه یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیتی بر اساس نام کامل کلاس به همراه یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس (classpath) ارائه‌دهنده .IP \[bu] 2 {\f[CB]\-v\f[R]}: خروجی پرگو (با جزئیات کامل) .PP از دستور \f[CB]\-keypasswd\f[R] برای تغییر گذرواژه‌ای که کلیدهای خصوصی/محرمانه مشخص‌شده توسط \f[CB]\-alias\f[R] تحت حفاظت آن هستند، از \f[CB]\-keypass\f[R] \f[I]old_keypass\f[R] به \f[CB]\-new\f[R] \f[I]new_keypass\f[R] استفاده کنید. مقدار گذرواژه باید دست‌کم شامل شش نویسه باشد. .PP اگر گزینه \f[CB]\-keypass\f[R] در خط فرمان مشخص نشود و گذرواژه \f[CB]\-keypass\f[R] با گذرواژه مخزن کلید (\f[CB]\-storepass\f[R] \f[I]arg\f[R]) متفاوت باشد، از کاربر خواسته می‌شود تا آن را وارد کند. .PP اگر گزینه \f[CB]\-new\f[R] در خط فرمان مشخص نشود، از کاربر خواسته می‌شود تا آن را وارد کند. .RE .TP .B \f[CB]\-delete\f[R] گزینه‌های در دسترس برای دستور \f[CB]\-delete\f[R] عبارتند از: .RS .IP \[bu] 2 [\f[CB]\-alias\f[R] \f[I]alias\f[R]]: نام مستعار (alias) مدخل مورد پردازش .IP \[bu] 2 {\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: نام مخزن کلید .IP \[bu] 2 {\f[CB]\-cacerts\f[R]}: دسترسی به مخزن کلید cacerts .IP \[bu] 2 [\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه مخزن کلید .IP \[bu] 2 {\f[CB]\-storetype\f[R] \f[I]type\f[R]}: نوع مخزن کلید .IP \[bu] 2 {\f[CB]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده .IP \[bu] 2 {\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیتی بر اساس نام (مانند SunPKCS11) به همراه یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیتی بر اساس نام کامل کلاس به همراه یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس (classpath) ارائه‌دهنده .IP \[bu] 2 {\f[CB]\-v\f[R]}: خروجی پرگو (با جزئیات کامل) .IP \[bu] 2 {\f[CB]\-protected\f[R]}: گذرواژه از طریق یک سازوکار حفاظت‌شده ارائه شده است .PP از دستور \f[CB]\-delete\f[R] برای حذف مدخل \f[CB]\-alias\f[R] \f[I]alias\f[R] از مخزن کلید استفاده کنید. در صورت عدم ارائه در خط فرمان، \f[CB]alias\f[R] از کاربر پرسیده خواهد شد. .RE .TP .B \f[CB]\-changealias\f[R] گزینه‌های در دسترس برای دستور \f[CB]\-changealias\f[R] عبارتند از: .RS .IP \[bu] 2 {\f[CB]\-alias\f[R] \f[I]alias\f[R]}: نام مستعار (alias) مدخل مورد پردازش .IP \[bu] 2 [\f[CB]\-destalias\f[R] \f[I]alias\f[R]]: نام مستعار مقصد .IP \[bu] 2 [\f[CB]\-keypass\f[R] \f[I]arg\f[R]]: گذرواژه کلید .IP \[bu] 2 {\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: نام مخزن کلید .IP \[bu] 2 {\f[CB]\-cacerts\f[R]}: دسترسی به مخزن کلید cacerts .IP \[bu] 2 [\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: گذرواژه مخزن کلید .IP \[bu] 2 {\f[CB]\-storetype\f[R] \f[I]type\f[R]}: نوع مخزن کلید .IP \[bu] 2 {\f[CB]\-providername\f[R] \f[I]name\f[R]}: نام ارائه‌دهنده .IP \[bu] 2 {\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیتی بر اساس نام (مانند SunPKCS11) به همراه یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R] \f[I]arg\f[R]]}: افزودن ارائه‌دهنده امنیتی بر اساس نام کامل کلاس به همراه یک آرگومان پیکربندی اختیاری. .IP \[bu] 2 {\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: مسیر کلاس (classpath) ارائه‌دهنده .IP \[bu] 2 {\f[CB]\-v\f[R]}: خروجی پرگو (با جزئیات کامل) .IP \[bu] 2 {\f[CB]\-protected\f[R]}: گذرواژه از طریق یک سازوکار حفاظت‌شده ارائه شده است .PP از دستور \f[CB]\-changealias\f[R] برای انتقال یک مدخل موجود در مخزن کلید از \f[CB]\-alias\f[R] \f[I]alias\f[R] به یک \f[CB]\-destalias\f[R] \f[I]alias\f[R] جدید استفاده کنید. اگر نام مستعار مقصد مشخص نشده باشد، دستور از شما می‌خواهد که یکی را وارد کنید. اگر مدخل اصلی با یک گذرواژه مدخل محافظت شده باشد، این گذرواژه می‌تواند با گزینه \f[CB]\-keypass\f[R] ارائه شود. اگر گذرواژه کلید ارائه نشده باشد، ابتدا \f[CB]\-storepass\f[R] (در صورت ارائه) آزمایش می‌شود. اگر این تلاش با شکست مواجه شود، از کاربر خواسته می‌شود تا گذرواژه را وارد کند. .RE.SH "دستورهای نمایش اطلاعات امنیتی (COMMANDS FOR DISPLAYING SECURITY\-RELATED INFORMATION)" .TP .B \f[CB]\-showinfo\f[R] گزینه‌های موجود برای دستور \f[CB]\-showinfo\f[R] به شرح زیر است: .RS .IP \[bu] 2 {\f[CB]\-tls\f[R]}: نمایش اطلاعات پیکربندی TLS .IP \[bu] 2 {\f[CB]\-v\f[R]}: خروجی با جزئیات بیشتر (پُرگو) .PP از دستور \f[CB]\-showinfo\f[R] برای نمایش اطلاعات گوناگون مرتبط با امنیت استفاده کنید. گزینهٔ \f[CB]\-tls\f[R] پیکربندی‌های TLS، مانند فهرست پروتکل‌ها و مجموعه‌های رمز (cipher suites) فعال را نمایش می‌دهد. .RE .SH "دستورهای نمایش اطلاعات راهنما (COMMANDS FOR DISPLAYING HELP INFORMATION)" .PP می‌توانید از \f[CB]\-\-help\f[R] برای نمایش فهرستی از دستورهای \f[CB]keytool\f[R] یا نمایش اطلاعات راهنما دربارهٔ یک دستور خاص \f[CB]keytool\f[R] استفاده کنید. .IP \[bu] 2 برای نمایش فهرستی از دستورهای \f[CB]keytool\f[R]، وارد کنید: .RS 2 .RS .PP \f[CB]keytool\ \-\-help\f[R] .RE .RE .IP \[bu] 2 برای نمایش اطلاعات راهنما دربارهٔ یک دستور خاص \f[CB]keytool\f[R]، وارد کنید: .RS 2 .RS .PP \f[CB]keytool\ \-\ \-\-help\f[R] .RE .RE .SH "گزینه‌های مشترک دستورها (COMMON COMMAND OPTIONS)" .PP گزینهٔ \f[CB]\-v\f[R] می‌تواند برای تمام دستورها به‌جز \f[CB]\-\-help\f[R] به کار رود. هنگامی که گزینهٔ \f[CB]\-v\f[R] مشخص شود، نشان‌دهندهٔ حالت پرگو (verbose) است، بدین معنا که اطلاعات بیشتری در خروجی ارائه می‌شود. .PP آرگومان \f[CB]\-J\f[R]\f[I]option\f[R] می‌تواند برای هر دستوری مشخص شود. هنگامی که \f[CB]\-J\f[R]\f[I]option\f[R] استفاده می‌شود، رشتهٔ \f[I]option\f[R] مشخص‌شده مستقیماً به مفسر Java فرستاده می‌شود. این گزینه نباید شامل هیچ فاصله‌ای باشد. این قابلیت برای تنظیم محیط اجرا یا میزان مصرف حافظه مفید است. برای مشاهدهٔ فهرستی از گزینه‌های ممکن مفسر، دستور \f[CB]java\ \-h\f[R] یا \f[CB]java\ \-X\f[R] را در خط فرمان وارد کنید. .PP این گزینه‌ها می‌توانند برای تمام دستورهایی که روی یک keystore عمل می‌کنند مشخص شوند: .TP .B \f[CB]\-storetype\f[R] \f[I]storetype\f[R] این مشخص‌کننده، نوع keystore را برای نمونه‌سازی تعیین می‌کند. .RS .RE .TP .B \f[CB]\-keystore\f[R] \f[I]keystore\f[R] مکان keystore. .RS .PP اگر از \f[CB]storetype\f[R] با مقدار JKS استفاده شود و فایل keystore هنوز وجود نداشته باشد، اجرای برخی دستورهای خاص \f[CB]keytool\f[R] می‌تواند منجر به ایجاد یک فایل keystore جدید شود. برای مثال، اگر \f[CB]keytool\ \-genkeypair\f[R] فراخوانی شود و گزینهٔ \f[CB]\-keystore\f[R] مشخص نشده باشد، فایل پیش‌فرض keystore با نام \f[CB]\&.keystore\f[R] در صورت عدم وجود، در دایرکتوری خانگی کاربر ایجاد می‌شود. به طور مشابه، اگر گزینهٔ \f[CB]\-keystore\ ks_file\f[R] مشخص شود اما \f[CB]ks_file\f[R] وجود نداشته باشد، آن فایل ایجاد خواهد شد. برای کسب اطلاعات بیشتر دربارهٔ \f[CB]storetype\f[R] با مقدار JKS، بخش \f[B]KeyStore Implementation\f[R] را در \f[B]KeyStore aliases\f[R] ببینید. .PP توجه داشته باشید که جریان ورودی از گزینهٔ \f[CB]\-keystore\f[R] به متد \f[CB]KeyStore.load\f[R] ارسال می‌شود. اگر مقدار \f[CB]NONE\f[R] به عنوان URL مشخص شود، یک جریان null به متد \f[CB]KeyStore.load\f[R] فرستاده خواهد شد. اگر keystore مبتنی بر فایل نباشد، باید مقدار \f[CB]NONE\f[R] مشخص شود؛ برای مثال، هنگامی که keystore روی یک دستگاه توکن سخت‌افزاری قرار دارد. .RE .TP .B \f[CB]\-cacerts\f[R] \f[I]cacerts\f[R] روی keystore متعلق به \f[I]cacerts\f[R] عمل می‌کند. این گزینه معادل \f[CB]\-keystore\f[R] \f[I]path_to_cacerts\f[R] \f[CB]\-storetype\f[R] \f[I]type_of_cacerts\f[R] است. در صورت استفاده از گزینهٔ \f[CB]\-keystore\f[R] یا \f[CB]\-storetype\f[R] همراه با گزینهٔ \f[CB]\-cacerts\f[R]، خطا گزارش می‌شود. .RS .RE .TP .B \f[CB]\-storepass\f[R] [\f[CB]:env\f[R] | \f[CB]:file\f[R] ] \f[I]argument\f[R] گذرواژه‌ای که برای محافظت از یکپارچگی keystore استفاده می‌شود. .RS .PP اگر اصلاح‌کنندهٔ \f[CB]env\f[R] یا \f[CB]file\f[R] مشخص نشده باشد، گذرواژه مقدار \f[I]argument\f[R] را خواهد داشت که باید حداقل شامل شش نویسه باشد. در غیر این صورت، گذرواژه به شرح زیر بازیابی می‌شود: .IP \[bu] 2 \f[CB]env\f[R]: بازیابی گذرواژه از متغیر محیطی با نام \f[I]argument\f[R]. .IP \[bu] 2 \f[CB]file\f[R]: بازیابی گذرواژه از فایل با نام \f[I]argument\f[R]. .PP \f[B]نکته:\f[R] تمامی گزینه‌های دیگری که نیازمند گذرواژه هستند، مانند \f[CB]\-keypass\f[R]، \f[CB]\-srckeypass\f[R]، \f[CB]\-destkeypass\f[R]، \f[CB]\-srcstorepass\f[R] و \f[CB]\-deststorepass\f[R]، اصلاح‌کننده‌های \f[CB]env\f[R] و \f[CB]file\f[R] را می‌پذیرند. به یاد داشته باشید که گزینهٔ گذرواژه و اصلاح‌کننده را با یک دونقطه (:) جدا کنید. .PP گذرواژه باید برای تمام دستورهایی که به محتویات keystore دسترسی دارند ارائه شود. برای چنین دستورهایی، هنگامی که گزینهٔ \f[CB]\-storepass\f[R] در خط فرمان مشخص نشده باشد، از کاربر درخواست می‌شود تا آن را وارد کند. .PP هنگام بازیابی اطلاعات از keystore، گذرواژه اختیاری است. اگر گذرواژه‌ای مشخص نشود، یکپارچگی اطلاعات بازیابی‌شده قابل تأیید نخواهد بود و یک هشدار نمایش داده می‌شود. .RE .TP .B \f[CB]\-providername\f[R] \f[I]name\f[R] برای شناسایی نام یک ارائه‌دهندهٔ خدمات رمزنگاری در صورتی که در فایل ویژگی‌های امنیتی فهرست شده باشد به کار می‌رود. .RS .RE .TP .B \f[CB]\-addprovider\f[R] \f[I]name\f[R] برای افزودن یک ارائه‌دهندهٔ امنیتی با نام (مانند SunPKCS11) به کار می‌رود. .RS .RE .TP .B \f[CB]\-providerclass\f[R] \f[I]class\f[R] برای تعیین نام فایل کلاس اصلی ارائه‌دهندهٔ خدمات رمزنگاری در صورتی که ارائه‌دهنده در فایل ویژگی‌های امنیتی فهرست نشده باشد به کار می‌رود. .RS .RE .TP .B \f[CB]\-providerpath\f[R] \f[I]list\f[R] برای تعیین مسیر کلاس (classpath) ارائه‌دهنده به کار می‌رود. .RS .RE .TP .B \f[CB]\-providerarg\f[R] \f[I]arg\f[R] همراه با گزینهٔ \f[CB]\-addprovider\f[R] یا \f[CB]\-providerclass\f[R] برای نشان دادن یک آرگومان رشته‌ای ورودی اختیاری برای سازندهٔ نام \f[I]class\f[R] به کار می‌رود. .RS .RE .TP .B \f[CB]\-protected=true\f[R]|\f[CB]false\f[R] هنگامی که گذرواژه باید از طریق یک مسیر احراز هویت محافظت‌شده (مانند یک پین‌خوان اختصاصی) مشخص شود، این مقدار را برابر با \f[CB]true\f[R] تعیین کنید. از آنجا که در دستور \f[CB]\-importkeystore\f[R] دو keystore دخیل هستند، دو گزینهٔ زیر، یعنی \f[CB]\-srcprotected\f[R] و \f[CB]\-destprotected\f[R]، به ترتیب برای keystore مبدأ و مقصد در نظر گرفته شده‌اند. .RS .RE .TP .B \f[CB]\-ext\f[R] {\f[I]name\f[R]{\f[CB]:critical\f[R]} {\f[CB]=\f[R]\f[I]value\f[R]}} بیانگر یک افزونهٔ گواهی (certificate extension) استاندارد X.509 است. این گزینه می‌تواند در \f[CB]\-genkeypair\f[R] و \f[CB]\-gencert\f[R] برای تعبیهٔ افزونه‌ها درون گواهی تولیدشده، یا در \f[CB]\-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[CB]:critical\f[R] در صورت ارائه، بدین معناست که مقدار ویژگی \f[CB]isCritical\f[R] افزونه برابر با \f[CB]true\f[R] خواهد بود؛ در غیر این صورت، برابر با \f[CB]false\f[R] است. می‌توانید به جای \f[CB]:critical\f[R] از \f[CB]:c\f[R] استفاده کنید. .RS .RE.TP .B \f[CB]\-conf\f[R] \f[I]file\f[R] یک فایل گزینه‌های از پیش پیکربندی‌شده را مشخص می‌کند. .RS .RE .SH "فایل گزینه‌های از پیش پیکربندی‌شده (PRE\-CONFIGURED OPTIONS FILE)" .PP یک فایل گزینه‌های از پیش پیکربندی‌شده، یک فایل properties جاوا است که می‌تواند با گزینهٔ \f[CB]\-conf\f[R] مشخص شود. هر ویژگی (property) با استفاده از «keytool.\f[I]command_name\f[R]» به‌عنوان نام ویژگی، گزینه(ها)ی پیش‌فرض را برای یک دستور keytool مشخص می‌کند. ویژگی ویژه‌ای با نام «keytool.all» نشان‌دهندهٔ گزینه(ها)ی پیش‌فرضی است که بر روی تمام دستورها اعمال می‌شود. مقدار یک ویژگی می‌تواند شامل \f[CB]${prop}\f[R] باشد که به ویژگی سیستمی (system property) مرتبط با آن بسط می‌یابد. اگر مقدار یک گزینه در درون خود دارای فاصله باشد، باید در میان علامت‌های نقل‌قول (" یا \[aq]) قرار گیرد. تمام نام‌های ویژگی‌ها باید با حروف کوچک باشند. .PP هنگامی که \f[CB]keytool\f[R] با یک فایل گزینه‌های از پیش پیکربندی‌شده اجرا می‌شود، ابتدا مقدار «keytool.all» (در صورت وجود) به ابتدای خط فرمان \f[CB]keytool\f[R] افزوده می‌شود، سپس مقدار مربوط به نام دستور (در صورت وجود) می‌آید، و در پایان گزینه‌های موجود در خط فرمان اعمال می‌گردند. برای یک گزینهٔ تک‌مقداری، این رفتار اجازه می‌دهد تا ویژگی یک دستور خاص مقدار «keytool.all» را بازنویسی (override) کند، و مقدار مشخص‌شده در خط فرمان نیز هر دوی آن‌ها را بازنویسی نماید. برای گزینه‌های چندمقداری، تمام آن‌ها توسط \f[CB]keytool\f[R] استفاده خواهند شد. .PP برای مثال، فایل فرضی زیر به نام \f[CB]preconfig\f[R] را در نظر بگیرید: .IP .nf \f[CB] \ \ \ \ #\ A\ tiny\ pre\-configured\ options\ file \ \ \ \ keytool.all\ =\ \-keystore\ ${user.home}/ks \ \ \ \ keytool.list\ =\ \-v \ \ \ \ keytool.genkeypair\ =\ \-keyalg\ rsa \f[R] .fi .PP دستور \f[CB]keytool\ \-conf\ preconfig\ \-list\f[R] یکسان است با: .RS .PP \f[CB]keytool\ \-keystore\ ~/ks\ \-v\ \-list\f[R] .RE .PP دستور \f[CB]keytool\ \-conf\ preconfig\ \-genkeypair\ \-alias\ me\f[R] یکسان است با: .RS .PP \f[CB]keytool\ \-keystore\ ~/ks\ \-keyalg\ rsa\ \-genkeypair\ \-alias\ me\f[R] .RE .PP دستور \f[CB]keytool\ \-conf\ preconfig\ \-genkeypair\ \-alias\ you\ \-keyalg\ ec\f[R] یکسان است با: .RS .PP \f[CB]keytool\ \-keystore\ ~/ks\ \-keyalg\ rsa\ \-genkeypair\ \-alias\ you\ \-keyalg\ ec\f[R] .RE .PP که معادل است با: .RS .PP \f[CB]keytool\ \-keystore\ ~/ks\ \-genkeypair\ \-alias\ you\ \-keyalg\ ec\f[R] .RE .PP زیرا \f[CB]\-keyalg\f[R] یک گزینهٔ تک‌مقداری است و مقدار \f[CB]ec\f[R] مشخص‌شده در خط فرمان، فایل گزینه‌های از پیش پیکربندی‌شده را بازنویسی می‌کند. .SH "مثال‌هایی از مقادیر گزینه‌ها (EXAMPLES OF OPTION VALUES)" .PP مثال‌های زیر مقادیر پیش‌فرض را برای گزینه‌های گوناگون نشان می‌دهند: .IP .nf \f[CB] \-alias\ "mykey" \-keysize \ \ \ \ 2048\ (when\ using\ \-genkeypair\ and\ \-keyalg\ is\ "RSA",\ "DSA",\ "RSASSA\-PSS",\ or\ "DH") \ \ \ \ 256\ (when\ using\ \-genkeypair\ and\ \-keyalg\ is\ "EC") \ \ \ \ 255\ (when\ using\ \-genkeypair\ and\ \-keyalg\ is\ "EdDSA",\ or\ "XDH) \ \ \ \ 56\ (when\ using\ \-genseckey\ and\ \-keyalg\ is\ "DES") \ \ \ \ 168\ (when\ using\ \-genseckey\ and\ \-keyalg\ is\ "DESede") \-validity\ 90 \-keystore\ \-destkeystore\ \-storetype\ \-file \ \ \ \ stdin\ (if\ reading) \ \ \ \ stdout\ (if\ writing) \-protected\ false \f[R] .fi .PP هنگام تولید یک گواهی یا درخواست گواهی، الگوریتم امضای پیش‌فرض (گزینهٔ \f[CB]\-sigalg\f[R]) برای فراهم‌کردن سطح مناسبی از استحکام امنیتی، به‌صورت زیر از الگوریتم کلید خصوصیِ زیربنایی مشتق می‌شود: .PP .TS tab(@); l l l. T{ keyalg T}@T{ keysize T}@T{ default sigalg T} _ T{ DSA T}@T{ any size T}@T{ SHA256withDSA T} T{ RSA T}@T{ <= 3072 T}@T{ SHA256withRSA T} T{ T}@T{ <= 7680 T}@T{ SHA384withRSA T} T{ T}@T{ > 7680 T}@T{ SHA512withRSA T} T{ EC T}@T{ < 384 T}@T{ SHA256withECDSA T} T{ T}@T{ < 512 T}@T{ SHA384withECDSA T} T{ T}@T{ = 512 T}@T{ SHA512withECDSA T} T{ RSASSA\-PSS T}@T{ <= 3072 T}@T{ RSASSA\-PSS (with SHA\-256) T} T{ T}@T{ <= 7680 T}@T{ RSASSA\-PSS (with SHA\-384) T} T{ T}@T{ > 7680 T}@T{ RSASSA\-PSS (with SHA\-512) T} T{ EdDSA T}@T{ 255 T}@T{ Ed25519 T} T{ T}@T{ 448 T}@T{ Ed448 T} T{ Ed25519 T}@T{ 255 T}@T{ Ed25519 T} T{ Ed448 T}@T{ 448 T}@T{ Ed448 T} .TE.IP \[bu] 2 یک الگوریتم امضای RSASSA\-PSS از یک الگوریتم \f[CB]MessageDigest\f[R] به عنوان الگوریتم‌های درهم‌ساز (hash) و MGF1 خود استفاده می‌کند. .IP \[bu] 2 الگوریتم EdDSA از ۲ اندازهٔ کلید پشتیبانی می‌کند: Ed25519 و Ed448. هنگام تولید یک جفت‌کلید EdDSA با استفاده از \f[CB]\-keyalg\ EdDSA\f[R]، کاربر می‌تواند \f[CB]\-keysize\ 255\f[R] یا \f[CB]\-keysize\ 448\f[R] را برای تولید جفت‌کلیدهای Ed25519 یا Ed448 تعیین کند. هنگامی که هیچ \f[CB]\-keysize\f[R] تعیین نشده باشد، یک جفت‌کلید Ed25519 تولید می‌شود. کاربر همچنین می‌تواند مستقیماً \f[CB]\-keyalg\ Ed25519\f[R] یا \f[CB]\-keyalg\ Ed448\f[R] را برای تولید یک جفت‌کلید با اندازهٔ کلید مورد نظر مشخص کند. .PP \f[B]نکته:\f[R] .PP برای بهبود امنیت اولیه و پیش‌فرض، اندازهٔ کلید و نام الگوریتم‌های امضای پیش‌فرض به‌طور دوره‌ای با هر انتشار جدید از JDK به مقادیر قوی‌تر به‌روزرسانی می‌شوند. اگر هم‌کنش‌پذیری با نگارش‌های قدیمی‌تر JDK اهمیت دارد، مطمئن شوید که مقادیر پیش‌فرض توسط آن نگارش‌ها پشتیبانی می‌شوند. همچنین، می‌توانید با مسئولیت خود از گزینه‌های \f[CB]\-keysize\f[R] یا \f[CB]\-sigalg\f[R] برای بازنویسی مقادیر پیش‌فرض استفاده کنید. .SH "افزونه‌های نام‌دار پشتیبانی‌شده (SUPPORTED NAMED EXTENSIONS)" .PP دستور \f[CB]keytool\f[R] از این افزونه‌های نام‌دار پشتیبانی می‌کند. این نام‌ها به بزرگی و کوچکی حروف حساس نیستند. .TP .B \f[CB]BC\f[R] یا \f[CB]BasicContraints\f[R] مقادیر: .RS .PP شکل کامل آن عبارت است از \f[CB]ca:\f[R]{\f[CB]true\f[R]|\f[CB]false\f[R]}[\f[CB],pathlen:\f[R]\f[I]len\f[R]] یا \f[I]len\f[R] که شکل کوتاه \f[CB]ca:true,pathlen:\f[R]\f[I]len\f[R] است. .PP هنگامی که \f[I]len\f[R] حذف شود، مقدار حاصل \f[CB]ca:true\f[R] خواهد بود. .RE .TP .B \f[CB]KU\f[R] یا \f[CB]KeyUsage\f[R] مقادیر: .RS .PP \f[I]usage\f[R](\f[CB],\f[R] \f[I]usage\f[R])* .PP آرگومان \f[I]usage\f[R] می‌تواند یکی از موارد زیر باشد: .IP \[bu] 2 \f[CB]digitalSignature\f[R] .IP \[bu] 2 \f[CB]nonRepudiation\f[R] (\f[CB]contentCommitment\f[R]) .IP \[bu] 2 \f[CB]keyEncipherment\f[R] .IP \[bu] 2 \f[CB]dataEncipherment\f[R] .IP \[bu] 2 \f[CB]keyAgreement\f[R] .IP \[bu] 2 \f[CB]keyCertSign\f[R] .IP \[bu] 2 \f[CB]cRLSign\f[R] .IP \[bu] 2 \f[CB]encipherOnly\f[R] .IP \[bu] 2 \f[CB]decipherOnly\f[R] .PP به شرطی که هیچ ابهامی وجود نداشته باشد، آرگومان \f[I]usage\f[R] را می‌توان با چند حرف نخست (مانند \f[CB]dig\f[R] برای \f[CB]digitalSignature\f[R]) یا به سبک کوهان‌شتری (camel\-case) (مانند \f[CB]dS\f[R] برای \f[CB]digitalSignature\f[R] یا \f[CB]cRLS\f[R] برای \f[CB]cRLSign\f[R]) کوتاه کرد. مقادیر \f[I]usage\f[R] به بزرگی و کوچکی حروف حساس هستند. .RE .TP .B \f[CB]EKU\f[R] یا \f[CB]ExtendedKeyUsage\f[R] مقادیر: .RS .PP \f[I]usage\f[R](\f[CB],\f[R] \f[I]usage\f[R])* .PP آرگومان \f[I]usage\f[R] می‌تواند یکی از موارد زیر باشد: .IP \[bu] 2 \f[CB]anyExtendedKeyUsage\f[R] .IP \[bu] 2 \f[CB]serverAuth\f[R] .IP \[bu] 2 \f[CB]clientAuth\f[R] .IP \[bu] 2 \f[CB]codeSigning\f[R] .IP \[bu] 2 \f[CB]emailProtection\f[R] .IP \[bu] 2 \f[CB]timeStamping\f[R] .IP \[bu] 2 \f[CB]OCSPSigning\f[R] .IP \[bu] 2 هر رشتهٔ OID .PP به شرطی که هیچ ابهامی وجود نداشته باشد، آرگومان \f[I]usage\f[R] را می‌توان با چند حرف نخست یا به سبک کوهان‌شتری کوتاه کرد. مقادیر \f[I]usage\f[R] به بزرگی و کوچکی حروف حساس هستند. .RE .TP .B \f[CB]SAN\f[R] یا \f[CB]SubjectAlternativeName\f[R] مقادیر: .RS .PP \f[I]type\f[R]\f[CB]:\f[R]\f[I]value\f[R](\f[CB],\f[R] \f[I]type\f[R]\f[CB]:\f[R]\f[I]value\f[R])* .PP آرگومان \f[I]type\f[R] می‌تواند یکی از موارد زیر باشد: .IP \[bu] 2 \f[CB]EMAIL\f[R] .IP \[bu] 2 \f[CB]URI\f[R] .IP \[bu] 2 \f[CB]DNS\f[R] .IP \[bu] 2 \f[CB]IP\f[R] .IP \[bu] 2 \f[CB]OID\f[R] .PP آرگومان \f[I]value\f[R] مقدار رشته‌ای متناظر با \f[I]type\f[R] است. .RE .TP .B \f[CB]IAN\f[R] یا \f[CB]IssuerAlternativeName\f[R] مقادیر: .RS .PP مشابه \f[CB]SAN\f[R] یا \f[CB]SubjectAlternativeName\f[R]. .RE .TP .B \f[CB]SIA\f[R] یا \f[CB]SubjectInfoAccess\f[R] مقادیر: .RS .PP \f[I]method\f[R]\f[CB]:\f[R]\f[I]location\-type\f[R]\f[CB]:\f[R]\f[I]location\-value\f[R](\f[CB],\f[R] \f[I]method\f[R]\f[CB]:\f[R]\f[I]location\-type\f[R]\f[CB]:\f[R]\f[I]location\-value\f[R])* .PP آرگومان \f[I]method\f[R] می‌تواند یکی از موارد زیر باشد: .IP \[bu] 2 \f[CB]timeStamping\f[R] .IP \[bu] 2 \f[CB]caRepository\f[R] .IP \[bu] 2 هر OID .PP آرگومان‌های \f[I]location\-type\f[R] و \f[I]location\-value\f[R] می‌توانند هر \f[I]type\f[R]\f[CB]:\f[R]\f[I]value\f[R] پشتیبانی‌شده توسط افزونهٔ \f[CB]SubjectAlternativeName\f[R] باشند. .RE .TP .B \f[CB]AIA\f[R] یا \f[CB]AuthorityInfoAccess\f[R] مقادیر: .RS .PP مشابه \f[CB]SIA\f[R] یا \f[CB]SubjectInfoAccess\f[R]. .PP آرگومان \f[I]method\f[R] می‌تواند یکی از موارد زیر باشد: .IP \[bu] 2 \f[CB]ocsp\f[R] .IP \[bu] 2 \f[CB]caIssuers\f[R] .IP \[bu] 2 هر OID .RE .PP هنگامی که \f[I]name\f[R] از نوع OID باشد، مقدار آن خروجی هگزادسیمال (hex dump) کدگذاری قواعد کدگذاری معین (DER) از \f[CB]extnValue\f[R] افزونه، بدون در نظر گرفتن بایت‌های نوع و طول OCTET STRING است. به جز اعداد هگزادسیمال استاندارد (0\-9، a\-f، A\-F)، هر نویسهٔ اضافی دیگری در رشتهٔ HEX نادیده گرفته می‌شود. بنابراین، هر دو مقدار 01:02:03:04 و 01020304 به عنوان مقادیری یکسان پذیرفته می‌شوند. هنگامی که مقداری مشخص نشده باشد، افزونه یک فیلد مقدار خالی خواهد داشت. .PP یک نام ویژه به نام \f[CB]honored\f[R]، که تنها در \f[CB]\-gencert\f[R] کاربرد دارد، تعیین می‌کند که افزونه‌های موجود در درخواست گواهی چگونه باید اعمال و رعایت شوند. مقدار این نام فهرستی جداشده با کاما از \f[CB]all\f[R] (تمامی افزونه‌های درخواستی اعمال می‌شوند)، \f[I]name\f[R]{\f[CB]:\f[R][\f[CB]critical\f[R]|\f[CB]non\-critical\f[R]]} (افزونهٔ نام‌برده اعمال می‌شود، اما از صفت \f[CB]isCritical\f[R] متفاوتی استفاده می‌کند)، و \f[CB]\-name\f[R] (همراه با \f[CB]all\f[R] استفاده می‌شود و نشان‌دهندهٔ یک استثنا است) است. افزونه‌های درخواستی به‌طور پیش‌فرض اعمال نمی‌شوند..PP اگر علاوه بر گزینهٔ \f[CB]\-ext\ honored\f[R]، گزینهٔ \f[CB]\-ext\f[R] نام‌گذاری‌شده یا OID دیگری مشخص شود، این افزونه به مواردی که قبلاً پذیرفته شده‌اند افزوده می‌شود. با این حال، اگر این نام (یا OID) در مقدار پذیرفته‌شده نیز وجود داشته باشد، مقدار و وضعیت بحرانی (criticality) آن جایگزین مقدار موجود در درخواست خواهد شد. اگر افزونه‌ای از همان نوع چندین بار از طریق یک نام یا OID مشخص شود، تنها آخرین افزونه استفاده می‌شود. .PP افزونهٔ \f[CB]subjectKeyIdentifier\f[R] همیشه ایجاد می‌شود. برای گواهی‌های غیرخودامضاشده، افزونهٔ \f[CB]authorityKeyIdentifier\f[R] ایجاد می‌شود. .PP \f[B]احتیاط:\f[R] .PP کاربران باید آگاه باشند که برخی ترکیبات افزونه‌ها (و سایر فیلدهای گواهی) ممکن است با استانداردهای اینترنت همخوانی نداشته باشند. بخش \f[B]Certificate Conformance Warning\f[R] را ببینید. .SH "مثال‌هایی از مراحل ایجاد مخزن کلید (EXAMPLES OF TASKS IN CREATING A KEYSTORE)" .PP مثال‌های زیر توالی اقدامات در ایجاد یک 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)" .PP یک keystore بسازید و سپس جفت‌کلید را تولید کنید. .PP می‌توانید دستور را در یک خط تکی به صورت زیر وارد کنید: .RS .PP \f[CB]keytool\ \-genkeypair\ \-dname\ "cn=myname,\ ou=mygroup,\ o=mycompany,\ c=mycountry"\ \-alias\ business\ \-keyalg\ rsa\ \-keypass\f[R] \f[I]password\f[R] \f[CB]\-keystore\ /working/mykeystore\ \-storepass\ password\ \-validity\ 180\f[R] .RE .PP این دستور، مخزن کلید (keystore) با نام \f[CB]mykeystore\f[R] را در دایرکتوری کاری (به شرطی که از قبل وجود نداشته باشد) ایجاد کرده و گذرواژهٔ مشخص‌شده با \f[CB]\-keypass\f[R] را به آن اختصاص می‌دهد. این دستور یک جفت‌کلید عمومی/خصوصی برای هویتی که نام متمایز (distinguished name) آن شامل \f[CB]myname\f[R]، \f[CB]mygroup\f[R]، \f[CB]mycompany\f[R] و کد کشور دو حرفی \f[CB]mycountry\f[R] است، تولید می‌کند. این دستور از الگوریتم تولید کلید RSA برای ساخت کلیدها استفاده می‌کند؛ هر دو کلید ۲۰۴۸ بیتی هستند. .PP این دستور از الگوریتم امضای پیش‌فرض SHA256withRSA برای ایجاد یک گواهی خودامضاشده استفاده می‌کند که حاوی کلید عمومی و اطلاعات نام متمایز است. این گواهی به مدت ۱۸۰ روز معتبر است و با کلید خصوصی در یک مدخل keystore که با \f[CB]\-alias\ business\f[R] مشخص شده، مرتبط می‌شود. به کلید خصوصی گذرواژهٔ مشخص‌شده با \f[CB]\-keypass\f[R] اختصاص داده می‌شود. .PP در صورتی که مقادیر پیش‌فرض گزینه‌ها پذیرفته شوند، دستور به‌طور قابل‌توجهی کوتاه‌تر خواهد بود. در این حالت، تنها گزینهٔ \f[CB]\-keyalg\f[R] الزامی است و برای گزینه‌های مشخص‌نشده‌ای که مقدار پیش‌فرض دارند، از پیش‌فرض‌ها استفاده می‌شود. مقادیر مورد نیاز از شما اعلان خواهد شد. می‌توانید دستور را به شکل زیر داشته باشید: .RS .PP \f[CB]keytool\ \-genkeypair\ \-keyalg\ rsa\f[R] .RE .PP در این حالت، یک مدخل keystore با نام مستعار \f[CB]mykey\f[R] همراه با یک جفت‌کلید تازه تولیدشده و یک گواهی با اعتبار ۹۰ روز ایجاد می‌شود. این مدخل در دایرکتوری خانگی شما در یک keystore به نام \f[CB]\&.keystore\f[R] قرار می‌گیرد. اگر \f[CB]\&.keystore\f[R] از قبل وجود نداشته باشد، ایجاد می‌شود. اطلاعات نام متمایز، گذرواژهٔ keystore و گذرواژهٔ کلید خصوصی از شما درخواست می‌شود. .PP \f[B]نکته:\f[R] .PP ادامهٔ مثال‌ها فرض می‌کنند که شما به اعلان‌ها با مقادیری معادل با مقادیر مشخص‌شده در نخستین دستور \f[CB]\-genkeypair\f[R] پاسخ داده‌اید. برای مثال، یک نام متمایز با \f[CB]cn=\f[R]\f[I]myname\f[R]\f[CB],\ ou=\f[R]\f[I]mygroup\f[R]\f[CB],\ o=\f[R]\f[I]mycompany\f[R]\f[CB],\ c=\f[R]\f[I]mycountry\f[R])..SH "درخواست گواهی امضاشده از یک CA (REQUESTING A SIGNED CERTIFICATE FROM A CA)" .PP \f[B]نکته:\f[R] .PP تولید جفت‌کلید یک گواهی خودامضا (self\-signed) ایجاد کرده است؛ با این حال، هنگامی که یک گواهی توسط یک CA امضا شده باشد، احتمال اینکه توسط دیگران مورد اعتماد قرار گیرد بسیار بیشتر است. .PP برای دریافت امضای CA، فرایند زیر را انجام دهید: .IP "1." 3 تولید یک CSR: .RS 4 .RS .PP \f[CB]keytool\ \-certreq\ \-file\ myname.csr\f[R] .RE .PP این دستور یک CSR برای موجودیت شناسایی‌شده با نام مستعار (alias) پیش‌فرض \f[CB]mykey\f[R] ایجاد می‌کند و درخواست را در فایلی با نام \f[CB]myname.csr\f[R] قرار می‌دهد. .RE .IP "2." 3 ارسال \f[CB]myname.csr\f[R] به یک CA، مانند DigiCert. .PP مرجع CA هویت شما یعنی درخواست‌کننده را (معمولاً به‌صورت آفلاین) احراز می‌کند و گواهی امضاشده توسط خود را بازمی‌گرداند که اصالت کلید عمومی شما را تأیید می‌کند. در برخی موارد، CA زنجیره‌ای از گواهی‌ها را بازمی‌گرداند که هر یک اصالت کلید عمومی امضاکننده گواهی قبلی در زنجیره را تأیید می‌کند. .SH "وارد کردن گواهی برای CA (IMPORTING A CERTIFICATE FOR THE CA)" .PP برای وارد کردن یک گواهی برای CA، فرایند زیر را انجام دهید: .IP "1." 3 پیش از وارد کردن پاسخ گواهی از یک CA، به یک یا چند گواهی مورد اعتماد در keystore خود یا در فایل keystore به نام \f[CB]cacerts\f[R] نیاز دارید. بخش \f[CB]\-importcert\f[R] را در \f[B]Commands\f[R] ببینید. .RS 4 .IP \[bu] 2 اگر پاسخ گواهی یک زنجیره گواهی باشد، به بالاترین گواهی این زنجیره نیاز دارید: گواهی ریشه CA که اصالت کلید عمومی CA را تأیید می‌کند. .IP \[bu] 2 اگر پاسخ گواهی یک تک‌گواهی باشد، به گواهی مرجع صادرکننده CA (همان که آن را امضا کرده است) نیاز دارید. اگر آن گواهی خودامضا نباشد، به گواهی امضاکننده آن نیاز خواهید داشت، و به همین ترتیب تا رسیدن به یک گواهی خودامضای ریشه CA. .PP مخزن کلید \f[CB]cacerts\f[R] همراه با مجموعه‌ای از گواهی‌های ریشه صادرشده توسط CAهای \f[B]برنامه گواهی ریشه جاوای اوراکل (the Oracle Java Root Certificate program)\f[R] [http://www.oracle.com/technetwork/java/javase/javasecarootcertsprogram\-1876540.html] عرضه می‌شود. اگر درخواست یک گواهی امضاشده از یک CA بدهید و گواهی تأییدکننده کلید عمومی آن CA به \f[CB]cacerts\f[R] اضافه نشده باشد، باید گواهی آن CA را به‌عنوان یک گواهی مورد اعتماد وارد (import) کنید. .PP یک گواهی از یک CA معمولاً خودامضا است یا توسط CA دیگری امضا شده است. اگر توسط CA دیگری امضا شده باشد، به گواهی‌ای نیاز دارید که اصالت کلید عمومی آن CA را تأیید کند. .PP برای نمونه، فایلی با نام \f[I]X\f[R]\f[CB]\&.cer\f[R] از شرکتی که یک CA است دریافت کرده‌اید و فرض بر این است که این فایل یک گواهی خودامضا است که اصالت کلید عمومی آن CA را تأیید می‌کند. پیش از اینکه آن را به‌عنوان یک گواهی مورد اعتماد وارد کنید، باید با انجام اقدامات زیر از معتبر بودن گواهی اطمینان حاصل نمایید: .IP "1." 3 مشاهده آن با دستور \f[CB]keytool\ \-printcert\f[R] یا دستور \f[CB]keytool\ \-importcert\f[R] بدون استفاده از گزینه \f[CB]\-noprompt\f[R]. اطمینان حاصل کنید که اثرانگشت‌های نمایش‌داده‌شده برای گواهی با اثرانگشت‌های مورد انتظار مطابقت دارند. .IP "2." 3 تماس با شخصی که گواهی را ارسال کرده است و مقایسه اثرانگشت‌هایی که مشاهده می‌کنید با مواردی که آنها نشان می‌دهند یا آنچه یک مخزن امن کلید عمومی ارائه می‌دهد. .PP تنها هنگامی که اثرانگشت‌ها یکسان باشند، این اطمینان حاصل می‌شود که گواهی در حین انتقال با گواهی شخص دیگری (مانند گواهی یک مهاجم) جایگزین نشده است. اگر چنین حمله‌ای رخ دهد و شما پیش از وارد کردن گواهی آن را بررسی نکرده باشید، به هر چیزی که توسط مهاجم امضا شود اعتماد خواهید کرد. .RE .IP "2." 3 جایگزین کردن گواهی خودامضا با یک زنجیره گواهی، به‌طوری که هر گواهی در زنجیره، کلید عمومی امضاکننده گواهی قبلی در زنجیره را تا رسیدن به یک CA ریشه تأیید اصالت کند. .RS 4 .PP اگر اطمینان دارید که گواهی معتبر است، می‌توانید با وارد کردن دستور زیر آن را به keystore خود بیفزایید: .RS .PP \f[CB]keytool\ \-importcert\ \-alias\f[R] \f[I]alias\f[R] \f[CB]\-file\ *X*\f[R].cer` .RE .PP این دستور از روی داده‌های موجود در فایل گواهی CA، یک مدخل گواهی مورد اعتماد در keystore ایجاد می‌کند و مقادیر \f[I]alias\f[R] را به آن مدخل اختصاص می‌دهد. .RE.SH وارد کردن پاسخ گواهی از CA .PP پس از آنکه گواهی احراز هویت‌کنندهٔ کلید عمومیِ مرجع صدور گواهی (CA) که درخواست امضای گواهی خود را به آن ارسال کرده‌اید وارد کردید (یا از پیش چنین گواهی‌ای در فایل \f[CB]cacerts\f[R] وجود دارد)، می‌توانید پاسخ گواهی را وارد کرده و گواهی خودامضاشدهٔ خود را با یک زنجیرهٔ گواهی جایگزین کنید. .PP زنجیرهٔ گواهی یکی از موارد زیر است: .IP \[bu] 2 توسط CA بازگردانده می‌شود، هنگامی که پاسخ CA یک زنجیره باشد. .IP \[bu] 2 هنگامی که پاسخ CA یک تک‌گواهی باشد، ساخته می‌شود. این زنجیرهٔ گواهی با استفاده از پاسخ گواهی و گواهی‌های معتبری که یا در keystore محل وارد کردن پاسخ و یا در فایل keystore \f[CB]cacerts\f[R] موجودند، ساخته می‌شود. .PP برای نمونه، اگر درخواست امضای گواهی خود را به DigiCert ارسال کرده‌اید، می‌توانید با وارد کردن دستور زیر پاسخ آن‌ها را وارد کنید: .PP \f[B]نکته:\f[R] .PP در این مثال، گواهی بازگردانده‌شده \f[CB]DCmyname.cer\f[R] نام دارد. .RS .PP \f[CB]keytool\ \-importcert\ \-trustcacerts\ \-file\ DCmyname.cer\f[R] .RE .SH صادر کردن گواهی احراز هویت‌کنندهٔ کلید عمومی .PP \f[B]نکته:\f[R] .PP اگر از دستور \f[CB]jarsigner\f[R] برای امضای یک فایل Java Archive (JAR) استفاده کرده‌اید، کلاینت‌هایی که از این فایل استفاده می‌کنند می‌خواهند امضای شما را احراز هویت کنند. .PP یکی از روش‌هایی که کلاینت‌ها می‌توانند شما را احراز هویت کنند، وارد کردن گواهی کلید عمومی شما در keystore خود به عنوان یک مدخل معتبر است. سپس می‌توانید گواهی را صادر کرده و در اختیار کلاینت‌های خود قرار دهید. .PP برای نمونه: .IP "1." 3 با وارد کردن دستور زیر، گواهی خود را در فایلی به نام \f[CB]myname.cer\f[R] کپی کنید: .RS 4 .PP \f[B]نکته:\f[R] .PP در این مثال، مدخل دارای نام مستعار \f[CB]mykey\f[R] است. .RS .PP \f[CB]keytool\ \-exportcert\ \-alias\ mykey\ \-file\ myname.cer\f[R] .RE .RE .IP "2." 3 با داشتن گواهی و فایل JAR امضاشده، کلاینت می‌تواند از دستور \f[CB]jarsigner\f[R] برای احراز هویت امضای شما استفاده کند. .SH وارد کردن KEYSTORE .PP از دستور \f[CB]importkeystore\f[R] برای وارد کردن یک keystore کامل به یک keystore دیگر استفاده کنید. این دستور تمام مدخل‌های keystore مبدأ، از جمله کلیدها و گواهی‌ها را با یک دستور واحد به keystore مقصد وارد می‌کند. می‌توانید از این دستور برای وارد کردن مدخل‌ها از نوع متفاوتی از keystore استفاده کنید. در حین فرایند وارد کردن، تمام مدخل‌های جدید در keystore مقصد دارای نام‌های مستعار و گذرواژه‌های حفاظتی یکسانی (برای کلیدهای محرمانه و کلیدهای خصوصی) خواهند بود. اگر دستور \f[CB]keytool\f[R] نتواند کلیدهای خصوصی یا کلیدهای محرمانه را از keystore مبدأ بازیابی کند، گذرواژه را از شما درخواست می‌کند. اگر تکراری بودن نام مستعار را شناسایی کند، یک نام مستعار جدید درخواست می‌کند؛ در این صورت می‌توانید یک نام مستعار جدید مشخص کنید یا صرفاً اجازه دهید دستور \f[CB]keytool\f[R] مدخل موجود را بازنویسی کند. .PP برای نمونه، جهت وارد کردن مدخل‌ها از یک keystore معمولی از نوع JKS به نام \f[CB]key.jks\f[R] به یک keystore سخت‌افزاری از نوع PKCS #11، دستور زیر را وارد کنید: .RS .PP \f[CB]keytool\ \-importkeystore\ \-srckeystore\ key.jks\ \-destkeystore\ NONE\ \-srcstoretype\ JKS\ \-deststoretype\ PKCS11\ \-srcstorepass\f[R] \f[I]password\f[R] \f[CB]\-deststorepass\f[R] \f[I]password\f[R] .RE .PP دستور \f[CB]importkeystore\f[R] همچنین می‌تواند برای وارد کردن یک مدخل منفرد از keystore مبدأ به keystore مقصد به کار رود. در این حالت، افزون بر گزینه‌های استفاده‌شده در مثال پیشین، باید نام مستعاری را که می‌خواهید وارد شود مشخص کنید. با تعیین گزینهٔ \f[CB]\-srcalias\f[R]، همچنین می‌توانید نام مستعار مقصد، گذرواژهٔ حفاظتی برای کلید محرمانه یا خصوصی و گذرواژهٔ حفاظتی مقصد مورد نظر خود را به صورت زیر مشخص کنید: .RS .PP \f[CB]keytool\ \-importkeystore\ \-srckeystore\ key.jks\ \-destkeystore\ NONE\ \-srcstoretype\ JKS\ \-deststoretype\ PKCS11\ \-srcstorepass\f[R] \f[I]password\f[R] \f[CB]\-deststorepass\f[R] \f[I]password\f[R] \f[CB]\-srcalias\ myprivatekey\ \-destalias\ myoldprivatekey\ \-srckeypass\f[R] \f[I]password\f[R] \f[CB]\-destkeypass\f[R] \f[I]password\f[R] \f[CB]\-noprompt\f[R] .RE.SH "تولید گواهی‌ها برای یک سرور SSL (GENERATING CERTIFICATES FOR AN SSL SERVER)" .PP دستورهای \f[CB]keytool\f[R] زیر برای تولید جفت‌کلیدها و گواهی‌ها برای سه موجودیت به کار می‌روند: .IP \[bu] 2 مرجع صدور گواهی ریشه (\f[CB]root\f[R]) .IP \[bu] 2 مرجع صدور گواهی میانی (\f[CB]ca\f[R]) .IP \[bu] 2 سرور SSL (\f[CB]server\f[R]) .PP اطمینان حاصل کنید که تمام گواهی‌ها را در یک keystore یکسان ذخیره می‌کنید. .IP .nf \f[CB] 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 \f[R] .fi .SH "اصطلاحات (TERMS)" .TP .B "مخزن کلید (Keystore)" مخزن کلید (keystore) فضایی برای ذخیره‌سازی کلیدها و گواهی‌های رمزنگاری است. .RS .RE .TP .B "مدخل‌های مخزن کلید (Keystore entries)" مخازن کلید می‌توانند انواع مختلفی از مدخل‌ها را داشته باشند. دو نوع مدخل پرکاربردتر برای دستور \f[CB]keytool\f[R] عبارتند از: .RS .PP مدخل‌های کلید (Key entries): هر مدخل اطلاعات کلید رمزنگاری بسیار حساسی را نگهداری می‌کند که در قالبی محافظت‌شده برای جلوگیری از دسترسی غیرمجاز ذخیره شده است. به طور معمول، کلید ذخیره‌شده در این نوع مدخل یک کلید محرمانه (secret key) یا یک کلید خصوصی (private key) همراه با زنجیره گواهی برای کلید عمومی متناظر است. بخش \f[B]Certificate Chains\f[R] را ببینید. دستور \f[CB]keytool\f[R] می‌تواند هر دو نوع مدخل را مدیریت کند، در حالی که ابزار \f[CB]jarsigner\f[R] تنها نوع دوم را پشتیبانی می‌کند، یعنی کلیدهای خصوصی و زنجیره‌های گواهی مرتبط با آن‌ها. .PP مدخل‌های گواهی معتمد (Trusted certificate entries): هر مدخل شامل یک گواهی کلید عمومی منفرد است که به طرف دیگری تعلق دارد. این مدخل گواهی معتمد نامیده می‌شود زیرا مالک keystore اعتماد دارد که کلید عمومی موجود در گواهی متعلق به هویتی است که توسط موضوع (subject/مالک) گواهی تعیین شده است. صادرکنندهٔ گواهی با امضای آن، این موضوع را ضمانت و تأیید می‌کند. .RE .TP .B "نام‌های مستعار مخزن کلید (Keystore aliases)" دسترسی به تمام مدخل‌های keystore (مدخل‌های کلید و مدخل‌های گواهی معتمد) از طریق نام‌های مستعار (alias) یکتا انجام می‌شود. .RS .PP هنگامی که با دستور \f[CB]\-genseckey\f[R] برای تولید کلید محرمانه، دستور \f[CB]\-genkeypair\f[R] برای تولید جفت‌کلید (کلید عمومی و خصوصی) یا دستور \f[CB]\-importcert\f[R] برای افزودن یک گواهی یا زنجیره گواهی به فهرست گواهی‌های معتمد، موجودیتی را به keystore اضافه می‌کنید، یک نام مستعار مشخص می‌شود. دستورهای بعدی \f[CB]keytool\f[R] باید از همین نام مستعار برای ارجاع به آن موجودیت استفاده کنند. .PP برای مثال، می‌توانید با دستور زیر از نام مستعار \f[CB]duke\f[R] برای تولید یک جفت‌کلید عمومی/خصوصی جدید و قرار دادن کلید عمومی در یک گواهی خودامضا (self\-signed) استفاده کنید. بخش \f[B]Certificate Chains\f[R] را ببینید. .RS .PP \f[CB]keytool\ \-genkeypair\ \-alias\ duke\ \-keyalg\ rsa\ \-keypass\f[R] \f[I]passwd\f[R] .RE .PP این مثال یک \f[I]passwd\f[R] اولیه تعیین می‌کند که دستورهای بعدی برای دسترسی به کلید خصوصی مربوط به نام مستعار \f[CB]duke\f[R] به آن نیاز خواهند داشت. اگر بعداً بخواهید گذرواژه کلید خصوصی Duke را تغییر دهید، از دستوری مانند زیر استفاده کنید: .RS .PP \f[CB]keytool\ \-keypasswd\ \-alias\ duke\ \-keypass\f[R] \f[I]passwd\f[R] \f[CB]\-new\f[R] \f[I]newpasswd\f[R] .RE .PP این دستور \f[I]passwd\f[R] اولیه را به \f[I]newpasswd\f[R] تغییر می‌دهد. یک گذرواژه نباید در خط فرمان یا درون یک اسکریپت مشخص شود مگر اینکه صرفاً برای آزمایش باشد یا در سیستمی امن قرار داشته باشید. اگر گزینهٔ گذرواژهٔ لازم را در خط فرمان مشخص نکنید، برای وارد کردن آن اعلان دریافت خواهید کرد. .RE .TP .B "پیاده‌سازی مخزن کلید (Keystore implementation)" کلاس \f[CB]KeyStore\f[R] ارائه‌شده در بستهٔ \f[CB]java.security\f[R] واسط‌های مشخصی را برای دسترسی و ویرایش اطلاعات درون یک keystore فراهم می‌کند. امکان وجود چندین پیاده‌سازی واقعی (concrete) متفاوت وجود دارد که هر یک از آن‌ها مربوط به نوع خاصی از keystore است. .RS .PP در حال حاضر، دو ابزار خط فرمان (\f[CB]keytool\f[R] و \f[CB]jarsigner\f[R]) از پیاده‌سازی‌های keystore استفاده می‌کنند. به این دلیل که کلاس \f[CB]KeyStore\f[R] به صورت عمومی (\f[CB]public\f[R]) تعریف شده است، کاربران می‌توانند برنامه‌های امنیتی بیشتری بنویسند که از آن بهره ببرند. .PP در JDK 9 و بالاتر، پیاده‌سازی پیش‌فرض keystore مقدار \f[CB]PKCS12\f[R] است. این یک keystore چندسکویی مبتنی بر استاندارد RSA PKCS12 Personal Information Exchange Syntax Standard است. این استاندارد در درجه اول برای ذخیره یا انتقال کلیدهای خصوصی، گواهی‌ها و اطلاعات محرمانه گوناگون کاربر در نظر گرفته شده است. پیاده‌سازی توکار دیگری نیز وجود دارد که توسط Oracle ارائه شده است. این پیاده‌سازی، keystore را به صورت فایلی با قالب اختصاصی به نام \f[CB]JKS\f[R] پیاده می‌کند. این فرمت از هر کلید خصوصی با گذرواژه اختصاصی خودش محافظت نموده و یکپارچگی کل keystore را نیز با یک گذرواژه (احتمالاً متفاوت) تأمین می‌کند. .PP پیاده‌سازی‌های keystore مبتنی بر ارائه‌دهنده (provider) هستند. به طور مشخص‌تر، واسط‌های کاربردی ارائه‌شده توسط \f[CB]KeyStore\f[R] در قالب یک Service Provider Interface (یا SPI) پیاده‌سازی شده‌اند. به این معنا که کلاس انتزاعی متناظری به نام \f[CB]KeystoreSpi\f[R]، همچنین در بستهٔ \f[CB]java.security\f[R] وجود دارد که متدهای واسط ارائه‌دهنده خدمات را که ارائه‌دهندگان باید پیاده‌سازی کنند، تعریف می‌کند. اصطلاح \f[I]provider\f[R] به یک بسته یا مجموعه‌ای از بسته‌ها اطلاق می‌شود که پیاده‌سازی واقعی زیرمجموعه‌ای از خدمات قابل دسترس توسط Java Security API را ارائه می‌دهند. برای ارائه یک پیاده‌سازی keystore، کلاینت‌ها باید یک ارائه‌دهنده پیاده‌سازی کنند و یک زیرکلاس از \f[CB]KeystoreSpi\f[R] ارائه دهند، همان‌گونه که در «Steps to Implement and Integrate a Provider» شرح داده شده است. .PP برنامه‌ها می‌توانند انواع مختلفی از پیاده‌سازی‌های keystore را از ارائه‌دهندگان مختلف با استفاده از متد کارخانه‌ای \f[CB]getInstance\f[R] موجود در کلاس \f[CB]KeyStore\f[R] انتخاب کنند. یک نوع keystore، ساختار ذخیره‌سازی و قالب داده اطلاعات keystore و الگوریتم‌های مورد استفاده برای حفاظت از کلیدهای خصوصی/محرمانه در keystore و حفظ یکپارچگی keystore را تعریف می‌کند. پیاده‌سازی‌های keystore از انواع مختلف با یکدیگر سازگار نیستند. .PP دستور \f[CB]keytool\f[R] روی هر پیاده‌سازی فایل‌محور از keystore کار می‌کند. این دستور مکان keystore ارسال‌شده در خط فرمان را به عنوان نام فایل در نظر گرفته و آن را به یک \f[CB]FileInputStream\f[R] تبدیل می‌نماید که اطلاعات keystore را از آن بارگذاری می‌کند. دستورهای \f[CB]jarsigner\f[R] می‌توانند keystore را از هر مکانی که با یک URL قابل تعیین باشد بخوانند. .PP برای \f[CB]keytool\f[R] و \f[CB]jarsigner\f[R]، می‌توانید نوع keystore را در خط فرمان با گزینهٔ \f[CB]\-storetype\f[R] مشخص کنید. .PP اگر صراحتاً نوع keystore را تعیین نکنید، این ابزارها پیاده‌سازی keystore را بر اساس مقدار مشخصهٔ \f[CB]keystore.type\f[R] در فایل مشخصات امنیتی انتخاب می‌کنند. فایل مشخصات امنیتی \f[CB]java.security\f[R] نام دارد و در دایرکتوری مشخصات امنیتی قرار دارد: .IP \[bu] 2 \f[B]لینوکس و OS X:\f[R] \f[CB]java.home/lib/security\f[R] .IP \[bu] 2 \f[B]ویندوز:\f[R] \f[CB]java.home\\lib\\security\f[R] .PP هر ابزار مقدار \f[CB]keystore.type\f[R] را دریافت می‌کند و سپس تمامی ارائه‌دهندگان نصب‌شده فعلی را بررسی می‌نماید تا یکی را بیابد که keystore از آن نوع را پیاده‌سازی کرده باشد. سپس از پیاده‌سازی keystore آن ارائه‌دهنده استفاده می‌کند. کلاس \f[CB]KeyStore\f[R] یک متد ایستا به نام \f[CB]getDefaultType\f[R] تعریف می‌کند که به برنامه‌ها امکان می‌دهد مقدار مشخصهٔ \f[CB]keystore.type\f[R] را بازیابی کنند. خط کد زیر یک نمونه از نوع پیش‌فرض keystore را مطابق آنچه در مشخصهٔ \f[CB]keystore.type\f[R] تعیین شده ایجاد می‌کند: .RS.PP \f[CB]KeyStore\ keyStore\ =\ KeyStore.getInstance(KeyStore.getDefaultType());\f[R] .RE .PP نوع پیش‌فرض keystore مقدار \f[CB]pkcs12\f[R] است، که یک keystore چندسکویی بر پایه استاندارد RSA PKCS12 Personal Information Exchange Syntax می‌باشد. این مقدار توسط خط زیر در فایل مشخصه‌های امنیتی تعیین می‌شود: .RS .PP \f[CB]keystore.type=pkcs12\f[R] .RE .PP برای اینکه ابزارها از پیاده‌سازی دیگری از keystore به غیر از پیش‌فرض استفاده کنند، می‌توانید آن خط را برای مشخص کردن نوع دیگری از keystore تغییر دهید. برای مثال، اگر می‌خواهید از پیاده‌سازی keystore نوع \f[CB]jks\f[R] متعلق به Oracle استفاده کنید، آن خط را به صورت زیر تغییر دهید: .RS .PP \f[CB]keystore.type=jks\f[R] .RE .PP \f[B]نکته:\f[R] .PP بزرگی و کوچکی حروف در نام‌گذاری نوع keystore اهمیت ندارد. به عنوان مثال، \f[CB]JKS\f[R] همانند \f[CB]jks\f[R] در نظر گرفته می‌شود. .RE .TP .B گواهی (Certificate) یک گواهی (یا گواهی کلید عمومی) بیانیه‌ای با امضای دیجیتال از سوی یک موجودیت (صادرکننده یا issuer) است که بیان می‌کند کلید عمومی و برخی اطلاعات دیگرِ یک موجودیت دیگر (موضوع یا subject)، مقدار مشخصی دارد. اصطلاحات زیر با گواهی‌ها مرتبط هستند: .RS .IP \[bu] 2 کلیدهای عمومی (Public Keys): این‌ها اعدادی هستند که به یک موجودیت خاص مرتبط شده‌اند و هدف این است که برای هر کسی که نیاز به تعاملات مورد اعتماد با آن موجودیت دارد، شناخته‌شده باشند. کلیدهای عمومی برای اعتبارسنجی امضاها استفاده می‌شوند. .IP \[bu] 2 دارای امضای دیجیتال (Digitally Signed): اگر داده‌ای دارای امضای دیجیتال باشد، همراه با هویت یک موجودیت و امضایی ذخیره می‌شود که ثابت می‌کند آن موجودیت از داده‌ها آگاه است. این داده‌ها با امضا شدن توسط کلید خصوصیِ آن موجودیت، غیرقابل جعل می‌شوند. .IP \[bu] 2 هویت (Identity): روشی شناخته‌شده برای ارجاع به یک موجودیت. در برخی سامانه‌ها، هویت همان کلید عمومی است، و در سامانه‌های دیگر می‌تواند هر چیزی از یک Oracle Solaris UID گرفته تا یک نشانی ایمیل یا یک نام متمایز X.509 باشد. .IP \[bu] 2 امضا (Signature): یک امضا با استفاده از کلید خصوصی یک موجودیت روی بخشی از داده‌ها محاسبه می‌شود؛ یعنی امضاکننده، که در مورد یک گواهی به عنوان صادرکننده (issuer) نیز شناخته می‌شود. .IP \[bu] 2 کلیدهای خصوصی (Private Keys): این‌ها اعدادی هستند که هر کدام از آن‌ها قرار است تنها برای موجودیت خاصی که مالک آن کلید خصوصی است شناخته‌شده باشند (یعنی باید مخفی نگه داشته شوند). کلیدهای خصوصی و عمومی در تمامی سامانه‌های رمزنگاری کلید عمومی (که سامانه‌های رمزنگاری کلید عمومی یا crypto systems نیز نامیده می‌شوند) به صورت جفت وجود دارند. در یک سامانه رمزنگاری کلید عمومی معمول، مانند DSA، یک کلید خصوصی دقیقاً با یک کلید عمومی مطابقت دارد. از کلیدهای خصوصی برای محاسبه امضاها استفاده می‌شود. .IP \[bu] 2 موجودیت (Entity): یک موجودیت می‌تواند یک شخص، سازمان، برنامه، رایانه، کسب‌وکار، بانک یا چیز دیگری باشد که شما تا حدی به آن اعتماد دارید. .PP رمزنگاری کلید عمومی نیازمند دسترسی به کلیدهای عمومی کاربران است. در یک محیط شبکه‌ای در مقیاس بزرگ، غیرممکن است تضمین شود که از قبل بین موجودیت‌های برقرارکننده ارتباط رابطه‌ای شکل گرفته است یا اینکه یک مخزن قابل اعتماد حاوی تمامی کلیدهای عمومی مورد استفاده وجود دارد. گواهی‌ها به عنوان راهکاری برای حل این مشکلِ توزیع کلید عمومی ابداع شدند. امروزه یک مرجع صدور گواهی (Certification Authority یا CA) می‌تواند به عنوان شخص ثالث مورد اعتماد عمل کند. مراجع CA موجودیت‌هایی نظیر کسب‌وکارها هستند که برای امضا کردن (صدور) گواهی‌ها برای سایر موجودیت‌ها مورد اعتماد می‌باشند. فرض بر این است که مراجع CA تنها گواهی‌های معتبر و قابل اعتماد ایجاد می‌کنند زیرا ملزم به توافق‌نامه‌های قانونی هستند. مراجع صدور گواهی عمومی متعددی مانند DigiCert، Comodo، Entrust و غیره وجود دارند. .PP شما همچنین می‌توانید با استفاده از محصولاتی نظیر Microsoft Certificate Server یا محصول Entrust CA، یک مرجع صدور گواهی اختصاصی برای سازمان خود راه‌اندازی کنید. با دستور \f[CB]keytool\f[R]، امکان نمایش، وارد کردن (import) و صادر کردن (export) گواهی‌ها وجود دارد. همچنین امکان تولید گواهی‌های خودامضا (self\-signed) وجود دارد. .PP دستور \f[CB]keytool\f[R] در حال حاضر گواهی‌های X.509 را مدیریت می‌کند. .RE .TP .B گواهی‌های X.509 (X.509 Certificates) استاندارد X.509 مشخص می‌کند چه اطلاعاتی می‌تواند در یک گواهی قرار گیرد و نحوه نگارش آن (قالب داده) را توصیف می‌کند. تمامی داده‌ها در یک گواهی با دو استاندارد مرتبط به نام ASN.1/DER کدگذاری می‌شوند. استاندارد Abstract Syntax Notation 1 داده‌ها را توصیف می‌کند. استاندارد Definite Encoding Rules یک روش واحد را برای ذخیره و انتقال آن داده‌ها مشخص می‌سازد. .RS .PP تمام گواهی‌های X.509، علاوه بر امضا، دارای داده‌های زیر هستند: .IP \[bu] 2 نسخه (Version): این فیلد مشخص می‌کند کدام نسخه از استاندارد X.509 برای این گواهی اعمال می‌شود، که بر اطلاعات قابل درج در آن تأثیر می‌گذارد. تاکنون سه نسخه تعریف شده است. دستور \f[CB]keytool\f[R] می‌تواند گواهی‌های v1، v2 و v3 را وارد (import) و صادر (export) کند. این دستور گواهی‌های v3 تولید می‌کند. .RS 2 .IP \[bu] 2 نسخه ۱ استاندارد X.509 (یا X.509 Version 1) از سال ۱۹۸۸ در دسترس بوده، به‌طور گسترده مستقر شده است و عمومی‌ترین نسخه به شمار می‌رود. .IP \[bu] 2 نسخه ۲ استاندارد X.509 (یا X.509 Version 2) مفهوم شناسه‌های یکتای موضوع و صادرکننده را برای مدیریت احتمال استفاده مجدد از نام‌های موضوع یا صادرکننده در طول زمان معرفی کرد. اکثر اسناد پروفایل گواهی اکیداً توصیه می‌کنند که نام‌ها مجدداً استفاده نشوند و گواهی‌ها از شناسه‌های یکتا بهره نگیرند. گواهی‌های نسخه ۲ کاربرد گسترده‌ای ندارند. .IP \[bu] 2 نسخه ۳ استاندارد X.509 (یا X.509 Version 3) جدیدترین نسخه (۱۹۹۶) است و از مفهوم افزونه‌ها (extensions) پشتیبانی می‌کند که در آن هر کسی می‌تواند یک افزونه تعریف کرده و آن را در گواهی بگنجاند. برخی از افزونه‌های متداول عبارتند از: KeyUsage (استفاده از کلیدها را به اهداف خاصی مانند \f[CB]signing\-only\f[R] محدود می‌کند) و AlternativeNames (اجازه می‌دهد هویت‌های دیگری نیز با این کلید عمومی مرتبط شوند، برای مثال نام‌های DNS، نشانی‌های ایمیل و آدرس‌های IP). افزونه‌ها می‌توانند بحرانی (critical) علامت‌گذاری شوند تا نشان دهند که آن افزونه باید حتماً بررسی شده و اعمال گردد یا مورد استفاده قرار گیرد. برای نمونه، اگر گواهی‌ای دارای افزونه KeyUsage با علامت بحرانی (critical) و مقدار \f[CB]keyCertSign\f[R] باشد، در هنگام ارائه این گواهی در حین ارتباط SSL باید رد شود، زیرا افزونه گواهی مشخص می‌کند که کلید خصوصی مرتبط تنها باید برای امضای گواهی‌ها استفاده شود و نه برای کاربرد در SSL. .RE .IP \[bu] 2 شماره سریال (Serial number): موجودیتی که گواهی را ایجاد کرده است مسئول تخصیص یک شماره سریال به آن است تا از سایر گواهی‌هایی که صادر می‌کند متمایز شود. این اطلاعات به روش‌های متعددی استفاده می‌شود. برای مثال، هنگامی که یک گواهی باطل می‌شود، شماره سریال آن در یک لیست ابطال گواهی (Certificate Revocation List یا CRL) قرار می‌گیرد. .IP \[bu] 2 شناسه الگوریتم امضا (Signature algorithm identifier): الگوریتم مورد استفاده توسط CA برای امضای گواهی را مشخص می‌کند. .IP \[bu] 2 نام صادرکننده (Issuer name): نام متمایز (Distinguished Name) بر اساس استاندارد X.500 برای موجودیتی که گواهی را امضا کرده است. این معمولاً یک CA است. استفاده از این گواهی به معنای اعتماد به موجودیتی است که این گواهی را امضا کرده است. در برخی موارد، مانند گواهی‌های ریشه (root) یا مراجع CA سطح بالا (top\-level)، صادرکننده گواهیِ خودش را امضا می‌کند. .IP \[bu] 2 دوره اعتبار (Validity period): هر گواهی فقط برای مدت زمان محدودی معتبر است. این دوره با یک تاریخ و زمان شروع و یک تاریخ و زمان پایان توصیف می‌شود و می‌تواند به کوتاهی چند ثانیه یا تقریباً به طول یک قرن باشد. دوره اعتبار انتخاب‌شده به عوامل متعددی بستگی دارد، مانند قدرت کلید خصوصیِ مورد استفاده برای امضای گواهی، یا مبلغی که شخص مایل است برای یک گواهی پرداخت کند. این دوره، بازه زمانی مورد انتظاری است که در آن موجودیت‌ها می‌توانند به مقدار عمومی اتکا کنند، مشروط بر اینکه کلید خصوصی مرتبط به خطر نیفتاده باشد. .IP \[bu] 2 نام موضوع (Subject name): نام موجودیتی که گواهی، کلید عمومی آن را مشخص می‌کند. این نام از استاندارد X.500 استفاده می‌کند، بنابراین طوری در نظر گرفته شده که در سراسر اینترنت یکتا باشد. این، نام متمایز (DN) استاندارد X.500 برای آن موجودیت است. برای مثال، .RS 2 .RS .PP \f[CB]CN=Java\ Duke,\ OU=Java\ Software\ Division,\ O=Oracle\ Corporation,\ C=US\f[R] .RE.PP این موارد به نام عمومی (CN)، واحد سازمانی (OU)، سازمان (O) و کشور (C) سوژه (subject) اشاره دارند. .RE .IP \[bu] 2 اطلاعات کلید عمومی سوژه: این، کلید عمومی موجودیت نام‌برده به همراه یک شناسه الگوریتم است که مشخص می‌کند این کلید به کدام سامانه رمزنگاری کلید عمومی و پارامترهای کلید مربوط به آن تعلق دارد. .RE .TP .B زنجیره‌های گواهی (Certificate Chains) دستور \f[CB]keytool\f[R] می‌تواند مدخل‌های کلید keystore را که هر کدام حاوی یک کلید خصوصی و یک زنجیره گواهی مرتبط هستند، ایجاد و مدیریت کند. نخستین گواهی در زنجیره حاوی کلید عمومی متناظر با کلید خصوصی است. .RS .PP هنگامی که کلیدها برای نخستین بار تولید می‌شوند، زنجیره معمولاً تنها با یک عنصر آغاز می‌شود: یک گواهی خودامضا (self\-signed). مدخل \-genkeypair را در بخش \f[B]Commands\f[R] ببینید. یک گواهی خودامضا گواهی‌ای است که صادرکننده (امضاکننده) آن با سوژه (subject) یکسان است. سوژه همان موجودیتی است که کلید عمومی آن توسط گواهی تأیید اصالت می‌شود. هنگامی که دستور \f[CB]\-genkeypair\f[R] برای تولید یک جفت کلید عمومی/خصوصی جدید فراخوانی می‌شود، کلید عمومی را نیز درون یک گواهی خودامضا قرار می‌دهد (مگر اینکه گزینه \f[CB]\-signer\f[R] مشخص شده باشد). .PP سپس، پس از اینکه یک درخواست امضای گواهی (CSR) با دستور \f[CB]\-certreq\f[R] تولید و به یک مرجع صدور گواهی (CA) ارسال شد، پاسخ دریافت‌شده از CA با دستور \f[CB]\-importcert\f[R] وارد می‌شود و گواهی خودامضا با زنجیره‌ای از گواهی‌ها جایگزین می‌گردد. در انتهای (پایین) زنجیره، گواهی (پاسخ) صادرشده توسط CA قرار دارد که کلید عمومی سوژه را تأیید اصالت می‌کند. گواهی بعدی در زنجیره، گواهی‌ای است که کلید عمومی CA را تأیید اصالت می‌کند. .PP در بسیاری از موارد، این یک گواهی خودامضا است که گواهی‌ای از سوی CA برای تأیید اصالت کلید عمومی خودش است و آخرین گواهی در زنجیره به‌شمار می‌رود. در موارد دیگر، ممکن است CA زنجیره‌ای از گواهی‌ها را بازگرداند. در این حالت، گواهی انتهای زنجیره یکسان است (گواهی‌ای که توسط CA امضا شده و کلید عمومی مدخل کلید را تأیید اصالت می‌کند)، اما دومین گواهی در زنجیره گواهی‌ای است که توسط یک CA دیگر امضا شده و کلید عمومی مرجع صدور گواهی‌ای را که CSR برای آن ارسال شده بود تأیید اصالت می‌کند. گواهی بعدی در زنجیره، گواهی‌ای است که کلید CA دوم را تأیید اصالت می‌کند و این روند به همین ترتیب ادامه می‌یابد تا به یک گواهی ریشه (root) خودامضا برسد. هر گواهی در زنجیره (پس از گواهی نخست)، کلید عمومیِ امضاکننده گواهی پیشین در زنجیره را تأیید اصالت می‌کند. .PP بسیاری از CAها تنها گواهی صادرشده را بدون زنجیره پشتیبان بازمی‌گردانند، به‌ویژه زمانی که ساختار سلسله‌مراتبی مسطح باشد (هیچ CA میانی وجود نداشته باشد). در این حالت، زنجیره گواهی باید از اطلاعات گواهی‌های معتبری که از پیش در keystore ذخیره شده است، ایجاد شود. .PP قالب پاسخ متفاوتی (تعریف‌شده توسط استاندارد PKCS #7) علاوه بر گواهی صادرشده، شامل زنجیره گواهی پشتیبان نیز می‌شود. هر دو قالب پاسخ می‌توانند توسط دستور \f[CB]keytool\f[R] پردازش شوند. .PP گواهی CA بالاترین سطح (ریشه یا root) خودامضا است. با این حال، اعتماد به کلید عمومی ریشه از خود گواهی ریشه ناشی نمی‌شود، بلکه از منابع دیگری مانند یک روزنامه حاصل می‌شود. زیرا هر کسی می‌تواند یک گواهی خودامضا با نام متمایز (distinguished name) به‌طور مثال CA ریشه DigiCert تولید کند. کلید عمومی CA ریشه به‌طور گسترده شناخته‌شده است. تنها دلیل ذخیره آن در یک گواهی این است که این قالب توسط اکثر ابزارها قابل فهم است؛ بنابراین در این حالت از گواهی صرفاً به عنوان وسیله‌ای برای انتقال کلید عمومی CA ریشه استفاده می‌شود. پیش از افزودن گواهی CA ریشه به keystore خود، باید آن را با گزینه \f[CB]\-printcert\f[R] مشاهده کرده و اثر انگشت (fingerprint) نمایش‌داده‌شده را با اثر انگشت شناخته‌شده‌ای که از روزنامه، وب‌گاه CA ریشه و نظایر آن به دست آمده است، مقایسه کنید. .RE .TP .B فایل گواهی‌های cacerts (cacerts Certificates File) یک فایل گواهی به نام \f[CB]cacerts\f[R] در دایرکتوری ویژگی‌های امنیتی قرار دارد: .RS .IP \[bu] 2 \f[B]لینوکس و OS X:\f[R] \f[I]JAVA_HOME\f[R]\f[CB]/lib/security\f[R] .IP \[bu] 2 \f[B]ویندوز:\f[R] \f[I]JAVA_HOME\f[R]\f[CB]\\lib\\security\f[R] .PP فایل \f[CB]cacerts\f[R] نشان‌دهنده یک keystore در سطح سراسری سیستم شامل گواهی‌های CA است. مدیران سیستم می‌توانند با مشخص کردن \f[CB]jks\f[R] به عنوان نوع keystore، آن فایل را با دستور \f[CB]keytool\f[R] پیکربندی و مدیریت کنند. فایل keystore با نام \f[CB]cacerts\f[R] با مجموعه‌ای پیش‌فرض از گواهی‌های CA ریشه عرضه می‌شود. برای لینوکس، OS X و ویندوز، می‌توانید گواهی‌های پیش‌فرض را با دستور زیر فهرست کنید: .RS .PP \f[CB]keytool\ \-list\ \-cacerts\f[R] .RE .PP گذرواژه اولیه فایل keystore با نام \f[CB]cacerts\f[R] برابر با \f[CB]changeit\f[R] است. مدیران سیستم باید هنگام نصب SDK، این گذرواژه و مجوز دسترسی پیش‌فرض آن فایل را تغییر دهند. .PP \f[B]نکته:\f[R] .PP اعتبارسنجی فایل \f[CB]cacerts\f[R] بسیار مهم است. از آنجا که شما به CAهای موجود در فایل \f[CB]cacerts\f[R] به عنوان موجودیت‌هایی برای امضا و صدور گواهی برای سایر موجودیت‌ها اعتماد می‌کنید، باید فایل \f[CB]cacerts\f[R] را با دقت مدیریت کنید. فایل \f[CB]cacerts\f[R] تنها باید شامل گواهی‌های CAهایی باشد که به آن‌ها اطمینان دارید. بررسی گواهی‌های CA ریشه مورد اعتمادِ بسته‌بندی‌شده در فایل \f[CB]cacerts\f[R] و اتخاذ تصمیمات مربوط به اعتماد بر عهده شماست. .PP برای حذف یک گواهی CA غیرقابل اعتماد از فایل \f[CB]cacerts\f[R]، از گزینه \f[CB]\-delete\f[R] دستور \f[CB]keytool\f[R] استفاده کنید. می‌توانید فایل \f[CB]cacerts\f[R] را در دایرکتوری \f[CB]$JAVA_HOME/lib/security\f[R] در JDK پیدا کنید. اگر اجازه ویرایش این فایل را ندارید، با مدیر سیستم خود تماس بگیرید. .RE .TP .B استاندارد کدگذاری گواهی RFC 1421 اینترنت (Internet RFC 1421 Certificate Encoding Standard) گواهی‌ها معمولاً به جای کدگذاری باینری، با استفاده از قالب کدگذاری قابل‌چاپ تعریف‌شده توسط استاندارد اینترنت RFC 1421 ذخیره می‌شوند. این قالب گواهی، که با عنوان کدگذاری Base64 نیز شناخته می‌شود، صدور گواهی‌ها را به برنامه‌های دیگر از طریق ایمیل یا سازوکارهای دیگر آسان می‌سازد. .RS .PP گواهی‌های خوانده‌شده توسط دستورهای \f[CB]\-importcert\f[R] و \f[CB]\-printcert\f[R] می‌توانند در این قالب یا به صورت کدگذاری دودویی (باینری) باشند. دستور \f[CB]\-exportcert\f[R] به‌طور پیش‌فرض گواهی را در کدگذاری باینری صادر می‌کند، اما هنگام مشخص شدن گزینه \f[CB]\-rfc\f[R]، گواهی را در قالب کدگذاری قابل‌چاپ در خروجی قرار می‌دهد. .PP دستور \f[CB]\-list\f[R] به‌طور پیش‌فرض اثر انگشت SHA\-256 یک گواهی را چاپ می‌کند. اگر گزینه \f[CB]\-v\f[R] مشخص شود، گواهی در قالبی خوانا برای انسان چاپ می‌شود. اگر گزینه \f[CB]\-rfc\f[R] مشخص شود، گواهی در قالب کدگذاری قابل‌چاپ در خروجی قرار می‌گیرد. .PP در قالب کدگذاری قابل‌چاپ، گواهی کدگذاری‌شده در ابتدا و انتها با متن زیر محدود می‌شود: .IP .nf \f[CB] \-\-\-\-\-BEGIN\ CERTIFICATE\-\-\-\-\- encoded\ certificate\ goes\ here. \-\-\-\-\-END\ CERTIFICATE\-\-\-\-\- \f[R] .fi .RE .TP .B نام‌های متمایز X.500 (X.500 Distinguished Names) نام‌های متمایز X.500 برای شناسایی موجودیت‌ها استفاده می‌شوند، مانند مواردی که توسط فیلدهای \f[CB]subject\f[R] و \f[CB]issuer\f[R] (امضاکننده) در گواهی‌های X.509 نام‌گذاری شده‌اند. دستور \f[CB]keytool\f[R] از زیربخش‌های زیر پشتیبانی می‌کند: .RS .IP \[bu] 2 commonName: نام عمومی یک فرد، مانند Susan Jones. .IP \[bu] 2 organizationUnit: نام سازمان کوچک (مانند دپارتمان یا بخش)؛ برای نمونه، Purchasing. .IP \[bu] 2 localityName: نام محل (شهر)؛ برای نمونه، Palo Alto. .IP \[bu] 2 stateName: نام ایالت یا استان؛ برای نمونه، California. .IP \[bu] 2 country: کد کشور دو حرفی؛ برای نمونه، CH. .PP هنگامی که یک رشته نام متمایز را به عنوان مقدار گزینه \f[CB]\-dname\f[R]، مانند دستور \f[CB]\-genkeypair\f[R]، ارائه می‌دهید، رشته باید در قالب زیر باشد: .RS.PP \f[CB]CN=cName,\ OU=orgUnit,\ O=org,\ L=city,\ S=state,\ C=countryCode\f[R] .RE .PP تمامی موارد زیر نشان‌دهنده مقادیر واقعی هستند و کلیدواژه‌های پیشین مخفف موارد زیر می‌باشند: .IP .nf \f[CB] CN=commonName OU=organizationUnit O=organizationName L=localityName S=stateName C=country \f[R] .fi .PP یک نمونه رشتهٔ distinguished name عبارت است از: .RS .PP \f[CB]CN=Mark\ Smith,\ OU=Java,\ O=Oracle,\ L=Cupertino,\ S=California,\ C=US\f[R] .RE .PP یک دستور نمونه با استفاده از چنین رشته‌ای: .RS .PP \f[CB]keytool\ \-genkeypair\ \-dname\ "CN=Mark\ Smith,\ OU=Java,\ O=Oracle,\ L=Cupertino,\ S=California,\ C=US"\ \-alias\ mark\ \-keyalg\ rsa\f[R] .RE .PP بزرگی یا کوچکی حروف برای کلیدواژه‌های مخفف اهمیتی ندارد. برای نمونه، با CN، cn و Cn به یک شکل رفتار می‌شود. .PP ترتیب قرارگیری اهمیت دارد؛ هر زیرمؤلفه باید در ترتیب تعیین‌شده قرار گیرد. با این حال، نیازی نیست همهٔ زیرمؤلفه‌ها وجود داشته باشند. می‌توانید از یک زیرمجموعه استفاده کنید، برای نمونه: .RS .PP \f[CB]CN=Smith,\ OU=Java,\ O=Oracle,\ C=US\f[R] .RE .PP اگر مقدار یک رشتهٔ distinguished name شامل کاما باشد، هنگام مشخص کردن رشته در خط فرمان، کاما باید با یک نویسهٔ بک‌اسلش (\\) گریز داده شود (escape شود)، مانند: .RS .PP \f[CB]cn=Jack,\ ou=Java\\,\ Product\ Development,\ o=Oracle,\ c=US\f[R] .RE .PP هرگز الزامی به تعیین رشتهٔ distinguished name در خط فرمان نیست. هنگامی که distinguished name برای دستوری لازم باشد اما در خط فرمان مشخص نشده باشد، هر یک از زیرمؤلفه‌ها به صورت تعاملی از کاربر پرسیده می‌شود. در این حالت، نیازی به گریز دادن کاما با نویسهٔ بک‌اسلش (\\) نیست. .RE .SH "هشدارها (WARNINGS)" .SH "هشدار وارد کردن گواهی‌های معتمد (IMPORTING TRUSTED CERTIFICATES WARNING)" .PP \f[B]مهم\f[R]: پیش از وارد کردن گواهی به عنوان یک گواهی معتمد (trusted)، حتماً آن را با دقت بسیار بررسی کنید. .PP \f[B]مثال Windows:\f[R] .PP ابتدا گواهی را با دستور \f[CB]\-printcert\f[R] یا دستور \f[CB]\-importcert\f[R] بدون گزینهٔ \f[CB]\-noprompt\f[R] مشاهده کنید. اطمینان حاصل کنید که اثرانگشت‌های نمایش‌داده‌شدهٔ گواهی با مقادیر مورد انتظار مطابقت دارند. برای نمونه، فرض کنید شخصی گواهی‌ای را برای شما ارسال یا ایمیل کرده و شما آن را در فایلی به نام \f[CB]\\tmp\\cert\f[R] قرار داده‌اید. پیش از آنکه گواهی را به فهرست گواهی‌های معتمد خود بیفزایید، می‌توانید دستور \f[CB]\-printcert\f[R] را برای مشاهدهٔ اثرانگشت‌های آن به صورت زیر اجرا کنید: .IP .nf \f[CB] \ \ 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 \f[R] .fi .PP \f[B]مثال Linux:\f[R] .PP ابتدا گواهی را با دستور \f[CB]\-printcert\f[R] یا دستور \f[CB]\-importcert\f[R] بدون گزینهٔ \f[CB]\-noprompt\f[R] مشاهده کنید. اطمینان حاصل کنید که اثرانگشت‌های نمایش‌داده‌شدهٔ گواهی با مقادیر مورد انتظار مطابقت دارند. برای نمونه، فرض کنید شخصی گواهی‌ای را برای شما ارسال یا ایمیل کرده و شما آن را در فایلی به نام \f[CB]/tmp/cert\f[R] قرار داده‌اید. پیش از آنکه گواهی را به فهرست گواهی‌های معتمد خود بیفزایید، می‌توانید دستور \f[CB]\-printcert\f[R] را برای مشاهدهٔ اثرانگشت‌های آن به صورت زیر اجرا کنید: .IP .nf \f[CB] \ \ 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 \f[R] .fi .PP سپس با فرستندهٔ گواهی تماس تلفنی یا ارتباط دیگری برقرار کرده و اثرانگشت‌هایی را که مشاهده می‌کنید با مقادیر ارائه شده از سوی آن‌ها مقایسه نمایید. تنها در صورتی که اثرانگشت‌ها یکسان باشند، تضمین می‌شود که گواهی در حین انتقال با گواهی شخص دیگری مانند یک مهاجم جایگزین نشده است. اگر چنین حمله‌ای رخ داده باشد و گواهی را پیش از وارد کردن بررسی نکرده باشید، به هر آنچه توسط مهاجم امضا شده باشد اعتماد خواهید کرد؛ برای نمونه، یک فایل JAR که درون آن فایل‌های class مخرب قرار دارد. .PP \f[B]نکته:\f[R] .PP اجرای دستور \f[CB]\-printcert\f[R] پیش از وارد کردن گواهی الزامی نیست. دلیل این امر آن است که پیش از افزودن گواهی به فهرست گواهی‌های معتمد در keystore، دستور \f[CB]\-importcert\f[R] اطلاعات گواهی را نمایش داده و تأیید آن را از شما درخواست می‌کند. سپس می‌توانید عملیات وارد کردن را متوقف کنید. با این حال، این کار تنها زمانی ممکن است که دستور \f[CB]\-importcert\f[R] را بدون گزینهٔ \f[CB]\-noprompt\f[R] فراخوانی کنید. اگر گزینهٔ \f[CB]\-noprompt\f[R] مشخص شده باشد، هیچ تعاملی با کاربر صورت نخواهد گرفت..SH "هشدار گذرواژه‌ها (PASSWORDS WARNING)" .PP بیشتر دستوراتی که بر روی یک keystore عمل می‌کنند، به گذرواژهٔ انبار نیاز دارند. برخی دستورات به گذرواژهٔ کلید خصوصی/سری نیاز دارند. گذرواژه‌ها را می‌توان در خط فرمان با گزینه‌های \f[CB]\-storepass\f[R] و \f[CB]\-keypass\f[R] مشخص کرد. با این حال، نباید گذرواژه‌ای را در خط فرمان یا در یک اسکریپت مشخص کرد مگر اینکه برای مقاصد آزمایشی باشد یا در یک سامانهٔ امن حضور داشته باشید. هنگامی که یک گزینهٔ گذرواژهٔ الزامی را در خط فرمان مشخص نکنید، برای وارد کردن آن از شما درخواست می‌شود. .SH "هشدار انطباق گواهی (CERTIFICATE CONFORMANCE WARNING)" .PP سند \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 تعریف کرده است که شامل مقادیر و ترکیب مقادیر معتبر برای فیلدها و افزونه‌های گواهی می‌شود. .PP دستور \f[CB]keytool\f[R] تمام این قواعد را تحمیل نمی‌کند، بنابراین می‌تواند گواهی‌هایی تولید کند که با استاندارد انطباق ندارند، مانند گواهی‌های خودامضاشده (self\-signed) که برای اهداف آزمایش داخلی استفاده می‌شوند. گواهی‌هایی که با استاندارد منطبق نباشند ممکن است توسط JDK یا سایر برنامه‌ها رد شوند. کاربران باید اطمینان حاصل کنند که گزینه‌های درستی را برای \f[CB]\-dname\f[R]، \f[CB]\-ext\f[R] و غیره فراهم می‌کنند. .SH "وارد کردن یک گواهی معتمد جدید (IMPORT A NEW TRUSTED CERTIFICATE)" .PP پیش از آنکه گواهی را به keystore اضافه کنید، دستور \f[CB]keytool\f[R] با تلاش برای ایجاد یک زنجیرهٔ اعتماد از آن گواهی تا یک گواهی خودامضاشده (متعلق به یک CA ریشه)، با استفاده از گواهی‌های معتمدی که از قبل در keystore موجود هستند، آن را اعتبارسنجی می‌کند. .PP اگر گزینهٔ \f[CB]\-trustcacerts\f[R] مشخص شده باشد، گواهی‌های بیشتری برای زنجیرهٔ اعتماد در نظر گرفته می‌شوند، یعنی گواهی‌های موجود در فایلی به نام \f[CB]cacerts\f[R]. .PP اگر دستور \f[CB]keytool\f[R] نتواند یک مسیر اعتماد را از گواهی در حال وارد شدن تا یک گواهی خودامضاشده (چه از keystore یا از فایل \f[CB]cacerts\f[R]) برقرار کند، اطلاعات گواهی چاپ می‌شود و از کاربر خواسته می‌شود تا با مقایسهٔ اثرانگشت‌های نمایش‌داده‌شده با اثرانگشت‌های به‌دست‌آمده از یک منبع اطلاعاتی (معتمد) دیگر که ممکن است مالک گواهی باشد، آن را تأیید کند. بسیار دقت کنید تا پیش از وارد کردن گواهی به عنوان یک گواهی معتمد، از معتبر بودن آن اطمینان حاصل نمایید. کاربر این امکان را دارد که عملیات وارد کردن را متوقف کند. اگر گزینهٔ \f[CB]\-noprompt\f[R] مشخص شده باشد، هیچ تعاملی با کاربر صورت نمی‌گیرد. .SH "وارد کردن یک پاسخ گواهی (IMPORT A CERTIFICATE REPLY)" .PP هنگامی که یک پاسخ گواهی را وارد می‌کنید، پاسخ گواهی با گواهی‌های معتمد از keystore، و در صورت تعیین گزینهٔ \f[CB]\-trustcacerts\f[R]، به صورت اختیاری با گواهی‌های پیکربندی‌شده در فایل keystore به نام \f[CB]cacerts\f[R] اعتبارسنجی می‌شود. .PP روش‌های تشخیص اینکه آیا پاسخ گواهی معتمد است یا خیر به شرح زیر است: .IP \[bu] 2 اگر پاسخ یک گواهی تکی X.509 باشد، دستور \f[CB]keytool\f[R] تلاش می‌کند تا یک زنجیرهٔ اعتماد برقرار سازد که از پاسخ گواهی شروع شده و به یک گواهی خودامضاشده (متعلق به یک CA ریشه) ختم می‌شود. پاسخ گواهی و سلسله‌مراتب گواهی‌ها برای اصالت‌سنجی پاسخ گواهی از زنجیرهٔ گواهی جدید نام‌های مستعار (aliases) استفاده می‌شود. اگر زنجیرهٔ اعتماد برقرار نشود، پاسخ گواهی وارد نمی‌شود. در این حالت، دستور \f[CB]keytool\f[R] گواهی را چاپ نمی‌کند و از کاربر درخواست تأیید نمی‌نماید، زیرا تشخیص اصالت پاسخ گواهی برای کاربر بسیار دشوار است. .IP \[bu] 2 اگر پاسخ یک زنجیرهٔ گواهی با قالب PKCS #7 یا توالی‌ای از گواهی‌های X.509 باشد، زنجیره به این ترتیب مرتب می‌شود که گواهی کاربر در ابتدا و به دنبال آن صفر یا چند گواهی CA قرار می‌گیرد. اگر زنجیره با یک گواهی خودامضاشدهٔ CA ریشه پایان یابد و گزینهٔ \f[CB]\-trustcacerts\f[R] مشخص شده باشد، دستور \f[CB]keytool\f[R] تلاش می‌کند تا آن را با هر یک از گواهی‌های معتمد در keystore یا فایل keystore به نام \f[CB]cacerts\f[R] مطابقت دهد. اگر زنجیره به یک گواهی خودامضاشدهٔ CA ریشه ختم نشود و گزینهٔ \f[CB]\-trustcacerts\f[R] مشخص شده باشد، دستور \f[CB]keytool\f[R] سعی می‌کند تا نمونه‌ای از گواهی‌های معتمد را در keystore یا فایل keystore به نام \f[CB]cacerts\f[R] پیدا کرده و آن را به انتهای زنجیره اضافه کند. اگر گواهی پیدا نشود و گزینهٔ \f[CB]\-noprompt\f[R] مشخص نشده باشد، اطلاعات آخرین گواهی در زنجیره چاپ می‌شود و از کاربر خواسته می‌شود تا آن را تأیید کند. .PP اگر کلید عمومی موجود در پاسخ گواهی با کلید عمومی کاربر که از قبل با \f[CB]alias\f[R] ذخیره شده مطابقت داشته باشد، زنجیرهٔ گواهی قدیمی با زنجیرهٔ گواهی جدید موجود در پاسخ جایگزین می‌شود. زنجیرهٔ قدیمی تنها با یک \f[CB]keypass\f[R] معتبر قابل جایگزینی است، بنابراین گذرواژهٔ استفاده‌شده برای محافظت از کلید خصوصی ورودی ارائه می‌شود. اگر هیچ گذرواژه‌ای ارائه نشود و گذرواژهٔ کلید خصوصی با گذرواژهٔ keystore متفاوت باشد، از کاربر برای وارد کردن آن درخواست می‌شود. .PP این دستور در نسخه‌های پیشین \f[CB]\-import\f[R] نامیده می‌شد. این نام قدیمی هنوز در این نسخه پشتیبانی می‌شود. نام جدید، یعنی \f[CB]\-importcert\f[R]، ارجح است.