KEYTOOL(1) JDK Commands KEYTOOL(1)

keytool - ابزار مدیریت کلید و گواهی

keytool [commands]

دستورهای keytool شامل موارد زیر است:
•
-certreq: یک درخواست گواهی تولید می‌کند
•
-changealias: نام مستعار یک مدخل را تغییر می‌دهد
•
-delete: یک مدخل را حذف می‌کند
•
-exportcert: گواهی را صادر می‌کند
•
-genkeypair: یک جفت‌کلید تولید می‌کند
•
-genseckey: یک کلید محرمانه تولید می‌کند
•
-gencert: یک گواهی از روی درخواست گواهی تولید می‌کند
•
-importcert: یک گواهی یا زنجیره گواهی را وارد می‌کند
•
-importpass: یک گذرواژه را وارد می‌کند
•
-importkeystore: یک یا همه مدخل‌ها را از یک keystore دیگر وارد می‌کند
•
-keypasswd: گذرواژه کلید یک مدخل را تغییر می‌دهد
•
-list: مدخل‌های موجود در یک keystore را فهرست می‌کند
•
-printcert: محتوای یک گواهی را چاپ می‌کند
•
-printcertreq: محتوای یک درخواست گواهی را چاپ می‌کند
•
-printcrl: محتوای یک فایل فهرست ابطال گواهی (CRL) را چاپ می‌کند
•
-storepasswd: گذرواژه مخزن یک keystore را تغییر می‌دهد
•
-showinfo: اطلاعات مرتبط با امنیت را نمایش می‌دهد

برای مشاهده شرح این دستورها و گزینه‌های آن‌ها، بخش Commands and Options را ببینید.

دستور keytool یک ابزار مدیریت کلید و گواهی است. این ابزار به کاربران امکان می‌دهد جفت‌کلیدهای عمومی/خصوصی و گواهی‌های مرتبط خود را برای استفاده در خوداحرازهویتی (جایی که کاربر هویت خود را برای سایر کاربران و سرویس‌ها اثبات می‌کند) یا خدمات جامعیت داده و احراز هویت، با استفاده از امضاهای دیجیتال مدیریت کنند. دستور keytool همچنین به کاربران اجازه می‌دهد کلیدهای عمومی (در قالب گواهی‌ها) همتایان ارتباطی خود را ذخیره (cache) کنند.

گواهی یک بیانیه دارای امضای دیجیتال از سوی یک نهاد (شخص، شرکت و غیره) است که بیان می‌کند کلید عمومی (و برخی اطلاعات دیگر) نهادی دیگر دارای مقداری مشخص است. هنگامی که داده‌ها به‌صورت دیجیتال امضا می‌شوند، امضا می‌تواند برای بررسی جامعیت و اصالت داده‌ها راستی‌آزمایی شود. جامعیت بدان معناست که داده‌ها تغییر نیافته یا دستکاری نشده‌اند، و اصالت بدین معنی است که داده‌ها از سوی همان فردی آمده است که ادعای ایجاد و امضای آن را دارد.

دستور keytool همچنین به کاربران امکان می‌دهد کلیدهای محرمانه و عبارت‌های عبور استفاده‌شده در رمزنگاری و رمزگشایی متقارن (استاندارد رمزنگاری داده‌ها - Data Encryption Standard) را مدیریت کنند. این ابزار همچنین می‌تواند سایر اطلاعات مرتبط با امنیت را نمایش دهد.

دستور keytool کلیدها و گواهی‌ها را در یک keystore ذخیره می‌کند.

دستور keytool از ویژگی‌های امنیتی jdk.certpath.disabledAlgorithms و jdk.security.legacyAlgorithms برای تعیین این‌که کدام الگوریتم‌ها یک ریسک امنیتی در نظر گرفته می‌شوند استفاده می‌کند. این دستور در هنگام استفاده از الگوریتم‌های غیرفعال‌شده یا قدیمی (legacy) هشدارهایی صادر می‌کند. ویژگی‌های امنیتی jdk.certpath.disabledAlgorithms و jdk.security.legacyAlgorithms در فایل java.security (واقع در دایرکتوری $JAVA_HOME/conf/security مربوط به JDK) تعریف شده‌اند..SH "نکات دستورات و گزینه‌ها (COMMAND AND OPTION NOTES)"

نکات زیر در مورد توضیحات بخش دستورات و گزینه‌ها (Commands and Options) صدق می‌کنند:

•
نام تمام دستورات و گزینه‌ها با علامت خط پیوند (-) آغاز می‌شود.
•
تنها یک دستور می‌تواند مشخص شود.
•
گزینه‌های هر دستور را می‌توان به هر ترتیبی وارد کرد.
•
دو نوع گزینه وجود دارد؛ یکی تک‌مقداری که تنها باید یک بار مشخص شود. اگر یک گزینهٔ تک‌مقداری چند بار وارد شود، مقدار آخرین گزینه استفاده خواهد شد. نوع دیگر چندمقداری است که می‌تواند چندین بار مشخص شود و تمام مقادیر آن استفاده می‌شوند. تنها گزینهٔ چندمقداری که در حال حاضر پشتیبانی می‌شود گزینهٔ -ext است که برای تولید افزونه‌های گواهی X.509v3 استفاده می‌شود.
•
تمام مواردی که کج‌نویس (ایتالیک) نبوده یا در آکولاد ({ }) یا قلاب ([ ]) قرار ندارند، باید دقیقاً به همان صورت وارد شوند.
•
آکولاد دور یک گزینه نشان می‌دهد در صورتی که گزینه در خط فرمان مشخص نشود، یک مقدار پیش‌فرض استفاده خواهد شد. همچنین آکولاد دور گزینه‌های -v، -rfc و -J نیز قرار گرفته است که تنها هنگام حضور در خط فرمان معنا دارند. این گزینه‌ها هیچ مقدار پیش‌فرضی ندارند.
•
قلاب دور یک گزینه نشان می‌دهد در صورتی که گزینه در خط فرمان مشخص نشود، مقدار آن از کاربر پرسیده می‌شود. برای گزینهٔ -keypass، اگر گزینه را در خط فرمان مشخص نکنید، دستور keytool ابتدا سعی می‌کند از گذرواژهٔ keystore برای بازیابی کلید خصوصی/سری استفاده کند. اگر این تلاش ناموفق باشد، دستور keytool گذرواژهٔ کلید خصوصی/سری را از شما درخواست می‌کند.
•
موارد کج‌نویس (مقادیر گزینه‌ها) نشان‌دهندهٔ مقادیر واقعی هستند که باید وارد شوند. برای مثال، قالب دستور -printcert به صورت زیر است:

keytool -printcert {-file cert_file} {-v}

هنگامی که یک دستور -printcert را مشخص می‌کنید، cert_file را با نام واقعی فایل جایگزین کنید، به صورت زیر: keytool -printcert -file VScert.cer

•
اگر مقادیر گزینه‌ها شامل فاصله (space) باشند، باید داخل علامت نقل‌قول قرار گیرند.

دستورات keytool و گزینه‌های آن‌ها را می‌توان بر اساس وظایفی که انجام می‌دهند دسته‌بندی کرد.

دستورات مربوط به ایجاد یا افزودن داده به Keystore:

•
-gencert
•
-genkeypair
•
-genseckey
•
-importcert
•
-importpass

دستورات مربوط به وارد کردن محتوا از یک Keystore دیگر:

•
-importkeystore

دستورات مربوط به تولید درخواست گواهی:

•
-certreq

دستورات مربوط به برون‌بری داده‌ها:

•
-exportcert

دستورات مربوط به نمایش داده‌ها:

•
-list
•
-printcert
•
-printcertreq
•
-printcrl

دستورات مربوط به مدیریت Keystore:

•
-storepasswd
•
-keypasswd
•
-delete
•
-changealias

دستورات مربوط به نمایش اطلاعات امنیتی:

•
-showinfo.SH "دستورهای ایجاد یا افزودن داده به مخزن کلید (COMMANDS FOR CREATING OR ADDING DATA TO THE KEYSTORE)"
گزینه‌های موجود برای دستور -gencert عبارتند از:
•
{-rfc}: خروجی در قالب RFC (درخواست برای نظر)
•
{-infile infile}: نام فایل ورودی
•
{-outfile outfile}: نام فایل خروجی
•
{-alias alias}: نام مستعار مدخل مورد پردازش
•
{-sigalg sigalg}: نام الگوریتم امضا
•
{-dname dname}: نام متمایز (Distinguished name)
•
{-startdate startdate}: تاریخ و زمان آغاز اعتبار گواهی
•
{-ext ext}*: افزونه‌ی X.509
•
{-validity days}: تعداد روزهای اعتبار
•
[-keypass arg]: گذرواژه کلید
•
{-keystore keystore}: نام مخزن کلید (keystore)
•
[-storepass arg]: گذرواژه مخزن کلید
•
{-storetype type}: نوع مخزن کلید
•
{-providername name}: نام ارائه‌دهنده (Provider)
•
{-addprovider name [-providerarg arg]}: افزودن ارائه‌دهنده امنیتی بر پایه نام (مانند SunPKCS11) با یک آرگومان پیکربندی اختیاری. مقدار ارائه‌دهنده امنیتی، نام ارائه‌دهنده امنیتی‌ای است که در یک ماژول تعریف شده باشد.

برای نمونه،

keytool -addprovider SunPKCS11 -providerarg some.cfg ...

نکته:

به دلایل سازگاری، ارائه‌دهنده SunPKCS11 همچنان می‌تواند با -providerclass sun.security.pkcs11.SunPKCS11 بارگذاری شود حتی اگر اکنون درون یک ماژول تعریف شده باشد. این تنها ماژول موجود در JDK است که به پیکربندی نیاز دارد، و بنابراین بیشترین استفاده را با گزینه -providerclass دارد. برای ارائه‌دهندگان امنیتی موروثی واقع در classpath که از طریق reflection بارگذاری می‌شوند، همچنان باید از -providerclass استفاده شود.

•
{-providerclass class [-providerarg arg]}: افزودن ارائه‌دهنده امنیتی با نام کامل کلاس به همراه یک آرگومان پیکربندی اختیاری.

برای نمونه، اگر MyProvider یک ارائه‌دهنده قدیمی باشد که از طریق reflection بارگذاری می‌شود،

keytool -providerclass com.example.MyProvider ...

•
{-providerpath list}: مسیر کلاس (classpath) ارائه‌دهنده
•
{-v}: خروجی مشروح و پرگو
•
{-protected}: گذرواژه از طریق سازوکاری حفاظت‌شده ارائه می‌شود

از دستور -gencert برای تولید یک گواهی در پاسخ به یک فایل درخواست گواهی (که می‌تواند با دستور keytool -certreq ایجاد شود) استفاده کنید. این دستور درخواست را یا از infile و یا در صورت عدم ذکر، از ورودی استاندارد می‌خواند، آن را با استفاده از کلید خصوصی نام مستعار (alias) امضا می‌کند و گواهی X.509 را در outfile یا در صورت عدم ذکر در خروجی استاندارد قرار می‌دهد. هنگامی که -rfc مشخص شده باشد، قالب خروجی با کدگذاری Base64 در قالب PEM خواهد بود؛ در غیر این صورت، یک DER باینری ایجاد می‌شود.

مقدار -sigalg الگوریتمی را مشخص می‌کند که باید برای امضای گواهی استفاده شود. آرگومان startdate تاریخ و زمان آغاز معتبر بودن گواهی است. آرگومان days تعداد روزهایی را تعیین می‌کند که گواهی باید در طول آن‌ها معتبر در نظر گرفته شود.

هنگامی که dname ارائه شود، به عنوان موضوع (subject) گواهی تولیدشده استفاده می‌شود. در غیر این صورت، از موضوع موجود در درخواست گواهی استفاده خواهد شد.

مقدار -ext نشان می‌دهد چه افزونه‌های X.509ای در گواهی تعبیه خواهند شد. برای آگاهی از ساختار دستوری -ext، بخش Common Command Options را مطالعه کنید.

گزینه -gencert به شما امکان می‌دهد زنجیره‌های گواهی ایجاد کنید. مثال زیر گواهی‌ای با نام e1 ایجاد می‌کند که شامل سه گواهی در زنجیره گواهی خود است.

دستورهای زیر چهار جفت‌کلید با نام‌های ca، ca1، ca2 و e1 ایجاد می‌کنند:


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

دو دستور زیر یک زنجیره از گواهی‌های امضاشده ایجاد می‌کنند؛ ca گواهی ca1 را امضا می‌کند و ca1 گواهی ca2 را امضا می‌کند، که همگی خود-صادرشده (self-issued) هستند:


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

دستور زیر گواهی e1 را ایجاد کرده و آن را در فایل e1.cert ذخیره می‌کند که توسط ca2 امضا شده است. در نتیجه، e1 باید شامل ca، ca1 و ca2 در زنجیره گواهی خود باشد:

keytool -alias e1 -certreq | keytool -alias ca2 -gencert > e1.cert

گزینه‌های موجود برای دستور -genkeypair عبارتند از:
•
{-alias alias}: نام مستعار مدخل مورد پردازش
•
-keyalg alg: نام الگوریتم کلید
•
{-keysize size}: اندازه کلید بر حسب بیت
•
{-groupname name}: نام گروه. برای نمونه، نام یک منحنی بیضوی (Elliptic Curve).
•
{-sigalg alg}: نام الگوریتم امضا
•
{-signer alias}: نام مستعار امضاکننده
•
[-signerkeypass arg]: گذرواژه کلید امضاکننده
•
[-dname name]: نام متمایز (Distinguished name)
•
{-startdate date}: تاریخ و زمان آغاز اعتبار گواهی
•
{-ext value}*: افزونه‌ی X.509
•
{-validity days}: تعداد روزهای اعتبار
•
[-keypass arg]: گذرواژه کلید
•
{-keystore keystore}: نام مخزن کلید
•
[-storepass arg]: گذرواژه مخزن کلید.IP • 2 {-storetype type}: نوع مخزن کلید (keystore)
•
{-providername name}: نام تأمین‌کننده (provider)
•
{-addprovider name [-providerarg arg]}: افزودن تأمین‌کنندهٔ امنیتی بر پایهٔ نام (مانند SunPKCS11) همراه با یک آرگومان پیکربندی اختیاری.
•
{-providerclass class [-providerarg arg] }: افزودن تأمین‌کنندهٔ امنیتی با نام کامل کلاس (fully qualified class name) همراه با یک آرگومان پیکربندی اختیاری.
•
{-providerpath list}: مسیر کلاس (classpath) تأمین‌کننده
•
{-v}: خروجی پرگو (با جزئیات کامل)
•
{-protected}: ارائهٔ گذرواژه از طریق یک سازوکار حفاظت‌شده

از دستور -genkeypair برای تولید یک جفت‌کلید (یک کلید عمومی و کلید خصوصی مرتبط با آن) استفاده کنید. هنگامی که گزینهٔ -signer مشخص نشده باشد، کلید عمومی در یک گواهی خودامضای X.509 v3 قرار گرفته و به عنوان یک زنجیره گواهی تک‌عضوی ذخیره می‌شود. هنگامی که گزینهٔ -signer مشخص شده باشد، یک گواهی جدید تولید شده و توسط امضاکنندهٔ تعیین‌شده امضا می‌شود و به عنوان یک زنجیره گواهی چندعضوی ذخیره می‌گردد (شامل خود گواهی تولیدشده و زنجیره گواهیِ امضاکننده). زنجیره گواهی و کلید خصوصی در یک مدخل جدید مخزن کلید ذخیره می‌شوند که با نام مستعار آن شناسایی می‌شود.

مقدار -keyalg الگوریتم مورد استفاده برای تولید جفت‌کلید را مشخص می‌کند، و مقدار -keysize اندازهٔ هر کلید تولیدشده را تعیین می‌نماید. مقدار -sigalg الگوریتمی را مشخص می‌کند که باید برای امضای گواهی استفاده شود. این الگوریتم باید با مقدار -keyalg سازگار باشد.

مقدار -groupname گروه نام‌گذاری‌شدهٔ (برای نمونه، نام استاندارد یا از پیش تعریف‌شدهٔ یک منحنی بیضوی) کلیدی که باید تولید شود را مشخص می‌کند. تنها یکی از دو گزینهٔ -groupname و -keysize را می‌توان مشخص کرد.

مقدار -signer نام مستعار یک PrivateKeyEntry متعلق به امضاکننده‌ای را مشخص می‌کند که از قبل در مخزن کلید وجود دارد. این گزینه برای امضای گواهی با کلید خصوصی امضاکننده استفاده می‌شود. این مورد به ویژه برای الگوریتم‌های توافق کلید (یعنی زمانی که مقدار -keyalg برابر با XDH، X25519، X448، یا DH است) مفید است، زیرا این کلیدها نمی‌توانند برای امضاهای دیجیتال استفاده شوند و بنابراین امکان ایجاد یک گواهی خودامضا وجود ندارد.

مقدار -signerkeypass گذرواژهٔ کلید خصوصی امضاکننده را مشخص می‌کند. در صورتی که کلید خصوصی مدخلِ امضاکننده با گذرواژه‌ای متفاوت از گذرواژهٔ مخزن محافظت شده باشد، می‌توان آن را مشخص کرد.

مقدار -dname نام متمایز X.500 (Distinguished Name) را مشخص می‌کند که باید با مقدار -alias مرتبط شود. اگر گزینهٔ -signer مشخص نشده باشد، فیلدهای صادرکننده (issuer) و موضوع (subject) گواهی خودامضا با نام متمایز مشخص‌شده مقداردهی می‌شوند. اگر گزینهٔ -signer مشخص شده باشد، فیلد موضوع گواهی با نام متمایز مشخص‌شده و فیلد صادرکننده با فیلد موضوع گواهیِ امضاکننده مقداردهی می‌شوند. اگر نام متمایز در خط فرمان ارائه نشود، از کاربر خواسته می‌شود تا آن را وارد کند.

مقدار -keypass گذرواژه‌ای است که برای محافظت از کلید خصوصیِ جفت‌کلید تولیدشده استفاده می‌شود. اگر گذرواژه‌ای ارائه نشود، از کاربر خواسته می‌شود تا آن را وارد کند. اگر هنگام درخواست، کلید Return را فشار دهید، گذرواژهٔ کلید برابر با همان گذرواژهٔ مخزن کلید تنظیم می‌شود. مقدار -keypass باید حداقل شش نویسه داشته باشد.

مقدار -startdate زمان صدور گواهی را مشخص می‌کند که با عنوان مقدار «Not Before» در فیلد Validity (اعتبار) گواهی X.509 نیز شناخته می‌شود.

مقدار این گزینه می‌تواند در یکی از این دو قالب تنظیم شود:

([+-]nnn[ymdHMS])+

[yyyy/mm/dd] [HH:MM:SS]

در قالب نخست، زمان صدور به اندازهٔ مقدار مشخص‌شده نسبت به زمان کنونی جابه‌جا می‌شود. این مقدار، ترکیبی از دنباله‌ای از زیرمقدارها است. درون هر زیرمقدار، علامت بعلاوه (+) به معنای جابه‌جایی به جلو، و علامت منها (-) به معنای جابه‌جایی به عقب است. زمان جابه‌جایی شامل nnn واحد از سال، ماه، روز، ساعت، دقیقه یا ثانیه است (که به ترتیب با یک نویسه از y، m، d، H، M یا S نشان داده می‌شوند). مقدار دقیق زمان صدور با استفاده از متد java.util.GregorianCalendar.add(int field, int amount) روی هر زیرمقدار، از چپ به راست محاسبه می‌شود. برای نمونه، زمان صدور می‌تواند با کد زیر مشخص شود:


Calendar c = new GregorianCalendar();
c.add(Calendar.YEAR, -1);
c.add(Calendar.MONTH, 1);
c.add(Calendar.DATE, -1);
return c.getTime()

در قالب دوم، کاربر زمان دقیق صدور را در دو بخش مشخص می‌کند: سال/ماه/روز و ساعت:دقیقه:ثانیه (بر اساس منطقهٔ زمانی محلی). کاربر می‌تواند تنها یک بخش را ارائه دهد، که به این معناست که بخش دیگر با تاریخ (یا زمان) فعلی یکسان خواهد بود. کاربر باید دقیقاً همان تعداد ارقام نشان‌داده‌شده در تعریف قالب را وارد کند (در صورت کوتاه‌تر بودن، با 0 پر شود). هنگامی که هم تاریخ و هم زمان ارائه شوند، یک (و تنها یک) نویسهٔ فاصله میان دو بخش قرار می‌گیرد. ساعت همیشه باید در قالب ۲۴-ساعته وارد شود.

هنگامی که این گزینه ارائه نشود، تاریخ آغاز برابر با زمان کنونی خواهد بود. این گزینه را تنها یک بار می‌توان مشخص کرد.

مقدار date تعداد روزهایی را مشخص می‌کند (با شروع از تاریخی که توسط -startdate مشخص شده، یا تاریخ کنونی هنگامی که -startdate مشخص نشده است) که گواهی باید معتبر در نظر گرفته شود.

گزینه‌های موجود برای دستور -genseckey به شرح زیر است:
•
{-alias alias}: نام مستعار مدخل برای پردازش
•
[-keypass arg]: گذرواژهٔ کلید
•
-keyalg alg: نام الگوریتم کلید
•
{-keysize size}: اندازهٔ بیتیِ کلید
•
{-keystore keystore}: نام مخزن کلید
•
[-storepass arg]: گذرواژهٔ مخزن کلید
•
{-storetype type}: نوع مخزن کلید
•
{-providername name}: نام تأمین‌کننده
•
{-addprovider name [-providerarg arg]}: افزودن تأمین‌کنندهٔ امنیتی بر پایهٔ نام (مانند SunPKCS11) همراه با یک آرگومان پیکربندی اختیاری.
•
{-providerclass class [-providerarg arg]}: افزودن تأمین‌کنندهٔ امنیتی با نام کامل کلاس همراه با یک آرگومان پیکربندی اختیاری.
•
{-providerpath list}: مسیر کلاس تأمین‌کننده
•
{-v}: خروجی پرگو (با جزئیات کامل)
•
{-protected}: ارائهٔ گذرواژه از طریق یک سازوکار حفاظت‌شده

از دستور -genseckey برای تولید یک کلید مخفی (secret key) و ذخیرهٔ آن در یک مدخل جدید KeyStore.SecretKeyEntry با نام مستعار مشخص‌شده توسط alias استفاده کنید.

مقدار -keyalg الگوریتم مورد استفاده برای تولید کلید مخفی را مشخص می‌کند، و مقدار -keysize اندازهٔ کلید تولیدشده را تعیین می‌نماید. مقدار -keypass گذرواژه‌ای است که از کلید مخفی محافظت می‌کند. اگر گذرواژه‌ای ارائه نشود، از کاربر خواسته می‌شود آن را وارد کند. اگر هنگام درخواست، کلید Return را فشار دهید، گذرواژهٔ کلید برابر با همان گذرواژه‌ای که برای -keystore استفاده شده است تنظیم می‌شود. مقدار -keypass باید حداقل شامل شش نویسه باشد. -importcert گزینه‌های موجود برای دستور -importcert به شرح زیر است:

•
{-noprompt}: بدون درخواست تأیید از کاربر
•
{-trustcacerts}: اعتماد به گواهی‌های موجود در cacerts
•
{-protected}: گذرواژه از طریق سازوکار حفاظت‌شده ارائه می‌شود
•
{-alias alias}: نام مستعار (alias) مدخلی که باید پردازش شود
•
{-file file}: نام فایل ورودی
•
[-keypass arg]: گذرواژهٔ کلید
•
{-keystore keystore}: نام keystore
•
{-cacerts}: دسترسی به keystore از نوع cacerts
•
[-storepass arg]: گذرواژهٔ keystore
•
{-storetype type}: نوع keystore
•
{-providername name}: نام ارائه‌دهنده (provider)
•
{-addprovider name [-providerarg arg]}: افزودن ارائه‌دهندهٔ امنیتی با نام (مانند SunPKCS11) به همراه یک آرگومان پیکربندی اختیاری.
•
{-providerclass class [-providerarg arg]}: افزودن ارائه‌دهندهٔ امنیتی با نام کامل کلاس به همراه یک آرگومان پیکربندی اختیاری.
•
{-providerpath list}: مسیر کلاس (classpath) ارائه‌دهنده
•
{-v}: خروجی پرجزئیات

از دستور -importcert برای خواندن گواهی یا زنجیرهٔ گواهی (که دومی در یک پاسخ با قالب PKCS#7 یا به صورت دنباله‌ای از گواهی‌های X.509 ارائه می‌شود) از -file file و ذخیرهٔ آن در مدخل keystore که با -alias مشخص شده، استفاده کنید. اگر -file file مشخص نشده باشد، گواهی یا زنجیرهٔ گواهی از stdin خوانده می‌شود.

دستور keytool می‌تواند گواهی‌های X.509 نگارش‌های ۱، ۲ و ۳، و نیز زنجیره‌های گواهی در قالب PKCS#7 متشکل از این نوع گواهی‌ها را وارد کند. داده‌هایی که قرار است وارد شوند باید با قالب کدگذاری باینری یا در قالب کدگذاری قابل‌چاپ (که با نام کدگذاری Base64 نیز شناخته می‌شود) طبق استاندارد RFC 1421 اینترنت ارائه شوند. در حالت دوم، کدگذاری باید در ابتدا با رشته‌ای که با -----BEGIN آغاز می‌شود و در انتها با رشته‌ای که با -----END شروع می‌شود، محدود شده باشد.

وارد کردن یک گواهی به دو دلیل انجام می‌شود: افزودن آن به فهرست گواهی‌های مورد اعتماد، و وارد کردن یک پاسخ گواهی دریافت‌شده از مرجع صدور گواهی (CA) که در نتیجهٔ ارسال یک درخواست امضای گواهی (CSR) به آن CA صادر شده است. دستور -certreq را در Commands for Generating a Certificate Request ببینید.

نوع عمل وارد کردن بر اساس مقدار گزینهٔ -alias تعیین می‌شود. اگر alias به مدخل یک کلید اشاره نکند، دستور keytool فرض می‌کند که در حال افزودن یک مدخل گواهی معتمد هستید. در این حالت، نباید از قبل چنین نام مستعاری در keystore وجود داشته باشد. اگر این alias وجود داشته باشد، دستور keytool یک خطا خروجی می‌دهد زیرا گواهی معتمدی از قبل برای آن alias وجود دارد، و گواهی را وارد نمی‌کند. اگر -alias به مدخل یک کلید اشاره کند، دستور keytool فرض می‌کند که در حال وارد کردن یک پاسخ گواهی هستید.

گزینه‌های موجود برای دستور -importpass به شرح زیر است:
•
{-alias alias}: نام مستعار (alias) مدخلی که باید پردازش شود
•
[-keypass arg]: گذرواژهٔ کلید
•
{-keyalg alg}: نام الگوریتم کلید
•
{-keysize size}: اندازهٔ بیتی کلید
•
{-keystore keystore}: نام keystore
•
[-storepass arg]: گذرواژهٔ keystore
•
{-storetype type}: نوع keystore
•
{-providername name}: نام ارائه‌دهنده (provider)
•
{-addprovider name [-providerarg arg]}: افزودن ارائه‌دهندهٔ امنیتی با نام (مانند SunPKCS11) به همراه یک آرگومان پیکربندی اختیاری.
•
{-providerclass class [-providerarg arg]}: افزودن ارائه‌دهندهٔ امنیتی با نام کامل کلاس به همراه یک آرگومان پیکربندی اختیاری.
•
{-providerpath list}: مسیر کلاس (classpath) ارائه‌دهنده
•
{-v}: خروجی پرجزئیات
•
{-protected}: گذرواژه از طریق یک سازوکار حفاظت‌شده ارائه می‌شود

از دستور -importpass برای وارد کردن یک عبارت عبور (passphrase) و ذخیرهٔ آن در یک KeyStore.SecretKeyEntry جدید که با -alias مشخص شده، استفاده کنید. عبارت عبور می‌تواند از طریق جریان ورودی استاندارد ارائه شود؛ در غیر این صورت از کاربر خواسته می‌شود آن را وارد کند. گزینهٔ -keypass گذرواژه‌ای را برای محافظت از عبارت عبور واردشده فراهم می‌کند. اگر گذرواژه‌ای تعیین نشده باشد، از کاربر خواسته می‌شود آن را وارد کند. اگر در اعلان کلید Return را فشار دهید، گذرواژهٔ کلید برابر با همان گذرواژهٔ به‌کاررفته برای keystore تنظیم می‌شود. مقدار -keypass باید دست‌کم شامل شش نویسه باشد.

گزینه‌های موجود برای دستور -importkeystore به شرح زیر است:
•
-srckeystore keystore: نام keystore مبدأ
•
{-destkeystore keystore}: نام keystore مقصد
•
{-srcstoretype type}: نوع keystore مبدأ
•
{-deststoretype type}: نوع keystore مقصد
•
[-srcstorepass arg]: گذرواژه keystore مبدأ
•
[-deststorepass arg]: گذرواژه keystore مقصد
•
{-srcprotected}: keystore مبدأ محافظت‌شده با گذرواژه
•
{-destprotected}: keystore مقصد محافظت‌شده با گذرواژه
•
{-srcprovidername name}: نام ارائه‌دهنده keystore مبدأ
•
{-destprovidername name}: نام ارائه‌دهنده keystore مقصد
•
{-srcalias alias}: نام مستعار (alias) مبدأ
•
{-destalias alias}: نام مستعار (alias) مقصد
•
[-srckeypass arg]: گذرواژه کلید مبدأ
•
[-destkeypass arg]: گذرواژه کلید مقصد
•
{-noprompt}: عدم نمایش اعلان (prompt)
•
{-addprovider name [-providerarg arg]: افزودن ارائه‌دهنده امنیتی بر اساس نام (مانند SunPKCS11) به همراه یک آرگومان پیکربندی اختیاری.
•
{-providerclass class [-providerarg arg]}: افزودن ارائه‌دهنده امنیتی با نام کامل کلاس (fully qualified class name) به همراه یک آرگومان پیکربندی اختیاری
•
{-providerpath list}: مسیر کلاس (classpath) ارائه‌دهنده
•
{-v}: خروجی با جزئیات کامل (verbose)

نکته:

این خط اول تمامی گزینه‌ها است:

-srckeystore keystore -destkeystore keystore

از دستور -importkeystore برای وارد کردن یک مدخل مشخص یا تمامی مدخل‌ها از یک keystore مبدأ به یک keystore مقصد استفاده کنید.

نکته:

اگر هنگام استفاده از دستور keytool -importkeystore گزینه -destkeystore را تعیین نکنید، keystore پیش‌فرض مورد استفاده $HOME/.keystore خواهد بود.

هنگامی که گزینه -srcalias ارائه شود، دستور تک‌مدخل شناسایی‌شده با نام مستعار را به keystore مقصد وارد می‌کند. اگر نام مستعار مقصد با -destalias تعیین نشده باشد، از -srcalias به عنوان نام مستعار مقصد استفاده می‌شود. اگر مدخل مبدأ با گذرواژه محافظت شده باشد، از -srckeypass برای بازیابی آن مدخل استفاده می‌شود. اگر -srckeypass ارائه نشود، دستور keytool تلاش می‌کند تا از -srcstorepass برای بازیابی مدخل استفاده کند. اگر -srcstorepass ارائه نشده باشد یا نادرست باشد، برای دریافت گذرواژه به کاربر اعلان نشان داده می‌شود. مدخل مقصد با -destkeypass محافظت می‌شود. اگر -destkeypass تعیین نشود، مدخل مقصد با همان گذرواژه مدخل مبدأ محافظت خواهد شد. به عنوان مثال، اکثر ابزارهای شخص ثالث نیازمند این هستند که storepass و keypass در یک keystore از نوع PKCS #12 یکسان باشند. برای ایجاد یک keystore از نوع PKCS#12 برای این ابزارها، همواره گزینه -destkeypass را برابر با -deststorepass تعیین کنید.

اگر گزینه -srcalias مشخص نشود، تمامی مدخل‌های موجود در keystore مبدأ به keystore مقصد وارد می‌شوند. هر مدخل مقصد تحت همان نام مستعار مدخل مبدأ ذخیره می‌شود. اگر مدخل مبدأ با گذرواژه محافظت شده باشد، از -srcstorepass برای بازیابی مدخل استفاده می‌شود. اگر -srcstorepass ارائه نشود یا اشتباه باشد، برای دریافت گذرواژه به کاربر اعلان نشان داده می‌شود. اگر نوع یک مدخل در keystore مبدأ توسط keystore مقصد پشتیبانی نشود، یا اگر هنگام ذخیره یک مدخل در keystore مقصد خطایی رخ دهد، از کاربر خواسته می‌شود که یا از آن مدخل رد شده و ادامه دهد، یا خارج شود. مدخل مقصد با گذرواژه مدخل مبدأ محافظت می‌شود.

اگر نام مستعار مقصد از قبل در keystore مقصد موجود باشد، به کاربر اعلان داده می‌شود تا مشخص کند که روی مدخل قبلی بازنویسی انجام شود یا یک مدخل جدید با یک نام مستعار متفاوت ایجاد گردد.

اگر گزینه -noprompt داده شود، از کاربر برای نام مستعار جدید مقصد سؤالی پرسیده نخواهد شد. مدخل‌های موجود با همان نام مستعار مقصد رونویسی می‌شوند. مدخل‌هایی که قابلیت وارد شدن ندارند نادیده گرفته شده و یک هشدار نمایش داده می‌شود.

گزینه‌های موجود برای دستور -certreq به شرح زیر است:
•
{-alias alias}: نام مستعار مدخل مورد پردازش
•
{-sigalg alg}: نام الگوریتم امضا
•
{-file file}: نام فایل خروجی
•
[ -keypass arg]: گذرواژه کلید
•
{-keystore keystore}: نام keystore
•
{-dname name}: نام متمایز (Distinguished name)
•
{-ext value}: افزونه X.509
•
[-storepass arg]: گذرواژه keystore
•
{-storetype type}: نوع keystore
•
{-providername name}: نام ارائه‌دهنده (provider)
•
{-addprovider name [-providerarg arg]}: افزودن ارائه‌دهنده امنیتی بر اساس نام (مانند SunPKCS11) با یک آرگومان اختیاری پیکربندی.
•
{-providerclass class [-providerarg arg]}: افزودن ارائه‌دهنده امنیتی بر اساس نام کامل کلاس با یک آرگومان اختیاری پیکربندی.
•
{-providerpath list}: مسیر کلاس ارائه‌دهنده (classpath)
•
{-v}: خروجی با جزئیات (verbose)
•
{-protected}: گذرواژه از طریق سازوکار حفاظت‌شده ارائه شود

از دستور -certreq برای تولید یک درخواست امضای گواهی (CSR) با استفاده از قالب PKCS #10 استفاده کنید.

یک CSR برای ارسال به یک مرجع صدور گواهی (CA) در نظر گرفته شده است. مرجع CA هویت درخواست‌کننده گواهی را (معمولاً به‌صورت آفلاین) تأیید اعتبار کرده و یک گواهی یا زنجیره گواهی بازمی‌گرداند تا جایگزین زنجیره گواهی فعلی (که در ابتدا یک گواهی خودامضا است) در keystore شود.

کلید خصوصی مرتبط با alias برای ایجاد درخواست گواهی PKCS #10 استفاده می‌شود. برای دسترسی به کلید خصوصی، باید گذرواژه صحیح ارائه شود. اگر -keypass در خط فرمان مشخص نشده باشد و با گذرواژه‌ای که برای حفاظت از یکپارچگی keystore استفاده می‌شود متفاوت باشد، از کاربر خواسته می‌شود آن را وارد کند. اگر -dname ارائه شود، به عنوان موضوع (subject) در CSR استفاده می‌شود. در غیر این صورت، نام متمایز X.500 مرتبط با نام مستعار به کار گرفته می‌شود.

مقدار -sigalg الگوریتمی را که باید برای امضای CSR به کار رود مشخص می‌کند.

درخواست CSR در فایل -file file ذخیره می‌شود. اگر فایلی مشخص نشود، CSR به -stdout فرستاده می‌شود.

از دستور -importcert برای درون‌ریزی پاسخ دریافتی از CA استفاده کنید.

گزینه‌های موجود برای دستور -exportcert به شرح زیر است:
•
{-rfc}: خروجی به سبک RFC
•
{-alias alias}: نام مستعار مدخل مورد پردازش
•
{-file file}: نام فایل خروجی
•
{-keystore keystore}: نام keystore
•
{-cacerts}: دسترسی به keystore گواهی‌های cacerts
•
[-storepass arg]: گذرواژه keystore
•
{-storetype type}: نوع keystore
•
{-providername name}: نام ارائه‌دهنده (provider)
•
{-addprovider name [-providerarg arg]}: افزودن ارائه‌دهنده امنیتی بر اساس نام (مانند SunPKCS11) با یک آرگومان اختیاری پیکربندی.
•
{-providerclass class [-providerarg arg] }: افزودن ارائه‌دهنده امنیتی بر اساس نام کامل کلاس با یک آرگومان اختیاری پیکربندی.
•
{-providerpath list}: مسیر کلاس ارائه‌دهنده (classpath)
•
{-v}: خروجی با جزئیات (verbose)
•
{-protected}: گذرواژه از طریق سازوکار حفاظت‌شده ارائه شود

از دستور -exportcert برای خواندن گواهی مرتبط با -alias alias از keystore و ذخیره آن در -file file استفاده کنید. هنگامی که فایلی مشخص نشود، گواهی به stdout فرستاده می‌شود.

به‌طور پیش‌فرض، گواهی در کدگذاری باینری خارج می‌شود. اگر گزینه -rfc مشخص شود، خروجی در قالب کدگذاری چاپی تعریف‌شده توسط استاندارد کدگذاری گواهی اینترنتی RFC 1421 خواهد بود.

اگر -alias به یک گواهی مورد اعتماد اشاره کند، همان گواهی در خروجی قرار می‌گیرد. در غیر این صورت، -alias به یک مدخل کلید با یک زنجیره گواهی مرتبط اشاره دارد. در آن حالت، اولین گواهی در زنجیره بازگردانده می‌شود. این گواهی کلید عمومی نهادی را که توسط -alias مشخص شده، تأیید اعتبار می‌کند.

گزینه‌های دردسترس برای دستور -list عبارتند از:
•
{-rfc}: خروجی در سبک RFC
•
{-alias alias}: نام مستعار مدخل برای پردازش
•
{-keystore keystore}: نام مخزن کلید (keystore)
•
{-cacerts}: دسترسی به مخزن کلید cacerts
•
[-storepass arg]: گذرواژه مخزن کلید
•
{-storetype type}: نوع مخزن کلید
•
{-providername name}: نام ارائه‌دهنده (provider)
•
{-addprovider name [-providerarg arg]}: افزودن ارائه‌دهنده امنیت با نام (مانند SunPKCS11) به همراه یک آرگومان پیکربندی اختیاری.
•
{-providerclass class [-providerarg arg] }: افزودن ارائه‌دهنده امنیت با نام کامل کلاس (fully qualified class name) به همراه یک آرگومان پیکربندی اختیاری.
•
{-providerpath list}: مسیر کلاس (classpath) ارائه‌دهنده
•
{-v}: خروجی پرگو (verbose)
•
{-protected}: گذرواژه از طریق سازوکار حفاظت‌شده ارائه می‌شود

از دستور -list برای چاپ محتویات مدخل مخزن کلید مشخص‌شده توسط -alias در stdout استفاده کنید. اگر -alias alias مشخص نشده باشد، محتویات کل مخزن کلید چاپ می‌شود.

به‌طور پیش‌فرض، این دستور اثر انگشت SHA-256 یک گواهی را چاپ می‌کند. اگر گزینه -v مشخص شده باشد، گواهی در قالبی خوانا برای انسان، همراه با اطلاعات تکمیلی نظیر مالک، صادرکننده، شماره سریال و هرگونه افزونه چاپ می‌شود. اگر گزینه -rfc مشخص شده باشد، محتویات گواهی با استفاده از قالب کدگذاری قابل‌چاپ، مطابق با استاندارد کدگذاری گواهی Internet RFC 1421 چاپ خواهد شد.

نکته:

نمی‌توانید هم‌زمان هر دو گزینه -v و -rfc را در یک دستور مشخص کنید. در غیر این صورت، خطا گزارش می‌شود.

گزینه‌های دردسترس برای دستور -printcert عبارتند از:
•
{-rfc}: خروجی در سبک RFC
•
{-file cert_file}: نام فایل ورودی
•
{-sslserver server[:port]}:: میزبان و پورت سرور لایه سوکت‌های امن (SSL)
•
{-jarfile JAR_file}: فایل امضاشده .jar
•
{-keystore keystore}: نام مخزن کلید
•
{-trustcacerts}: اعتماد به گواهی‌های موجود در cacerts
•
[-storepass arg]: گذرواژه مخزن کلید
•
{-storetype type}: نوع مخزن کلید
•
{-providername name}: نام ارائه‌دهنده
•
{-addprovider name [-providerarg arg]}: افزودن ارائه‌دهنده امنیت با نام (مانند SunPKCS11) به همراه یک آرگومان پیکربندی اختیاری.
•
{-providerclass class [-providerarg arg]}: افزودن ارائه‌دهنده امنیت با نام کامل کلاس به همراه یک آرگومان پیکربندی اختیاری.
•
{-providerpath list}: مسیر کلاس ارائه‌دهنده
•
{-protected}: گذرواژه از طریق سازوکار حفاظت‌شده ارائه می‌شود
•
{-v}: خروجی پرگو

از دستور -printcert برای خواندن و چاپ گواهی از -file cert_file، سرور SSL واقع در -sslserver server[:port]، یا فایل JAR امضاشده مشخص‌شده توسط -jarfile JAR_file استفاده کنید. این دستور محتویات را در قالبی خوانا برای انسان چاپ می‌کند. در صورتی که پورتی مشخص نشود، پورت استاندارد HTTPS یعنی 443 در نظر گرفته می‌شود.

نکته:

گزینه‌های -sslserver و -file نمی‌توانند هم‌زمان در یک دستور ارائه شوند. در غیر این صورت، خطا گزارش می‌شود. اگر هیچ‌یک از این گزینه‌ها را مشخص نکنید، گواهی از stdin خوانده می‌شود.

هنگامی که -rfc مشخص شود، دستور keytool گواهی را در حالت PEM، همان‌گونه که توسط استاندارد کدگذاری گواهی Internet RFC 1421 تعریف شده است، چاپ می‌کند.

اگر گواهی از یک فایل یا stdin خوانده شود، ممکن است به‌صورت کدگذاری دودویی یا در قالب کدگذاری قابل‌چاپ طبق استاندارد کدگذاری گواهی RFC 1421 باشد.

اگر سرور SSL در پشت یک دیوار آتش (فایروال) قرار داشته باشد، می‌توان گزینه‌های -J-Dhttps.proxyHost=proxyhost و -J-Dhttps.proxyPort=proxyport را در خط فرمان برای ایجاد تونل پروکسی مشخص کرد.

نکته:

این دستور می‌تواند مستقل از مخزن کلید مورد استفاده قرار گیرد. این دستور ضعف در الگوریتم امضای یک گواهی را بررسی نمی‌کند اگر آن گواهی، یک گواهی معتمد در مخزن کلید کاربر (مشخص‌شده با -keystore) یا در مخزن کلید cacerts (در صورت مشخص شدن -trustcacerts) باشد.

گزینه‌های دردسترس برای دستور -printcertreq عبارتند از:
•
{-file file}: نام فایل ورودی
•
{-v}: خروجی پرگو

از دستور -printcertreq برای چاپ محتویات درخواست گواهی در قالب PKCS #10 استفاده کنید که می‌تواند توسط دستور keytool -certreq ایجاد شود. این دستور درخواست را از فایل می‌خواند. اگر فایلی وجود نداشته باشد، درخواست از ورودی استاندارد خوانده می‌شود.

گزینه‌های دردسترس برای دستور -printcrl عبارتند از:
•
{-file crl}: نام فایل ورودی
•
{-keystore keystore}: نام مخزن کلید
•
{-trustcacerts}: اعتماد به گواهی‌های موجود در cacerts
•
[-storepass arg]: گذرواژه مخزن کلید
•
{-storetype type}: نوع مخزن کلید
•
{-providername name}: نام ارائه‌دهنده
•
{-addprovider name [-providerarg arg]}: افزودن ارائه‌دهنده امنیت با نام (مانند SunPKCS11) به همراه یک آرگومان پیکربندی اختیاری.
•
{-providerclass class [-providerarg arg]}: افزودن ارائه‌دهنده امنیت با نام کامل کلاس به همراه یک آرگومان پیکربندی اختیاری.
•
{-providerpath list}: مسیر کلاس ارائه‌دهنده
•
{-protected}: گذرواژه از طریق سازوکار حفاظت‌شده ارائه می‌شود
•
{-v}: خروجی پرگو

از دستور -printcrl برای خواندن فهرست ابطال گواهی (CRL) از -file crl استفاده کنید. یک CRL فهرستی از گواهی‌های دیجیتالی است که توسط مرجع صدور گواهی (CA) که آن‌ها را صادر کرده، باطل شده‌اند. مرجع CA فایل crl را ایجاد می‌کند..PP نکته:

این دستور می‌تواند مستقل از یک مخزن کلید استفاده شود. این دستور تلاش می‌کند تا CRL را با استفاده از یک گواهی از مخزن کلید کاربر (مشخص‌شده با -keystore) یا مخزن کلید cacerts (در صورت مشخص بودن -trustcacerts) اعتبارسنجی کند، و در صورتی که نتواند آن را اعتبارسنجی کند، یک هشدار چاپ خواهد کرد.

گزینه‌های در دسترس برای دستور -storepasswd عبارتند از:
•
[-new arg]: گذرواژه جدید
•
{-keystore keystore}: نام مخزن کلید
•
{-cacerts}: دسترسی به مخزن کلید cacerts
•
[-storepass arg]: گذرواژه مخزن کلید
•
{-storetype type}: نوع مخزن کلید
•
{-providername name}: نام ارائه‌دهنده
•
{-addprovider name [-providerarg arg]}: افزودن ارائه‌دهنده امنیتی بر اساس نام (مانند SunPKCS11) به همراه یک آرگومان پیکربندی اختیاری.
•
{-providerclass class [-providerarg arg]}: افزودن ارائه‌دهنده امنیتی بر اساس نام کامل کلاس به همراه یک آرگومان پیکربندی اختیاری.
•
{-providerpath list}: مسیر کلاس (classpath) ارائه‌دهنده
•
{-v}: خروجی پرگو (با جزئیات کامل)

از دستور -storepasswd برای تغییر گذرواژه‌ای که جهت محافظت از یکپارچگی محتویات مخزن کلید استفاده می‌شود، بهره ببرید. گذرواژه جدید توسط -new arg تنظیم می‌شود و باید دست‌کم شامل شش نویسه باشد.

گزینه‌های در دسترس برای دستور -keypasswd عبارتند از:
•
{-alias alias}: نام مستعار (alias) مدخل مورد پردازش
•
[-keypass old_keypass]: گذرواژه کلید
•
[-new new_keypass]: گذرواژه جدید
•
{-keystore keystore}: نام مخزن کلید
•
{-storepass arg}: گذرواژه مخزن کلید
•
{-storetype type}: نوع مخزن کلید
•
{-providername name}: نام ارائه‌دهنده
•
{-addprovider name [-providerarg arg]}: افزودن ارائه‌دهنده امنیتی بر اساس نام (مانند SunPKCS11) به همراه یک آرگومان پیکربندی اختیاری.
•
{-providerclass class [-providerarg arg]}: افزودن ارائه‌دهنده امنیتی بر اساس نام کامل کلاس به همراه یک آرگومان پیکربندی اختیاری.
•
{-providerpath list}: مسیر کلاس (classpath) ارائه‌دهنده
•
{-v}: خروجی پرگو (با جزئیات کامل)

از دستور -keypasswd برای تغییر گذرواژه‌ای که کلیدهای خصوصی/محرمانه مشخص‌شده توسط -alias تحت حفاظت آن هستند، از -keypass old_keypass به -new new_keypass استفاده کنید. مقدار گذرواژه باید دست‌کم شامل شش نویسه باشد.

اگر گزینه -keypass در خط فرمان مشخص نشود و گذرواژه -keypass با گذرواژه مخزن کلید (-storepass arg) متفاوت باشد، از کاربر خواسته می‌شود تا آن را وارد کند.

اگر گزینه -new در خط فرمان مشخص نشود، از کاربر خواسته می‌شود تا آن را وارد کند.

گزینه‌های در دسترس برای دستور -delete عبارتند از:
•
[-alias alias]: نام مستعار (alias) مدخل مورد پردازش
•
{-keystore keystore}: نام مخزن کلید
•
{-cacerts}: دسترسی به مخزن کلید cacerts
•
[-storepass arg]: گذرواژه مخزن کلید
•
{-storetype type}: نوع مخزن کلید
•
{-providername name}: نام ارائه‌دهنده
•
{-addprovider name [-providerarg arg]}: افزودن ارائه‌دهنده امنیتی بر اساس نام (مانند SunPKCS11) به همراه یک آرگومان پیکربندی اختیاری.
•
{-providerclass class [-providerarg arg]}: افزودن ارائه‌دهنده امنیتی بر اساس نام کامل کلاس به همراه یک آرگومان پیکربندی اختیاری.
•
{-providerpath list}: مسیر کلاس (classpath) ارائه‌دهنده
•
{-v}: خروجی پرگو (با جزئیات کامل)
•
{-protected}: گذرواژه از طریق یک سازوکار حفاظت‌شده ارائه شده است

از دستور -delete برای حذف مدخل -alias alias از مخزن کلید استفاده کنید. در صورت عدم ارائه در خط فرمان، alias از کاربر پرسیده خواهد شد.

گزینه‌های در دسترس برای دستور -changealias عبارتند از:
•
{-alias alias}: نام مستعار (alias) مدخل مورد پردازش
•
[-destalias alias]: نام مستعار مقصد
•
[-keypass arg]: گذرواژه کلید
•
{-keystore keystore}: نام مخزن کلید
•
{-cacerts}: دسترسی به مخزن کلید cacerts
•
[-storepass arg]: گذرواژه مخزن کلید
•
{-storetype type}: نوع مخزن کلید
•
{-providername name}: نام ارائه‌دهنده
•
{-addprovider name [-providerarg arg]}: افزودن ارائه‌دهنده امنیتی بر اساس نام (مانند SunPKCS11) به همراه یک آرگومان پیکربندی اختیاری.
•
{-providerclass class [-providerarg arg]}: افزودن ارائه‌دهنده امنیتی بر اساس نام کامل کلاس به همراه یک آرگومان پیکربندی اختیاری.
•
{-providerpath list}: مسیر کلاس (classpath) ارائه‌دهنده
•
{-v}: خروجی پرگو (با جزئیات کامل)
•
{-protected}: گذرواژه از طریق یک سازوکار حفاظت‌شده ارائه شده است

از دستور -changealias برای انتقال یک مدخل موجود در مخزن کلید از -alias alias به یک -destalias alias جدید استفاده کنید. اگر نام مستعار مقصد مشخص نشده باشد، دستور از شما می‌خواهد که یکی را وارد کنید. اگر مدخل اصلی با یک گذرواژه مدخل محافظت شده باشد، این گذرواژه می‌تواند با گزینه -keypass ارائه شود. اگر گذرواژه کلید ارائه نشده باشد، ابتدا -storepass (در صورت ارائه) آزمایش می‌شود. اگر این تلاش با شکست مواجه شود، از کاربر خواسته می‌شود تا گذرواژه را وارد کند.

گزینه‌های موجود برای دستور -showinfo به شرح زیر است:
•
{-tls}: نمایش اطلاعات پیکربندی TLS
•
{-v}: خروجی با جزئیات بیشتر (پُرگو)

از دستور -showinfo برای نمایش اطلاعات گوناگون مرتبط با امنیت استفاده کنید. گزینهٔ -tls پیکربندی‌های TLS، مانند فهرست پروتکل‌ها و مجموعه‌های رمز (cipher suites) فعال را نمایش می‌دهد.

می‌توانید از --help برای نمایش فهرستی از دستورهای keytool یا نمایش اطلاعات راهنما دربارهٔ یک دستور خاص keytool استفاده کنید.

•
برای نمایش فهرستی از دستورهای keytool، وارد کنید:

keytool --help

•
برای نمایش اطلاعات راهنما دربارهٔ یک دستور خاص keytool، وارد کنید:

keytool -<command> --help

گزینهٔ -v می‌تواند برای تمام دستورها به‌جز --help به کار رود. هنگامی که گزینهٔ -v مشخص شود، نشان‌دهندهٔ حالت پرگو (verbose) است، بدین معنا که اطلاعات بیشتری در خروجی ارائه می‌شود.

آرگومان -Joption می‌تواند برای هر دستوری مشخص شود. هنگامی که -Joption استفاده می‌شود، رشتهٔ option مشخص‌شده مستقیماً به مفسر Java فرستاده می‌شود. این گزینه نباید شامل هیچ فاصله‌ای باشد. این قابلیت برای تنظیم محیط اجرا یا میزان مصرف حافظه مفید است. برای مشاهدهٔ فهرستی از گزینه‌های ممکن مفسر، دستور java -h یا java -X را در خط فرمان وارد کنید.

این گزینه‌ها می‌توانند برای تمام دستورهایی که روی یک keystore عمل می‌کنند مشخص شوند:

این مشخص‌کننده، نوع keystore را برای نمونه‌سازی تعیین می‌کند.
مکان keystore.

اگر از storetype با مقدار JKS استفاده شود و فایل keystore هنوز وجود نداشته باشد، اجرای برخی دستورهای خاص keytool می‌تواند منجر به ایجاد یک فایل keystore جدید شود. برای مثال، اگر keytool -genkeypair فراخوانی شود و گزینهٔ -keystore مشخص نشده باشد، فایل پیش‌فرض keystore با نام .keystore در صورت عدم وجود، در دایرکتوری خانگی کاربر ایجاد می‌شود. به طور مشابه، اگر گزینهٔ -keystore ks_file مشخص شود اما ks_file وجود نداشته باشد، آن فایل ایجاد خواهد شد. برای کسب اطلاعات بیشتر دربارهٔ storetype با مقدار JKS، بخش KeyStore Implementation را در KeyStore aliases ببینید.

توجه داشته باشید که جریان ورودی از گزینهٔ -keystore به متد KeyStore.load ارسال می‌شود. اگر مقدار NONE به عنوان URL مشخص شود، یک جریان null به متد KeyStore.load فرستاده خواهد شد. اگر keystore مبتنی بر فایل نباشد، باید مقدار NONE مشخص شود؛ برای مثال، هنگامی که keystore روی یک دستگاه توکن سخت‌افزاری قرار دارد.

روی keystore متعلق به cacerts عمل می‌کند. این گزینه معادل -keystore path_to_cacerts -storetype type_of_cacerts است. در صورت استفاده از گزینهٔ -keystore یا -storetype همراه با گزینهٔ -cacerts، خطا گزارش می‌شود.
گذرواژه‌ای که برای محافظت از یکپارچگی keystore استفاده می‌شود.

اگر اصلاح‌کنندهٔ env یا file مشخص نشده باشد، گذرواژه مقدار argument را خواهد داشت که باید حداقل شامل شش نویسه باشد. در غیر این صورت، گذرواژه به شرح زیر بازیابی می‌شود:

•
env: بازیابی گذرواژه از متغیر محیطی با نام argument.
•
file: بازیابی گذرواژه از فایل با نام argument.

نکته: تمامی گزینه‌های دیگری که نیازمند گذرواژه هستند، مانند -keypass، -srckeypass، -destkeypass، -srcstorepass و -deststorepass، اصلاح‌کننده‌های env و file را می‌پذیرند. به یاد داشته باشید که گزینهٔ گذرواژه و اصلاح‌کننده را با یک دونقطه (:) جدا کنید.

گذرواژه باید برای تمام دستورهایی که به محتویات keystore دسترسی دارند ارائه شود. برای چنین دستورهایی، هنگامی که گزینهٔ -storepass در خط فرمان مشخص نشده باشد، از کاربر درخواست می‌شود تا آن را وارد کند.

هنگام بازیابی اطلاعات از keystore، گذرواژه اختیاری است. اگر گذرواژه‌ای مشخص نشود، یکپارچگی اطلاعات بازیابی‌شده قابل تأیید نخواهد بود و یک هشدار نمایش داده می‌شود.

برای شناسایی نام یک ارائه‌دهندهٔ خدمات رمزنگاری در صورتی که در فایل ویژگی‌های امنیتی فهرست شده باشد به کار می‌رود.
برای افزودن یک ارائه‌دهندهٔ امنیتی با نام (مانند SunPKCS11) به کار می‌رود.
برای تعیین نام فایل کلاس اصلی ارائه‌دهندهٔ خدمات رمزنگاری در صورتی که ارائه‌دهنده در فایل ویژگی‌های امنیتی فهرست نشده باشد به کار می‌رود.
برای تعیین مسیر کلاس (classpath) ارائه‌دهنده به کار می‌رود.
همراه با گزینهٔ -addprovider یا -providerclass برای نشان دادن یک آرگومان رشته‌ای ورودی اختیاری برای سازندهٔ نام class به کار می‌رود.
هنگامی که گذرواژه باید از طریق یک مسیر احراز هویت محافظت‌شده (مانند یک پین‌خوان اختصاصی) مشخص شود، این مقدار را برابر با true تعیین کنید. از آنجا که در دستور -importkeystore دو keystore دخیل هستند، دو گزینهٔ زیر، یعنی -srcprotected و -destprotected، به ترتیب برای keystore مبدأ و مقصد در نظر گرفته شده‌اند.
بیانگر یک افزونهٔ گواهی (certificate extension) استاندارد X.509 است. این گزینه می‌تواند در -genkeypair و -gencert برای تعبیهٔ افزونه‌ها درون گواهی تولیدشده، یا در -certreq برای مشخص کردن افزونه‌های درخواستی در تقاضای گواهی استفاده شود. این گزینه می‌تواند چندین بار تکرار شود. آرگومان name می‌تواند نام یک افزونهٔ پشتیبانی‌شده (بخش Supported Named Extensions را ببینید) یا یک شمارهٔ OID دلخواه باشد. آرگومان value در صورت ارائه، آرگومان مربوط به افزونه را تعیین می‌کند. هنگامی که value درج نشود، مقدار پیش‌فرض افزونه لحاظ می‌شود یا افزونه به خودی خود نیازی به آرگومان ندارد. اصلاح‌کنندهٔ :critical در صورت ارائه، بدین معناست که مقدار ویژگی isCritical افزونه برابر با true خواهد بود؛ در غیر این صورت، برابر با false است. می‌توانید به جای :critical از :c استفاده کنید.
-conf file یک فایل گزینه‌های از پیش پیکربندی‌شده را مشخص می‌کند.

یک فایل گزینه‌های از پیش پیکربندی‌شده، یک فایل properties جاوا است که می‌تواند با گزینهٔ -conf مشخص شود. هر ویژگی (property) با استفاده از «keytool.command_name» به‌عنوان نام ویژگی، گزینه(ها)ی پیش‌فرض را برای یک دستور keytool مشخص می‌کند. ویژگی ویژه‌ای با نام «keytool.all» نشان‌دهندهٔ گزینه(ها)ی پیش‌فرضی است که بر روی تمام دستورها اعمال می‌شود. مقدار یک ویژگی می‌تواند شامل ${prop} باشد که به ویژگی سیستمی (system property) مرتبط با آن بسط می‌یابد. اگر مقدار یک گزینه در درون خود دارای فاصله باشد، باید در میان علامت‌های نقل‌قول (" یا ') قرار گیرد. تمام نام‌های ویژگی‌ها باید با حروف کوچک باشند.

هنگامی که keytool با یک فایل گزینه‌های از پیش پیکربندی‌شده اجرا می‌شود، ابتدا مقدار «keytool.all» (در صورت وجود) به ابتدای خط فرمان keytool افزوده می‌شود، سپس مقدار مربوط به نام دستور (در صورت وجود) می‌آید، و در پایان گزینه‌های موجود در خط فرمان اعمال می‌گردند. برای یک گزینهٔ تک‌مقداری، این رفتار اجازه می‌دهد تا ویژگی یک دستور خاص مقدار «keytool.all» را بازنویسی (override) کند، و مقدار مشخص‌شده در خط فرمان نیز هر دوی آن‌ها را بازنویسی نماید. برای گزینه‌های چندمقداری، تمام آن‌ها توسط keytool استفاده خواهند شد.

برای مثال، فایل فرضی زیر به نام preconfig را در نظر بگیرید:


    # A tiny pre-configured options file
    keytool.all = -keystore ${user.home}/ks
    keytool.list = -v
    keytool.genkeypair = -keyalg rsa

دستور keytool -conf preconfig -list یکسان است با:

keytool -keystore ~/ks -v -list

دستور keytool -conf preconfig -genkeypair -alias me یکسان است با:

keytool -keystore ~/ks -keyalg rsa -genkeypair -alias me

دستور keytool -conf preconfig -genkeypair -alias you -keyalg ec یکسان است با:

keytool -keystore ~/ks -keyalg rsa -genkeypair -alias you -keyalg ec

که معادل است با:

keytool -keystore ~/ks -genkeypair -alias you -keyalg ec

زیرا -keyalg یک گزینهٔ تک‌مقداری است و مقدار ec مشخص‌شده در خط فرمان، فایل گزینه‌های از پیش پیکربندی‌شده را بازنویسی می‌کند.

مثال‌های زیر مقادیر پیش‌فرض را برای گزینه‌های گوناگون نشان می‌دهند:


-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 <the file named .keystore in the user's home directory>
-destkeystore <the file named .keystore in the user's home directory>
-storetype <the value of the "keystore.type" property in the
    security properties file, which is returned by the static
    getDefaultType method in java.security.KeyStore>
-file
    stdin (if reading)
    stdout (if writing)
-protected false

هنگام تولید یک گواهی یا درخواست گواهی، الگوریتم امضای پیش‌فرض (گزینهٔ -sigalg) برای فراهم‌کردن سطح مناسبی از استحکام امنیتی، به‌صورت زیر از الگوریتم کلید خصوصیِ زیربنایی مشتق می‌شود:

keyalg keysize default sigalg
DSA any size SHA256withDSA
RSA <= 3072 SHA256withRSA
<= 7680 SHA384withRSA
> 7680 SHA512withRSA
EC < 384 SHA256withECDSA
< 512 SHA384withECDSA
= 512 SHA512withECDSA
RSASSA-PSS <= 3072 RSASSA-PSS (with SHA-256)
<= 7680 RSASSA-PSS (with SHA-384)
> 7680 RSASSA-PSS (with SHA-512)
EdDSA 255 Ed25519
448 Ed448
Ed25519 255 Ed25519
Ed448 448 Ed448
• 2
یک الگوریتم امضای RSASSA-PSS از یک الگوریتم MessageDigest
به عنوان الگوریتم‌های درهم‌ساز (hash) و MGF1 خود استفاده می‌کند.
• 2
الگوریتم EdDSA از ۲ اندازهٔ کلید پشتیبانی می‌کند: Ed25519 و Ed448.
هنگام تولید یک جفت‌کلید EdDSA با استفاده از -keyalg EdDSA، کاربر
می‌تواند -keysize 255 یا -keysize 448 را برای
تولید جفت‌کلیدهای Ed25519 یا Ed448 تعیین کند.
هنگامی که هیچ -keysize تعیین نشده باشد، یک جفت‌کلید Ed25519
تولید می‌شود.
کاربر همچنین می‌تواند مستقیماً -keyalg Ed25519 یا
-keyalg Ed448 را برای تولید یک جفت‌کلید با اندازهٔ کلید
مورد نظر مشخص کند.
نکته:
برای بهبود امنیت اولیه و پیش‌فرض، اندازهٔ کلید و نام الگوریتم‌های امضای
پیش‌فرض به‌طور دوره‌ای با هر انتشار جدید از JDK به مقادیر قوی‌تر به‌روزرسانی می‌شوند.
اگر هم‌کنش‌پذیری با نگارش‌های قدیمی‌تر JDK اهمیت دارد، مطمئن شوید که
مقادیر پیش‌فرض توسط آن نگارش‌ها پشتیبانی می‌شوند.
همچنین، می‌توانید با مسئولیت خود از گزینه‌های -keysize یا
-sigalg برای بازنویسی مقادیر پیش‌فرض استفاده کنید.
"افزونه‌های نام‌دار پشتیبانی‌شده (SUPPORTED NAMED EXTENSIONS)"
دستور keytool از این افزونه‌های نام‌دار پشتیبانی می‌کند.
این نام‌ها به بزرگی و کوچکی حروف حساس نیستند.
BC یا BasicContraints
مقادیر:
شکل کامل آن عبارت است از
ca:{true|false}[,pathlen:len]
یا len که شکل کوتاه
ca:true,pathlen:len است.
هنگامی که len حذف شود، مقدار حاصل ca:true خواهد بود.
KU یا KeyUsage
مقادیر:
usage(, usage)*
آرگومان usage می‌تواند یکی از موارد زیر باشد:
• 2
digitalSignature
• 2
nonRepudiation (contentCommitment)
• 2
keyEncipherment
• 2
dataEncipherment
• 2
keyAgreement
• 2
keyCertSign
• 2
cRLSign
• 2
encipherOnly
• 2
decipherOnly
به شرطی که هیچ ابهامی وجود نداشته باشد، آرگومان usage را می‌توان
با چند حرف نخست (مانند dig برای digitalSignature) یا
به سبک کوهان‌شتری (camel-case) (مانند dS برای digitalSignature
یا cRLS برای cRLSign) کوتاه کرد.
مقادیر usage به بزرگی و کوچکی حروف حساس هستند.
EKU یا ExtendedKeyUsage
مقادیر:
usage(, usage)*
آرگومان usage می‌تواند یکی از موارد زیر باشد:
• 2
anyExtendedKeyUsage
• 2
serverAuth
• 2
clientAuth
• 2
codeSigning
• 2
emailProtection
• 2
timeStamping
• 2
OCSPSigning
• 2
هر رشتهٔ OID
به شرطی که هیچ ابهامی وجود نداشته باشد، آرگومان usage را می‌توان
با چند حرف نخست یا به سبک کوهان‌شتری کوتاه کرد.
مقادیر usage به بزرگی و کوچکی حروف حساس هستند.
SAN یا SubjectAlternativeName
مقادیر:
type:value(,
type:value)*
آرگومان type می‌تواند یکی از موارد زیر باشد:
• 2
EMAIL
• 2
URI
• 2
DNS
• 2
IP
• 2
OID
آرگومان value مقدار رشته‌ای متناظر با type است.
IAN یا IssuerAlternativeName
مقادیر:
مشابه SAN یا SubjectAlternativeName.
SIA یا SubjectInfoAccess
مقادیر:
method:location-type:location-value(,
method:location-type:location-value)*
آرگومان method می‌تواند یکی از موارد زیر باشد:
• 2
timeStamping
• 2
caRepository
• 2
هر OID
آرگومان‌های location-type و location-value می‌توانند
هر type:value پشتیبانی‌شده توسط افزونهٔ
SubjectAlternativeName باشند.
AIA یا AuthorityInfoAccess
مقادیر:
مشابه SIA یا SubjectInfoAccess.
آرگومان method می‌تواند یکی از موارد زیر باشد:
• 2
ocsp
• 2
caIssuers
• 2
هر OID
هنگامی که name از نوع OID باشد، مقدار آن خروجی هگزادسیمال (hex dump)
کدگذاری قواعد کدگذاری معین (DER) از extnValue افزونه، بدون در نظر
گرفتن بایت‌های نوع و طول OCTET STRING است.
به جز اعداد هگزادسیمال استاندارد (0-9، a-f، A-F)، هر نویسهٔ اضافی دیگری در
رشتهٔ HEX نادیده گرفته می‌شود.
بنابراین، هر دو مقدار 01:02:03:04 و 01020304 به عنوان مقادیری یکسان پذیرفته می‌شوند.
هنگامی که مقداری مشخص نشده باشد، افزونه یک فیلد مقدار خالی خواهد داشت.
یک نام ویژه به نام honored، که تنها در -gencert کاربرد دارد،
تعیین می‌کند که افزونه‌های موجود در درخواست گواهی چگونه باید اعمال و رعایت شوند.
مقدار این نام فهرستی جداشده با کاما از all (تمامی افزونه‌های درخواستی اعمال می‌شوند)،
name{:[critical|non-critical]} (افزونهٔ
نام‌برده اعمال می‌شود، اما از صفت isCritical متفاوتی استفاده می‌کند)، و
-name (همراه با all استفاده می‌شود و نشان‌دهندهٔ یک استثنا است) است.
افزونه‌های درخواستی به‌طور پیش‌فرض اعمال نمی‌شوند..PP
اگر علاوه بر گزینهٔ -ext honored، گزینهٔ -ext نام‌گذاری‌شده یا OID دیگری مشخص شود، این افزونه به مواردی که قبلاً پذیرفته شده‌اند افزوده می‌شود.
با این حال، اگر این نام (یا OID) در مقدار پذیرفته‌شده نیز وجود داشته باشد، مقدار و وضعیت بحرانی (criticality) آن جایگزین مقدار موجود در درخواست خواهد شد.
اگر افزونه‌ای از همان نوع چندین بار از طریق یک نام یا OID مشخص شود، تنها آخرین افزونه استفاده می‌شود.
افزونهٔ subjectKeyIdentifier همیشه ایجاد می‌شود.
برای گواهی‌های غیرخودامضاشده، افزونهٔ authorityKeyIdentifier ایجاد می‌شود.
احتیاط:
کاربران باید آگاه باشند که برخی ترکیبات افزونه‌ها (و سایر فیلدهای گواهی) ممکن است با استانداردهای اینترنت همخوانی نداشته باشند.
بخش Certificate Conformance Warning را ببینید.
"مثال‌هایی از مراحل ایجاد مخزن کلید (EXAMPLES OF TASKS IN CREATING A KEYSTORE)"
مثال‌های زیر توالی اقدامات در ایجاد یک keystore برای مدیریت جفت‌کلیدهای عمومی/خصوصی و گواهی‌های دریافت شده از مراجع معتمد را شرح می‌دهند.
• 2
تولید جفت‌کلید
• 2
درخواست گواهی امضاشده از یک CA
• 2
وارد کردن یک گواهی برای CA
• 2
وارد کردن پاسخ گواهی از CA
• 2
صادر کردن گواهی اعتبارسنجی کلید عمومی
• 2
وارد کردن Keystore
• 2
تولید گواهی‌ها برای یک سرور SSL
"تولید جفت‌کلید (GENERATING THE KEY PAIR)"
یک keystore بسازید و سپس جفت‌کلید را تولید کنید.
می‌توانید دستور را در یک خط تکی به صورت زیر وارد کنید:
keytool -genkeypair -dname "cn=myname, ou=mygroup, o=mycompany, c=mycountry" -alias business -keyalg rsa -keypass
password
-keystore /working/mykeystore -storepass password -validity 180
این دستور، مخزن کلید (keystore) با نام mykeystore را در دایرکتوری کاری (به شرطی که از قبل وجود نداشته باشد) ایجاد کرده و گذرواژهٔ مشخص‌شده با -keypass را به آن اختصاص می‌دهد.
این دستور یک جفت‌کلید عمومی/خصوصی برای هویتی که نام متمایز (distinguished name) آن شامل myname، mygroup، mycompany و کد کشور دو حرفی mycountry است، تولید می‌کند.
این دستور از الگوریتم تولید کلید RSA برای ساخت کلیدها استفاده می‌کند؛ هر دو کلید ۲۰۴۸ بیتی هستند.
این دستور از الگوریتم امضای پیش‌فرض SHA256withRSA برای ایجاد یک گواهی خودامضاشده استفاده می‌کند که حاوی کلید عمومی و اطلاعات نام متمایز است.
این گواهی به مدت ۱۸۰ روز معتبر است و با کلید خصوصی در یک مدخل keystore که با -alias business مشخص شده، مرتبط می‌شود.
به کلید خصوصی گذرواژهٔ مشخص‌شده با -keypass اختصاص داده می‌شود.
در صورتی که مقادیر پیش‌فرض گزینه‌ها پذیرفته شوند، دستور به‌طور قابل‌توجهی کوتاه‌تر خواهد بود.
در این حالت، تنها گزینهٔ -keyalg الزامی است و برای گزینه‌های مشخص‌نشده‌ای که مقدار پیش‌فرض دارند، از پیش‌فرض‌ها استفاده می‌شود.
مقادیر مورد نیاز از شما اعلان خواهد شد.
می‌توانید دستور را به شکل زیر داشته باشید:
keytool -genkeypair -keyalg rsa
در این حالت، یک مدخل keystore با نام مستعار mykey همراه با یک جفت‌کلید تازه تولیدشده و یک گواهی با اعتبار ۹۰ روز ایجاد می‌شود.
این مدخل در دایرکتوری خانگی شما در یک keystore به نام .keystore قرار می‌گیرد.
اگر .keystore از قبل وجود نداشته باشد، ایجاد می‌شود.
اطلاعات نام متمایز، گذرواژهٔ keystore و گذرواژهٔ کلید خصوصی از شما درخواست می‌شود.
نکته:
ادامهٔ مثال‌ها فرض می‌کنند که شما به اعلان‌ها با مقادیری معادل با مقادیر مشخص‌شده در نخستین دستور -genkeypair پاسخ داده‌اید.
برای مثال، یک نام متمایز با
cn=myname, ou=mygroup, o=mycompany, c=mycountry)..SH "درخواست گواهی امضاشده از یک CA (REQUESTING A SIGNED CERTIFICATE FROM A CA)"
نکته:
تولید جفت‌کلید یک گواهی خودامضا (self-signed) ایجاد کرده است؛ با این حال،
هنگامی که یک گواهی توسط یک CA امضا شده باشد، احتمال اینکه توسط دیگران
مورد اعتماد قرار گیرد بسیار بیشتر است.
برای دریافت امضای CA، فرایند زیر را انجام دهید:
"1." 3
تولید یک CSR:
4
keytool -certreq -file myname.csr
این دستور یک CSR برای موجودیت شناسایی‌شده با نام مستعار (alias) پیش‌فرض
mykey ایجاد می‌کند و درخواست را در فایلی با نام
myname.csr قرار می‌دهد.
"2." 3
ارسال myname.csr به یک CA، مانند DigiCert.
مرجع CA هویت شما یعنی درخواست‌کننده را (معمولاً به‌صورت آفلاین) احراز می‌کند و
گواهی امضاشده توسط خود را بازمی‌گرداند که اصالت کلید عمومی شما را تأیید می‌کند.
در برخی موارد، CA زنجیره‌ای از گواهی‌ها را بازمی‌گرداند که هر یک اصالت کلید عمومی
امضاکننده گواهی قبلی در زنجیره را تأیید می‌کند.
"وارد کردن گواهی برای CA (IMPORTING A CERTIFICATE FOR THE CA)"
برای وارد کردن یک گواهی برای CA، فرایند زیر را انجام دهید:
"1." 3
پیش از وارد کردن پاسخ گواهی از یک CA، به یک یا چند گواهی مورد اعتماد در
keystore خود یا در فایل keystore به نام cacerts نیاز دارید.
بخش -importcert را در Commands ببینید.
4
• 2
اگر پاسخ گواهی یک زنجیره گواهی باشد، به بالاترین گواهی این زنجیره نیاز دارید:
گواهی ریشه CA که اصالت کلید عمومی CA را تأیید می‌کند.
• 2
اگر پاسخ گواهی یک تک‌گواهی باشد، به گواهی مرجع صادرکننده CA (همان که آن را امضا
کرده است) نیاز دارید.
اگر آن گواهی خودامضا نباشد، به گواهی امضاکننده آن نیاز خواهید داشت، و به همین ترتیب
تا رسیدن به یک گواهی خودامضای ریشه CA.
مخزن کلید cacerts همراه با مجموعه‌ای از گواهی‌های ریشه صادرشده توسط CAهای
برنامه گواهی ریشه جاوای اوراکل (the Oracle Java Root Certificate program)
[http://www.oracle.com/technetwork/java/javase/javasecarootcertsprogram-1876540.html] عرضه می‌شود.
اگر درخواست یک گواهی امضاشده از یک CA بدهید و گواهی تأییدکننده کلید عمومی آن CA به
cacerts اضافه نشده باشد، باید گواهی آن CA را به‌عنوان یک گواهی مورد اعتماد
وارد (import) کنید.
یک گواهی از یک CA معمولاً خودامضا است یا توسط CA دیگری امضا شده است.
اگر توسط CA دیگری امضا شده باشد، به گواهی‌ای نیاز دارید که اصالت کلید عمومی آن CA
را تأیید کند.
برای نمونه، فایلی با نام X.cer از شرکتی که یک CA است دریافت
کرده‌اید و فرض بر این است که این فایل یک گواهی خودامضا است که اصالت کلید عمومی آن
CA را تأیید می‌کند.
پیش از اینکه آن را به‌عنوان یک گواهی مورد اعتماد وارد کنید، باید با انجام اقدامات
زیر از معتبر بودن گواهی اطمینان حاصل نمایید:
"1." 3
مشاهده آن با دستور keytool -printcert یا دستور
keytool -importcert بدون استفاده از گزینه -noprompt.
اطمینان حاصل کنید که اثرانگشت‌های نمایش‌داده‌شده برای گواهی با اثرانگشت‌های مورد انتظار
مطابقت دارند.
"2." 3
تماس با شخصی که گواهی را ارسال کرده است و مقایسه اثرانگشت‌هایی که مشاهده می‌کنید
با مواردی که آنها نشان می‌دهند یا آنچه یک مخزن امن کلید عمومی ارائه می‌دهد.
تنها هنگامی که اثرانگشت‌ها یکسان باشند، این اطمینان حاصل می‌شود که گواهی در حین انتقال
با گواهی شخص دیگری (مانند گواهی یک مهاجم) جایگزین نشده است.
اگر چنین حمله‌ای رخ دهد و شما پیش از وارد کردن گواهی آن را بررسی نکرده باشید،
به هر چیزی که توسط مهاجم امضا شود اعتماد خواهید کرد.
"2." 3
جایگزین کردن گواهی خودامضا با یک زنجیره گواهی، به‌طوری که هر گواهی در زنجیره،
کلید عمومی امضاکننده گواهی قبلی در زنجیره را تا رسیدن به یک CA ریشه تأیید اصالت کند.
4
اگر اطمینان دارید که گواهی معتبر است، می‌توانید با وارد کردن دستور زیر آن را به
keystore خود بیفزایید:
keytool -importcert -alias alias
-file *X*.cer`
این دستور از روی داده‌های موجود در فایل گواهی CA، یک مدخل گواهی مورد اعتماد در
keystore ایجاد می‌کند و مقادیر alias را به آن مدخل اختصاص می‌دهد.
پس از آنکه گواهی احراز هویت‌کنندهٔ کلید عمومیِ مرجع صدور گواهی (CA) که درخواست امضای گواهی خود را به آن ارسال کرده‌اید وارد کردید (یا از پیش چنین گواهی‌ای در فایل cacerts وجود دارد)، می‌توانید پاسخ گواهی را وارد کرده و گواهی خودامضاشدهٔ خود را با یک زنجیرهٔ گواهی جایگزین کنید.
زنجیرهٔ گواهی یکی از موارد زیر است:
• 2
توسط CA بازگردانده می‌شود، هنگامی که پاسخ CA یک زنجیره باشد.
• 2
هنگامی که پاسخ CA یک تک‌گواهی باشد، ساخته می‌شود.
این زنجیرهٔ گواهی با استفاده از پاسخ گواهی و گواهی‌های معتبری که یا در keystore محل وارد کردن پاسخ و یا در فایل keystore cacerts موجودند، ساخته می‌شود.
برای نمونه، اگر درخواست امضای گواهی خود را به DigiCert ارسال کرده‌اید، می‌توانید با وارد کردن دستور زیر پاسخ آن‌ها را وارد کنید:
نکته:
در این مثال، گواهی بازگردانده‌شده DCmyname.cer نام دارد.
keytool -importcert -trustcacerts -file DCmyname.cer
صادر کردن گواهی احراز هویت‌کنندهٔ کلید عمومی
نکته:
اگر از دستور jarsigner برای امضای یک فایل Java Archive (JAR) استفاده کرده‌اید، کلاینت‌هایی که از این فایل استفاده می‌کنند می‌خواهند امضای شما را احراز هویت کنند.
یکی از روش‌هایی که کلاینت‌ها می‌توانند شما را احراز هویت کنند، وارد کردن گواهی کلید عمومی شما در keystore خود به عنوان یک مدخل معتبر است.
سپس می‌توانید گواهی را صادر کرده و در اختیار کلاینت‌های خود قرار دهید.
برای نمونه:
"1." 3
با وارد کردن دستور زیر، گواهی خود را در فایلی به نام myname.cer کپی کنید:
4
نکته:
در این مثال، مدخل دارای نام مستعار mykey است.
keytool -exportcert -alias mykey -file myname.cer
"2." 3
با داشتن گواهی و فایل JAR امضاشده، کلاینت می‌تواند از دستور jarsigner برای احراز هویت امضای شما استفاده کند.
وارد کردن KEYSTORE
از دستور importkeystore برای وارد کردن یک keystore کامل به یک keystore دیگر استفاده کنید.
این دستور تمام مدخل‌های keystore مبدأ، از جمله کلیدها و گواهی‌ها را با یک دستور واحد به keystore مقصد وارد می‌کند.
می‌توانید از این دستور برای وارد کردن مدخل‌ها از نوع متفاوتی از keystore استفاده کنید.
در حین فرایند وارد کردن، تمام مدخل‌های جدید در keystore مقصد دارای نام‌های مستعار و گذرواژه‌های حفاظتی یکسانی (برای کلیدهای محرمانه و کلیدهای خصوصی) خواهند بود.
اگر دستور keytool نتواند کلیدهای خصوصی یا کلیدهای محرمانه را از keystore مبدأ بازیابی کند، گذرواژه را از شما درخواست می‌کند.
اگر تکراری بودن نام مستعار را شناسایی کند، یک نام مستعار جدید درخواست می‌کند؛ در این صورت می‌توانید یک نام مستعار جدید مشخص کنید یا صرفاً اجازه دهید دستور keytool مدخل موجود را بازنویسی کند.
برای نمونه، جهت وارد کردن مدخل‌ها از یک keystore معمولی از نوع JKS به نام key.jks به یک keystore سخت‌افزاری از نوع PKCS #11، دستور زیر را وارد کنید:
keytool -importkeystore -srckeystore key.jks -destkeystore NONE -srcstoretype JKS -deststoretype PKCS11 -srcstorepass
password -deststorepass password
دستور importkeystore همچنین می‌تواند برای وارد کردن یک مدخل منفرد از keystore مبدأ به keystore مقصد به کار رود.
در این حالت، افزون بر گزینه‌های استفاده‌شده در مثال پیشین، باید نام مستعاری را که می‌خواهید وارد شود مشخص کنید.
با تعیین گزینهٔ -srcalias، همچنین می‌توانید نام مستعار مقصد، گذرواژهٔ حفاظتی برای کلید محرمانه یا خصوصی و گذرواژهٔ حفاظتی مقصد مورد نظر خود را به صورت زیر مشخص کنید:
keytool -importkeystore -srckeystore key.jks -destkeystore NONE -srcstoretype JKS -deststoretype PKCS11 -srcstorepass
password -deststorepass password
-srcalias myprivatekey -destalias myoldprivatekey -srckeypass
password -destkeypass password
-noprompt
دستورهای keytool زیر برای تولید جفت‌کلیدها و گواهی‌ها برای سه موجودیت به کار می‌روند:
• 2
مرجع صدور گواهی ریشه (root)
• 2
مرجع صدور گواهی میانی (ca)
• 2
سرور SSL (server)
اطمینان حاصل کنید که تمام گواهی‌ها را در یک keystore یکسان ذخیره می‌کنید.
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

"اصطلاحات (TERMS)"
"مخزن کلید (Keystore)"
مخزن کلید (keystore) فضایی برای ذخیره‌سازی کلیدها و گواهی‌های رمزنگاری است.
"مدخل‌های مخزن کلید (Keystore entries)"
مخازن کلید می‌توانند انواع مختلفی از مدخل‌ها را داشته باشند.
دو نوع مدخل پرکاربردتر برای دستور keytool عبارتند از:
مدخل‌های کلید (Key entries): هر مدخل اطلاعات کلید رمزنگاری بسیار حساسی را نگهداری می‌کند که در قالبی محافظت‌شده برای جلوگیری از دسترسی غیرمجاز ذخیره شده است.
به طور معمول، کلید ذخیره‌شده در این نوع مدخل یک کلید محرمانه (secret key) یا یک کلید خصوصی (private key) همراه با زنجیره گواهی برای کلید عمومی متناظر است.
بخش Certificate Chains را ببینید.
دستور keytool می‌تواند هر دو نوع مدخل را مدیریت کند، در حالی که ابزار jarsigner تنها نوع دوم را پشتیبانی می‌کند، یعنی کلیدهای خصوصی و زنجیره‌های گواهی مرتبط با آن‌ها.
مدخل‌های گواهی معتمد (Trusted certificate entries): هر مدخل شامل یک گواهی کلید عمومی منفرد است که به طرف دیگری تعلق دارد.
این مدخل گواهی معتمد نامیده می‌شود زیرا مالک keystore اعتماد دارد که کلید عمومی موجود در گواهی متعلق به هویتی است که توسط موضوع (subject/مالک) گواهی تعیین شده است.
صادرکنندهٔ گواهی با امضای آن، این موضوع را ضمانت و تأیید می‌کند.
"نام‌های مستعار مخزن کلید (Keystore aliases)"
دسترسی به تمام مدخل‌های keystore (مدخل‌های کلید و مدخل‌های گواهی معتمد) از طریق نام‌های مستعار (alias) یکتا انجام می‌شود.
هنگامی که با دستور -genseckey برای تولید کلید محرمانه، دستور -genkeypair برای تولید جفت‌کلید (کلید عمومی و خصوصی) یا دستور -importcert برای افزودن یک گواهی یا زنجیره گواهی به فهرست گواهی‌های معتمد، موجودیتی را به keystore اضافه می‌کنید، یک نام مستعار مشخص می‌شود.
دستورهای بعدی keytool باید از همین نام مستعار برای ارجاع به آن موجودیت استفاده کنند.
برای مثال، می‌توانید با دستور زیر از نام مستعار duke برای تولید یک جفت‌کلید عمومی/خصوصی جدید و قرار دادن کلید عمومی در یک گواهی خودامضا (self-signed) استفاده کنید.
بخش Certificate Chains را ببینید.
keytool -genkeypair -alias duke -keyalg rsa -keypass
passwd
این مثال یک passwd اولیه تعیین می‌کند که دستورهای بعدی برای دسترسی به کلید خصوصی مربوط به نام مستعار duke به آن نیاز خواهند داشت.
اگر بعداً بخواهید گذرواژه کلید خصوصی Duke را تغییر دهید، از دستوری مانند زیر استفاده کنید:
keytool -keypasswd -alias duke -keypass passwd
-new newpasswd
این دستور passwd اولیه را به newpasswd تغییر می‌دهد.
یک گذرواژه نباید در خط فرمان یا درون یک اسکریپت مشخص شود مگر اینکه صرفاً برای آزمایش باشد یا در سیستمی امن قرار داشته باشید.
اگر گزینهٔ گذرواژهٔ لازم را در خط فرمان مشخص نکنید، برای وارد کردن آن اعلان دریافت خواهید کرد.
"پیاده‌سازی مخزن کلید (Keystore implementation)"
کلاس KeyStore ارائه‌شده در بستهٔ java.security واسط‌های مشخصی را برای دسترسی و ویرایش اطلاعات درون یک keystore فراهم می‌کند.
امکان وجود چندین پیاده‌سازی واقعی (concrete) متفاوت وجود دارد که هر یک از آن‌ها مربوط به نوع خاصی از keystore است.
در حال حاضر، دو ابزار خط فرمان (keytool و jarsigner) از پیاده‌سازی‌های keystore استفاده می‌کنند.
به این دلیل که کلاس KeyStore به صورت عمومی (public) تعریف شده است، کاربران می‌توانند برنامه‌های امنیتی بیشتری بنویسند که از آن بهره ببرند.
در JDK 9 و بالاتر، پیاده‌سازی پیش‌فرض keystore مقدار PKCS12 است.
این یک keystore چندسکویی مبتنی بر استاندارد RSA PKCS12 Personal Information Exchange Syntax Standard است.
این استاندارد در درجه اول برای ذخیره یا انتقال کلیدهای خصوصی، گواهی‌ها و اطلاعات محرمانه گوناگون کاربر در نظر گرفته شده است.
پیاده‌سازی توکار دیگری نیز وجود دارد که توسط Oracle ارائه شده است.
این پیاده‌سازی، keystore را به صورت فایلی با قالب اختصاصی به نام JKS پیاده می‌کند.
این فرمت از هر کلید خصوصی با گذرواژه اختصاصی خودش محافظت نموده و یکپارچگی کل keystore را نیز با یک گذرواژه (احتمالاً متفاوت) تأمین می‌کند.
پیاده‌سازی‌های keystore مبتنی بر ارائه‌دهنده (provider) هستند.
به طور مشخص‌تر، واسط‌های کاربردی ارائه‌شده توسط KeyStore در قالب یک Service Provider Interface (یا SPI) پیاده‌سازی شده‌اند.
به این معنا که کلاس انتزاعی متناظری به نام KeystoreSpi، همچنین در بستهٔ java.security وجود دارد که متدهای واسط ارائه‌دهنده خدمات را که ارائه‌دهندگان باید پیاده‌سازی کنند، تعریف می‌کند.
اصطلاح provider به یک بسته یا مجموعه‌ای از بسته‌ها اطلاق می‌شود که پیاده‌سازی واقعی زیرمجموعه‌ای از خدمات قابل دسترس توسط Java Security API را ارائه می‌دهند.
برای ارائه یک پیاده‌سازی keystore، کلاینت‌ها باید یک ارائه‌دهنده پیاده‌سازی کنند و یک زیرکلاس از KeystoreSpi ارائه دهند، همان‌گونه که در «Steps to Implement and Integrate a Provider» شرح داده شده است.
برنامه‌ها می‌توانند انواع مختلفی از پیاده‌سازی‌های keystore را از ارائه‌دهندگان مختلف با استفاده از متد کارخانه‌ای getInstance موجود در کلاس KeyStore انتخاب کنند.
یک نوع keystore، ساختار ذخیره‌سازی و قالب داده اطلاعات keystore و الگوریتم‌های مورد استفاده برای حفاظت از کلیدهای خصوصی/محرمانه در keystore و حفظ یکپارچگی keystore را تعریف می‌کند.
پیاده‌سازی‌های keystore از انواع مختلف با یکدیگر سازگار نیستند.
دستور keytool روی هر پیاده‌سازی فایل‌محور از keystore کار می‌کند.
این دستور مکان keystore ارسال‌شده در خط فرمان را به عنوان نام فایل در نظر گرفته و آن را به یک FileInputStream تبدیل می‌نماید که اطلاعات keystore را از آن بارگذاری می‌کند. دستورهای jarsigner می‌توانند keystore را از هر مکانی که با یک URL قابل تعیین باشد بخوانند.
برای keytool و jarsigner، می‌توانید نوع keystore را در خط فرمان با گزینهٔ -storetype مشخص کنید.
اگر صراحتاً نوع keystore را تعیین نکنید، این ابزارها پیاده‌سازی keystore را بر اساس مقدار مشخصهٔ keystore.type در فایل مشخصات امنیتی انتخاب می‌کنند.
فایل مشخصات امنیتی java.security نام دارد و در دایرکتوری مشخصات امنیتی قرار دارد:
• 2
لینوکس و OS X: java.home/lib/security
• 2
ویندوز: java.home\lib\security
هر ابزار مقدار keystore.type را دریافت می‌کند و سپس تمامی ارائه‌دهندگان نصب‌شده فعلی را بررسی می‌نماید تا یکی را بیابد که keystore از آن نوع را پیاده‌سازی کرده باشد.
سپس از پیاده‌سازی keystore آن ارائه‌دهنده استفاده می‌کند. کلاس KeyStore یک متد ایستا به نام getDefaultType تعریف می‌کند که به برنامه‌ها امکان می‌دهد مقدار مشخصهٔ keystore.type را بازیابی کنند.
خط کد زیر یک نمونه از نوع پیش‌فرض keystore را مطابق آنچه در مشخصهٔ keystore.type تعیین شده ایجاد می‌کند:
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
نوع پیش‌فرض keystore مقدار pkcs12 است، که یک keystore چندسکویی بر پایه استاندارد RSA PKCS12 Personal Information Exchange Syntax می‌باشد.
این مقدار توسط خط زیر در فایل مشخصه‌های امنیتی تعیین می‌شود:
keystore.type=pkcs12
برای اینکه ابزارها از پیاده‌سازی دیگری از keystore به غیر از پیش‌فرض استفاده کنند، می‌توانید آن خط را برای مشخص کردن نوع دیگری از keystore تغییر دهید.
برای مثال، اگر می‌خواهید از پیاده‌سازی keystore نوع jks متعلق به Oracle استفاده کنید، آن خط را به صورت زیر تغییر دهید:
keystore.type=jks
نکته:
بزرگی و کوچکی حروف در نام‌گذاری نوع keystore اهمیت ندارد.
به عنوان مثال، JKS همانند jks در نظر گرفته می‌شود.
گواهی (Certificate)
یک گواهی (یا گواهی کلید عمومی) بیانیه‌ای با امضای دیجیتال از سوی یک موجودیت (صادرکننده یا issuer) است که بیان می‌کند کلید عمومی و برخی اطلاعات دیگرِ یک موجودیت دیگر (موضوع یا subject)، مقدار مشخصی دارد.
اصطلاحات زیر با گواهی‌ها مرتبط هستند:
• 2
کلیدهای عمومی (Public Keys): این‌ها اعدادی هستند که به یک موجودیت خاص مرتبط شده‌اند و هدف این است که برای هر کسی که نیاز به تعاملات مورد اعتماد با آن موجودیت دارد، شناخته‌شده باشند.
کلیدهای عمومی برای اعتبارسنجی امضاها استفاده می‌شوند.
• 2
دارای امضای دیجیتال (Digitally Signed): اگر داده‌ای دارای امضای دیجیتال باشد، همراه با هویت یک موجودیت و امضایی ذخیره می‌شود که ثابت می‌کند آن موجودیت از داده‌ها آگاه است.
این داده‌ها با امضا شدن توسط کلید خصوصیِ آن موجودیت، غیرقابل جعل می‌شوند.
• 2
هویت (Identity): روشی شناخته‌شده برای ارجاع به یک موجودیت.
در برخی سامانه‌ها، هویت همان کلید عمومی است، و در سامانه‌های دیگر می‌تواند هر چیزی از یک Oracle Solaris UID گرفته تا یک نشانی ایمیل یا یک نام متمایز X.509 باشد.
• 2
امضا (Signature): یک امضا با استفاده از کلید خصوصی یک موجودیت روی بخشی از داده‌ها محاسبه می‌شود؛ یعنی امضاکننده، که در مورد یک گواهی به عنوان صادرکننده (issuer) نیز شناخته می‌شود.
• 2
کلیدهای خصوصی (Private Keys): این‌ها اعدادی هستند که هر کدام از آن‌ها قرار است تنها برای موجودیت خاصی که مالک آن کلید خصوصی است شناخته‌شده باشند (یعنی باید مخفی نگه داشته شوند).
کلیدهای خصوصی و عمومی در تمامی سامانه‌های رمزنگاری کلید عمومی (که سامانه‌های رمزنگاری کلید عمومی یا crypto systems نیز نامیده می‌شوند) به صورت جفت وجود دارند.
در یک سامانه رمزنگاری کلید عمومی معمول، مانند DSA، یک کلید خصوصی دقیقاً با یک کلید عمومی مطابقت دارد.
از کلیدهای خصوصی برای محاسبه امضاها استفاده می‌شود.
• 2
موجودیت (Entity): یک موجودیت می‌تواند یک شخص، سازمان، برنامه، رایانه، کسب‌وکار، بانک یا چیز دیگری باشد که شما تا حدی به آن اعتماد دارید.
رمزنگاری کلید عمومی نیازمند دسترسی به کلیدهای عمومی کاربران است.
در یک محیط شبکه‌ای در مقیاس بزرگ، غیرممکن است تضمین شود که از قبل بین موجودیت‌های برقرارکننده ارتباط رابطه‌ای شکل گرفته است یا اینکه یک مخزن قابل اعتماد حاوی تمامی کلیدهای عمومی مورد استفاده وجود دارد.
گواهی‌ها به عنوان راهکاری برای حل این مشکلِ توزیع کلید عمومی ابداع شدند.
امروزه یک مرجع صدور گواهی (Certification Authority یا CA) می‌تواند به عنوان شخص ثالث مورد اعتماد عمل کند.
مراجع CA موجودیت‌هایی نظیر کسب‌وکارها هستند که برای امضا کردن (صدور) گواهی‌ها برای سایر موجودیت‌ها مورد اعتماد می‌باشند.
فرض بر این است که مراجع CA تنها گواهی‌های معتبر و قابل اعتماد ایجاد می‌کنند زیرا ملزم به توافق‌نامه‌های قانونی هستند.
مراجع صدور گواهی عمومی متعددی مانند DigiCert، Comodo، Entrust و غیره وجود دارند.
شما همچنین می‌توانید با استفاده از محصولاتی نظیر Microsoft Certificate Server یا محصول Entrust CA، یک مرجع صدور گواهی اختصاصی برای سازمان خود راه‌اندازی کنید.
با دستور keytool، امکان نمایش، وارد کردن (import) و صادر کردن (export) گواهی‌ها وجود دارد.
همچنین امکان تولید گواهی‌های خودامضا (self-signed) وجود دارد.
دستور keytool در حال حاضر گواهی‌های X.509 را مدیریت می‌کند.
گواهی‌های X.509 (X.509 Certificates)
استاندارد X.509 مشخص می‌کند چه اطلاعاتی می‌تواند در یک گواهی قرار گیرد و نحوه نگارش آن (قالب داده) را توصیف می‌کند.
تمامی داده‌ها در یک گواهی با دو استاندارد مرتبط به نام ASN.1/DER کدگذاری می‌شوند.
استاندارد Abstract Syntax Notation 1 داده‌ها را توصیف می‌کند.
استاندارد Definite Encoding Rules یک روش واحد را برای ذخیره و انتقال آن داده‌ها مشخص می‌سازد.
تمام گواهی‌های X.509، علاوه بر امضا، دارای داده‌های زیر هستند:
• 2
نسخه (Version): این فیلد مشخص می‌کند کدام نسخه از استاندارد X.509 برای این گواهی اعمال می‌شود، که بر اطلاعات قابل درج در آن تأثیر می‌گذارد.
تاکنون سه نسخه تعریف شده است.
دستور keytool می‌تواند گواهی‌های v1، v2 و v3 را وارد (import) و صادر (export) کند.
این دستور گواهی‌های v3 تولید می‌کند.
2
• 2
نسخه ۱ استاندارد X.509 (یا X.509 Version 1) از سال ۱۹۸۸ در دسترس بوده، به‌طور گسترده مستقر شده است و عمومی‌ترین نسخه به شمار می‌رود.
• 2
نسخه ۲ استاندارد X.509 (یا X.509 Version 2) مفهوم شناسه‌های یکتای موضوع و صادرکننده را برای مدیریت احتمال استفاده مجدد از نام‌های موضوع یا صادرکننده در طول زمان معرفی کرد.
اکثر اسناد پروفایل گواهی اکیداً توصیه می‌کنند که نام‌ها مجدداً استفاده نشوند و گواهی‌ها از شناسه‌های یکتا بهره نگیرند.
گواهی‌های نسخه ۲ کاربرد گسترده‌ای ندارند.
• 2
نسخه ۳ استاندارد X.509 (یا X.509 Version 3) جدیدترین نسخه (۱۹۹۶) است و از مفهوم افزونه‌ها (extensions) پشتیبانی می‌کند که در آن هر کسی می‌تواند یک افزونه تعریف کرده و آن را در گواهی بگنجاند.
برخی از افزونه‌های متداول عبارتند از: KeyUsage (استفاده از کلیدها را به اهداف خاصی مانند signing-only محدود می‌کند) و AlternativeNames (اجازه می‌دهد هویت‌های دیگری نیز با این کلید عمومی مرتبط شوند، برای مثال نام‌های DNS، نشانی‌های ایمیل و آدرس‌های IP).
افزونه‌ها می‌توانند بحرانی (critical) علامت‌گذاری شوند تا نشان دهند که آن افزونه باید حتماً بررسی شده و اعمال گردد یا مورد استفاده قرار گیرد.
برای نمونه، اگر گواهی‌ای دارای افزونه KeyUsage با علامت بحرانی (critical) و مقدار keyCertSign باشد، در هنگام ارائه این گواهی در حین ارتباط SSL باید رد شود، زیرا افزونه گواهی مشخص می‌کند که کلید خصوصی مرتبط تنها باید برای امضای گواهی‌ها استفاده شود و نه برای کاربرد در SSL.
• 2
شماره سریال (Serial number): موجودیتی که گواهی را ایجاد کرده است مسئول تخصیص یک شماره سریال به آن است تا از سایر گواهی‌هایی که صادر می‌کند متمایز شود.
این اطلاعات به روش‌های متعددی استفاده می‌شود.
برای مثال، هنگامی که یک گواهی باطل می‌شود، شماره سریال آن در یک لیست ابطال گواهی (Certificate Revocation List یا CRL) قرار می‌گیرد.
• 2
شناسه الگوریتم امضا (Signature algorithm identifier): الگوریتم مورد استفاده توسط CA برای امضای گواهی را مشخص می‌کند.
• 2
نام صادرکننده (Issuer name): نام متمایز (Distinguished Name) بر اساس استاندارد X.500 برای موجودیتی که گواهی را امضا کرده است.
این معمولاً یک CA است.
استفاده از این گواهی به معنای اعتماد به موجودیتی است که این گواهی را امضا کرده است.
در برخی موارد، مانند گواهی‌های ریشه (root) یا مراجع CA سطح بالا (top-level)، صادرکننده گواهیِ خودش را امضا می‌کند.
• 2
دوره اعتبار (Validity period): هر گواهی فقط برای مدت زمان محدودی معتبر است.
این دوره با یک تاریخ و زمان شروع و یک تاریخ و زمان پایان توصیف می‌شود و می‌تواند به کوتاهی چند ثانیه یا تقریباً به طول یک قرن باشد.
دوره اعتبار انتخاب‌شده به عوامل متعددی بستگی دارد، مانند قدرت کلید خصوصیِ مورد استفاده برای امضای گواهی، یا مبلغی که شخص مایل است برای یک گواهی پرداخت کند.
این دوره، بازه زمانی مورد انتظاری است که در آن موجودیت‌ها می‌توانند به مقدار عمومی اتکا کنند، مشروط بر اینکه کلید خصوصی مرتبط به خطر نیفتاده باشد.
• 2
نام موضوع (Subject name): نام موجودیتی که گواهی، کلید عمومی آن را مشخص می‌کند.
این نام از استاندارد X.500 استفاده می‌کند، بنابراین طوری در نظر گرفته شده که در سراسر اینترنت یکتا باشد.
این، نام متمایز (DN) استاندارد X.500 برای آن موجودیت است.
برای مثال،
2
CN=Java Duke, OU=Java Software Division, O=Oracle Corporation, C=US
این موارد به نام عمومی (CN)، واحد سازمانی (OU)، سازمان (O) و کشور (C) سوژه (subject) اشاره دارند.
• 2
اطلاعات کلید عمومی سوژه: این، کلید عمومی موجودیت نام‌برده به همراه یک شناسه الگوریتم است که مشخص می‌کند این کلید به کدام سامانه رمزنگاری کلید عمومی و پارامترهای کلید مربوط به آن تعلق دارد.
زنجیره‌های گواهی (Certificate Chains)
دستور keytool می‌تواند مدخل‌های کلید keystore را که هر کدام حاوی یک کلید خصوصی و یک زنجیره گواهی مرتبط هستند، ایجاد و مدیریت کند.
نخستین گواهی در زنجیره حاوی کلید عمومی متناظر با کلید خصوصی است.
هنگامی که کلیدها برای نخستین بار تولید می‌شوند، زنجیره معمولاً تنها با یک عنصر آغاز می‌شود: یک گواهی خودامضا (self-signed).
مدخل -genkeypair را در بخش Commands ببینید.
یک گواهی خودامضا گواهی‌ای است که صادرکننده (امضاکننده) آن با سوژه (subject) یکسان است.
سوژه همان موجودیتی است که کلید عمومی آن توسط گواهی تأیید اصالت می‌شود.
هنگامی که دستور -genkeypair برای تولید یک جفت کلید عمومی/خصوصی جدید فراخوانی می‌شود، کلید عمومی را نیز درون یک گواهی خودامضا قرار می‌دهد (مگر اینکه گزینه -signer مشخص شده باشد).
سپس، پس از اینکه یک درخواست امضای گواهی (CSR) با دستور -certreq تولید و به یک مرجع صدور گواهی (CA) ارسال شد، پاسخ دریافت‌شده از CA با دستور -importcert وارد می‌شود و گواهی خودامضا با زنجیره‌ای از گواهی‌ها جایگزین می‌گردد.
در انتهای (پایین) زنجیره، گواهی (پاسخ) صادرشده توسط CA قرار دارد که کلید عمومی سوژه را تأیید اصالت می‌کند.
گواهی بعدی در زنجیره، گواهی‌ای است که کلید عمومی CA را تأیید اصالت می‌کند.
در بسیاری از موارد، این یک گواهی خودامضا است که گواهی‌ای از سوی CA برای تأیید اصالت کلید عمومی خودش است و آخرین گواهی در زنجیره به‌شمار می‌رود.
در موارد دیگر، ممکن است CA زنجیره‌ای از گواهی‌ها را بازگرداند.
در این حالت، گواهی انتهای زنجیره یکسان است (گواهی‌ای که توسط CA امضا شده و کلید عمومی مدخل کلید را تأیید اصالت می‌کند)، اما دومین گواهی در زنجیره گواهی‌ای است که توسط یک CA دیگر امضا شده و کلید عمومی مرجع صدور گواهی‌ای را که CSR برای آن ارسال شده بود تأیید اصالت می‌کند.
گواهی بعدی در زنجیره، گواهی‌ای است که کلید CA دوم را تأیید اصالت می‌کند و این روند به همین ترتیب ادامه می‌یابد تا به یک گواهی ریشه (root) خودامضا برسد.
هر گواهی در زنجیره (پس از گواهی نخست)، کلید عمومیِ امضاکننده گواهی پیشین در زنجیره را تأیید اصالت می‌کند.
بسیاری از CAها تنها گواهی صادرشده را بدون زنجیره پشتیبان بازمی‌گردانند، به‌ویژه زمانی که ساختار سلسله‌مراتبی مسطح باشد (هیچ CA میانی وجود نداشته باشد).
در این حالت، زنجیره گواهی باید از اطلاعات گواهی‌های معتبری که از پیش در keystore ذخیره شده است، ایجاد شود.
قالب پاسخ متفاوتی (تعریف‌شده توسط استاندارد PKCS #7) علاوه بر گواهی صادرشده، شامل زنجیره گواهی پشتیبان نیز می‌شود.
هر دو قالب پاسخ می‌توانند توسط دستور keytool پردازش شوند.
گواهی CA بالاترین سطح (ریشه یا root) خودامضا است.
با این حال، اعتماد به کلید عمومی ریشه از خود گواهی ریشه ناشی نمی‌شود، بلکه از منابع دیگری مانند یک روزنامه حاصل می‌شود.
زیرا هر کسی می‌تواند یک گواهی خودامضا با نام متمایز (distinguished name) به‌طور مثال CA ریشه DigiCert تولید کند.
کلید عمومی CA ریشه به‌طور گسترده شناخته‌شده است.
تنها دلیل ذخیره آن در یک گواهی این است که این قالب توسط اکثر ابزارها قابل فهم است؛ بنابراین در این حالت از گواهی صرفاً به عنوان وسیله‌ای برای انتقال کلید عمومی CA ریشه استفاده می‌شود.
پیش از افزودن گواهی CA ریشه به keystore خود، باید آن را با گزینه -printcert مشاهده کرده و اثر انگشت (fingerprint) نمایش‌داده‌شده را با اثر انگشت شناخته‌شده‌ای که از روزنامه، وب‌گاه CA ریشه و نظایر آن به دست آمده است، مقایسه کنید.
فایل گواهی‌های cacerts (cacerts Certificates File)
یک فایل گواهی به نام cacerts در دایرکتوری ویژگی‌های امنیتی قرار دارد:
• 2
لینوکس و OS X: JAVA_HOME/lib/security
• 2
ویندوز: JAVA_HOME\lib\security
فایل cacerts نشان‌دهنده یک keystore در سطح سراسری سیستم شامل گواهی‌های CA است.
مدیران سیستم می‌توانند با مشخص کردن jks به عنوان نوع keystore، آن فایل را با دستور keytool پیکربندی و مدیریت کنند.
فایل keystore با نام cacerts با مجموعه‌ای پیش‌فرض از گواهی‌های CA ریشه عرضه می‌شود.
برای لینوکس، OS X و ویندوز، می‌توانید گواهی‌های پیش‌فرض را با دستور زیر فهرست کنید:
keytool -list -cacerts
گذرواژه اولیه فایل keystore با نام cacerts برابر با changeit است.
مدیران سیستم باید هنگام نصب SDK، این گذرواژه و مجوز دسترسی پیش‌فرض آن فایل را تغییر دهند.
نکته:
اعتبارسنجی فایل cacerts بسیار مهم است.
از آنجا که شما به CAهای موجود در فایل cacerts به عنوان موجودیت‌هایی برای امضا و صدور گواهی برای سایر موجودیت‌ها اعتماد می‌کنید، باید فایل cacerts را با دقت مدیریت کنید.
فایل cacerts تنها باید شامل گواهی‌های CAهایی باشد که به آن‌ها اطمینان دارید.
بررسی گواهی‌های CA ریشه مورد اعتمادِ بسته‌بندی‌شده در فایل cacerts و اتخاذ تصمیمات مربوط به اعتماد بر عهده شماست.
برای حذف یک گواهی CA غیرقابل اعتماد از فایل cacerts، از گزینه -delete دستور keytool استفاده کنید.
می‌توانید فایل cacerts را در دایرکتوری $JAVA_HOME/lib/security در JDK پیدا کنید.
اگر اجازه ویرایش این فایل را ندارید، با مدیر سیستم خود تماس بگیرید.
استاندارد کدگذاری گواهی RFC 1421 اینترنت (Internet RFC 1421 Certificate Encoding Standard)
گواهی‌ها معمولاً به جای کدگذاری باینری، با استفاده از قالب کدگذاری قابل‌چاپ تعریف‌شده توسط استاندارد اینترنت RFC 1421 ذخیره می‌شوند.
این قالب گواهی، که با عنوان کدگذاری Base64 نیز شناخته می‌شود، صدور گواهی‌ها را به برنامه‌های دیگر از طریق ایمیل یا سازوکارهای دیگر آسان می‌سازد.
گواهی‌های خوانده‌شده توسط دستورهای -importcert و -printcert می‌توانند در این قالب یا به صورت کدگذاری دودویی (باینری) باشند.
دستور -exportcert به‌طور پیش‌فرض گواهی را در کدگذاری باینری صادر می‌کند، اما هنگام مشخص شدن گزینه -rfc، گواهی را در قالب کدگذاری قابل‌چاپ در خروجی قرار می‌دهد.
دستور -list به‌طور پیش‌فرض اثر انگشت SHA-256 یک گواهی را چاپ می‌کند.
اگر گزینه -v مشخص شود، گواهی در قالبی خوانا برای انسان چاپ می‌شود.
اگر گزینه -rfc مشخص شود، گواهی در قالب کدگذاری قابل‌چاپ در خروجی قرار می‌گیرد.
در قالب کدگذاری قابل‌چاپ، گواهی کدگذاری‌شده در ابتدا و انتها با متن زیر محدود می‌شود:
-----BEGIN CERTIFICATE-----
encoded certificate goes here.
-----END CERTIFICATE-----

نام‌های متمایز X.500 (X.500 Distinguished Names)
نام‌های متمایز X.500 برای شناسایی موجودیت‌ها استفاده می‌شوند، مانند مواردی که توسط فیلدهای subject و issuer (امضاکننده) در گواهی‌های X.509 نام‌گذاری شده‌اند.
دستور keytool از زیربخش‌های زیر پشتیبانی می‌کند:
• 2
commonName: نام عمومی یک فرد، مانند Susan Jones.
• 2
organizationUnit: نام سازمان کوچک (مانند دپارتمان یا بخش)؛ برای نمونه، Purchasing.
• 2
localityName: نام محل (شهر)؛ برای نمونه، Palo Alto.
• 2
stateName: نام ایالت یا استان؛ برای نمونه، California.
• 2
country: کد کشور دو حرفی؛ برای نمونه، CH.
هنگامی که یک رشته نام متمایز را به عنوان مقدار گزینه -dname، مانند دستور -genkeypair، ارائه می‌دهید، رشته باید در قالب زیر باشد:
CN=cName, OU=orgUnit, O=org, L=city, S=state, C=countryCode
تمامی موارد زیر نشان‌دهنده مقادیر واقعی هستند و کلیدواژه‌های پیشین مخفف موارد زیر می‌باشند:
CN=commonName
OU=organizationUnit
O=organizationName
L=localityName
S=stateName
C=country

یک نمونه رشتهٔ distinguished name عبارت است از:
CN=Mark Smith, OU=Java, O=Oracle, L=Cupertino, S=California, C=US
یک دستور نمونه با استفاده از چنین رشته‌ای:
keytool -genkeypair -dname "CN=Mark Smith, OU=Java, O=Oracle, L=Cupertino, S=California, C=US" -alias mark -keyalg rsa
بزرگی یا کوچکی حروف برای کلیدواژه‌های مخفف اهمیتی ندارد.
برای نمونه، با CN، cn و Cn به یک شکل رفتار می‌شود.
ترتیب قرارگیری اهمیت دارد؛ هر زیرمؤلفه باید در ترتیب تعیین‌شده قرار گیرد.
با این حال، نیازی نیست همهٔ زیرمؤلفه‌ها وجود داشته باشند.
می‌توانید از یک زیرمجموعه استفاده کنید، برای نمونه:
CN=Smith, OU=Java, O=Oracle, C=US
اگر مقدار یک رشتهٔ distinguished name شامل کاما باشد، هنگام مشخص کردن رشته در خط فرمان، کاما باید با یک نویسهٔ بک‌اسلش (\) گریز داده شود (escape شود)، مانند:
cn=Jack, ou=Java\, Product Development, o=Oracle, c=US
هرگز الزامی به تعیین رشتهٔ distinguished name در خط فرمان نیست.
هنگامی که distinguished name برای دستوری لازم باشد اما در خط فرمان مشخص نشده باشد، هر یک از زیرمؤلفه‌ها به صورت تعاملی از کاربر پرسیده می‌شود.
در این حالت، نیازی به گریز دادن کاما با نویسهٔ بک‌اسلش (\) نیست.
"هشدارها (WARNINGS)"
"هشدار وارد کردن گواهی‌های معتمد (IMPORTING TRUSTED CERTIFICATES WARNING)"
مهم: پیش از وارد کردن گواهی به عنوان یک گواهی معتمد (trusted)، حتماً آن را با دقت بسیار بررسی کنید.
مثال Windows:
ابتدا گواهی را با دستور -printcert یا دستور -importcert بدون گزینهٔ -noprompt مشاهده کنید.
اطمینان حاصل کنید که اثرانگشت‌های نمایش‌داده‌شدهٔ گواهی با مقادیر مورد انتظار مطابقت دارند.
برای نمونه، فرض کنید شخصی گواهی‌ای را برای شما ارسال یا ایمیل کرده و شما آن را در فایلی به نام \tmp\cert قرار داده‌اید.
پیش از آنکه گواهی را به فهرست گواهی‌های معتمد خود بیفزایید، می‌توانید دستور -printcert را برای مشاهدهٔ اثرانگشت‌های آن به صورت زیر اجرا کنید:
  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

مثال Linux:
ابتدا گواهی را با دستور -printcert یا دستور -importcert بدون گزینهٔ -noprompt مشاهده کنید.
اطمینان حاصل کنید که اثرانگشت‌های نمایش‌داده‌شدهٔ گواهی با مقادیر مورد انتظار مطابقت دارند.
برای نمونه، فرض کنید شخصی گواهی‌ای را برای شما ارسال یا ایمیل کرده و شما آن را در فایلی به نام /tmp/cert قرار داده‌اید.
پیش از آنکه گواهی را به فهرست گواهی‌های معتمد خود بیفزایید، می‌توانید دستور -printcert را برای مشاهدهٔ اثرانگشت‌های آن به صورت زیر اجرا کنید:
  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

سپس با فرستندهٔ گواهی تماس تلفنی یا ارتباط دیگری برقرار کرده و اثرانگشت‌هایی را که مشاهده می‌کنید با مقادیر ارائه شده از سوی آن‌ها مقایسه نمایید.
تنها در صورتی که اثرانگشت‌ها یکسان باشند، تضمین می‌شود که گواهی در حین انتقال با گواهی شخص دیگری مانند یک مهاجم جایگزین نشده است.
اگر چنین حمله‌ای رخ داده باشد و گواهی را پیش از وارد کردن بررسی نکرده باشید، به هر آنچه توسط مهاجم امضا شده باشد اعتماد خواهید کرد؛ برای نمونه، یک فایل JAR که درون آن فایل‌های class مخرب قرار دارد.
نکته:
اجرای دستور -printcert پیش از وارد کردن گواهی الزامی نیست.
دلیل این امر آن است که پیش از افزودن گواهی به فهرست گواهی‌های معتمد در keystore، دستور -importcert اطلاعات گواهی را نمایش داده و تأیید آن را از شما درخواست می‌کند.
سپس می‌توانید عملیات وارد کردن را متوقف کنید.
با این حال، این کار تنها زمانی ممکن است که دستور -importcert را بدون گزینهٔ -noprompt فراخوانی کنید.
اگر گزینهٔ -noprompt مشخص شده باشد، هیچ تعاملی با کاربر صورت نخواهد گرفت..SH "هشدار گذرواژه‌ها (PASSWORDS WARNING)"
بیشتر دستوراتی که بر روی یک keystore عمل می‌کنند، به گذرواژهٔ انبار نیاز دارند.
برخی دستورات به گذرواژهٔ کلید خصوصی/سری نیاز دارند.
گذرواژه‌ها را می‌توان در خط فرمان با گزینه‌های
-storepass و -keypass مشخص کرد.
با این حال، نباید گذرواژه‌ای را در خط فرمان یا در یک اسکریپت مشخص کرد مگر
اینکه برای مقاصد آزمایشی باشد یا در یک سامانهٔ امن حضور داشته باشید.
هنگامی که یک گزینهٔ گذرواژهٔ الزامی را در خط فرمان مشخص نکنید،
برای وارد کردن آن از شما درخواست می‌شود.
"هشدار انطباق گواهی (CERTIFICATE CONFORMANCE WARNING)"
سند Internet X.509 Public Key Infrastructure Certificate and
Certificate Revocation List (CRL) Profile
[https://tools.ietf.org/rfc/rfc5280.txt] یک نمایه برای گواهی‌های منطبق با
X.509 تعریف کرده است که شامل مقادیر و ترکیب مقادیر معتبر برای فیلدها و
افزونه‌های گواهی می‌شود.
دستور keytool تمام این قواعد را تحمیل نمی‌کند، بنابراین می‌تواند
گواهی‌هایی تولید کند که با استاندارد انطباق ندارند، مانند گواهی‌های
خودامضاشده (self-signed) که برای اهداف آزمایش داخلی استفاده می‌شوند.
گواهی‌هایی که با استاندارد منطبق نباشند ممکن است توسط JDK یا سایر برنامه‌ها
رد شوند.
کاربران باید اطمینان حاصل کنند که گزینه‌های درستی را برای
-dname، -ext و غیره فراهم می‌کنند.
"وارد کردن یک گواهی معتمد جدید (IMPORT A NEW TRUSTED CERTIFICATE)"
پیش از آنکه گواهی را به keystore اضافه کنید، دستور keytool
با تلاش برای ایجاد یک زنجیرهٔ اعتماد از آن گواهی تا یک گواهی خودامضاشده
(متعلق به یک CA ریشه)، با استفاده از گواهی‌های معتمدی که از قبل در keystore
موجود هستند، آن را اعتبارسنجی می‌کند.
اگر گزینهٔ -trustcacerts مشخص شده باشد، گواهی‌های بیشتری برای
زنجیرهٔ اعتماد در نظر گرفته می‌شوند، یعنی گواهی‌های موجود در فایلی به نام
cacerts.
اگر دستور keytool نتواند یک مسیر اعتماد را از گواهی در حال وارد شدن
تا یک گواهی خودامضاشده (چه از keystore یا از فایل cacerts)
برقرار کند، اطلاعات گواهی چاپ می‌شود و از کاربر خواسته می‌شود تا با مقایسهٔ
اثرانگشت‌های نمایش‌داده‌شده با اثرانگشت‌های به‌دست‌آمده از یک منبع اطلاعاتی
(معتمد) دیگر که ممکن است مالک گواهی باشد، آن را تأیید کند.
بسیار دقت کنید تا پیش از وارد کردن گواهی به عنوان یک گواهی معتمد، از معتبر
بودن آن اطمینان حاصل نمایید.
کاربر این امکان را دارد که عملیات وارد کردن را متوقف کند.
اگر گزینهٔ -noprompt مشخص شده باشد، هیچ تعاملی با کاربر صورت
نمی‌گیرد.
"وارد کردن یک پاسخ گواهی (IMPORT A CERTIFICATE REPLY)"
هنگامی که یک پاسخ گواهی را وارد می‌کنید، پاسخ گواهی با گواهی‌های معتمد از
keystore، و در صورت تعیین گزینهٔ -trustcacerts، به صورت اختیاری
با گواهی‌های پیکربندی‌شده در فایل keystore به نام cacerts
اعتبارسنجی می‌شود.
روش‌های تشخیص اینکه آیا پاسخ گواهی معتمد است یا خیر به شرح زیر است:
• 2
اگر پاسخ یک گواهی تکی X.509 باشد، دستور keytool تلاش می‌کند تا
یک زنجیرهٔ اعتماد برقرار سازد که از پاسخ گواهی شروع شده و به یک گواهی
خودامضاشده (متعلق به یک CA ریشه) ختم می‌شود.
پاسخ گواهی و سلسله‌مراتب گواهی‌ها برای اصالت‌سنجی پاسخ گواهی از زنجیرهٔ گواهی
جدید نام‌های مستعار (aliases) استفاده می‌شود.
اگر زنجیرهٔ اعتماد برقرار نشود، پاسخ گواهی وارد نمی‌شود.
در این حالت، دستور keytool گواهی را چاپ نمی‌کند و از کاربر درخواست
تأیید نمی‌نماید، زیرا تشخیص اصالت پاسخ گواهی برای کاربر بسیار دشوار است.
• 2
اگر پاسخ یک زنجیرهٔ گواهی با قالب PKCS #7 یا توالی‌ای از گواهی‌های X.509 باشد،
زنجیره به این ترتیب مرتب می‌شود که گواهی کاربر در ابتدا و به دنبال آن صفر یا چند
گواهی CA قرار می‌گیرد.
اگر زنجیره با یک گواهی خودامضاشدهٔ CA ریشه پایان یابد و گزینهٔ
-trustcacerts مشخص شده باشد، دستور keytool تلاش
می‌کند تا آن را با هر یک از گواهی‌های معتمد در keystore یا فایل keystore
به نام cacerts مطابقت دهد.
اگر زنجیره به یک گواهی خودامضاشدهٔ CA ریشه ختم نشود و گزینهٔ
-trustcacerts مشخص شده باشد، دستور keytool سعی می‌کند
تا نمونه‌ای از گواهی‌های معتمد را در keystore یا فایل keystore به نام
cacerts پیدا کرده و آن را به انتهای زنجیره اضافه کند.
اگر گواهی پیدا نشود و گزینهٔ -noprompt مشخص نشده باشد، اطلاعات
آخرین گواهی در زنجیره چاپ می‌شود و از کاربر خواسته می‌شود تا آن را تأیید کند.
اگر کلید عمومی موجود در پاسخ گواهی با کلید عمومی کاربر که از قبل با
alias ذخیره شده مطابقت داشته باشد، زنجیرهٔ گواهی قدیمی با
زنجیرهٔ گواهی جدید موجود در پاسخ جایگزین می‌شود.
زنجیرهٔ قدیمی تنها با یک keypass معتبر قابل جایگزینی است،
بنابراین گذرواژهٔ استفاده‌شده برای محافظت از کلید خصوصی ورودی ارائه می‌شود.
اگر هیچ گذرواژه‌ای ارائه نشود و گذرواژهٔ کلید خصوصی با گذرواژهٔ keystore
متفاوت باشد، از کاربر برای وارد کردن آن درخواست می‌شود.
این دستور در نسخه‌های پیشین -import نامیده می‌شد.
این نام قدیمی هنوز در این نسخه پشتیبانی می‌شود.
نام جدید، یعنی -importcert، ارجح است.
2021 JDK 17