KEYTOOL(1) JDK Commands KEYTOOL(1)

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

keytool [commands]

دستورهای keytool شامل موارد زیر است:
  • -certreq: یک درخواست گواهی (certificate request) تولید می‌کند
  • -changealias: نام مستعار (alias) یک مدخل را تغییر می‌دهد
  • -delete: یک مدخل را حذف می‌کند
  • -exportcert: گواهی را صادر می‌کند
  • -genkeypair: یک جفت‌کلید تولید می‌کند
  • -genseckey: یک کلید محرمانه (secret key) تولید می‌کند
  • -gencert: از روی یک درخواست گواهی، یک گواهی صادر می‌کند
  • -importcert: یک گواهی یا زنجیره گواهی را وارد می‌کند
  • -importpass: یک گذرواژه را وارد می‌کند
  • -importkeystore: یک یا تمام مدخل‌ها را از یک keystore دیگر وارد می‌کند
  • -keypasswd: گذرواژه کلید مربوط به یک مدخل را تغییر می‌دهد
  • -list: مدخل‌های موجود در یک keystore را فهرست می‌کند
  • -printcert: محتوای یک گواهی را چاپ می‌کند
  • -printcertreq: محتوای یک درخواست گواهی را چاپ می‌کند
  • -printcrl: محتوای یک فایل فهرست ابطال گواهی (CRL) را چاپ می‌کند
  • -storepasswd: گذرواژه ذخیره‌گاه (store password) یک keystore را تغییر می‌دهد
  • -showinfo: اطلاعات مرتبط با امنیت را نمایش می‌دهد
  • -version: نسخه برنامه را چاپ می‌کند برای شرح این دستورها به‌همراه گزینه‌هایشان، 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)" نکات زیر در مورد توضیحات بخش دستورات و گزینه‌ها صدق می‌کنند:

  • تمام نام‌های دستورات و گزینه‌ها با علامت خط تیره (-) آغاز می‌شوند.
  • تنها یک دستور را می‌توان مشخص کرد.
  • گزینه‌های هر دستور را می‌توان به هر ترتیبی وارد کرد.
  • دو نوع گزینه وجود دارد؛ یکی تک‌مقداری است که تنها باید یک‌بار مشخص شود. اگر یک گزینهٔ تک‌مقداری چندین بار مشخص شود، مقدار آخرین مورد استفاده خواهد شد. نوع دیگر چندمقداری است که می‌تواند چندین بار مشخص شود و تمام مقادیر آن به کار گرفته می‌شوند. تنها گزینهٔ چندمقداری که در حال حاضر پشتیبانی می‌شود، گزینهٔ -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

دستورات نمایش نسخهٔ برنامه:

•
-version.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]: گذرواژه مخزن کلید (keystore)
  • {-storetype type}: نوع مخزن کلید (keystore)
  • {-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]}: افزودن تأمین‌کننده امنیتی با نام کامل کلاس (fully qualified class name) همراه با یک آرگومان پیکربندی اختیاری.

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

keytool -providerclass com.example.MyProvider ...

  • {-providerpath list}: مسیر کلاس (classpath) تأمین‌کننده
  • {-v}: خروجی با جزئیات (پُرگو)
  • {-protected}: گذرواژه از طریق یک سازوکار محافظت‌شده ارائه می‌شود از دستور -gencert برای تولید گواهی در پاسخ به یک فایل درخواست گواهی (که می‌تواند با دستور keytool -certreq ایجاد شود) استفاده کنید. این دستور درخواست را از infile یا در صورت حذف آن، از ورودی استاندارد می‌خواند، آن را با استفاده از کلید خصوصی نام مستعار (alias) امضا می‌کند، و گواهی X.509 را در outfile یا در صورت حذف آن، در خروجی استاندارد قرار می‌دهد. هنگامی که -rfc مشخص شده باشد، قالب خروجی PEM کدگذاری‌شده به صورت Base64 خواهد بود؛ در غیر این صورت، یک خروجی دودویی DER ایجاد می‌شود. مقدار -sigalg الگوریتمی را مشخص می‌کند که باید برای امضای گواهی استفاده شود. آرگومان startdate زمان و تاریخ آغاز اعتبار گواهی است. آرگومان days بیانگر تعداد روزهایی است که گواهی باید معتبر در نظر گرفته شود. هنگامی که dname ارائه شود، به عنوان موضوع (subject) گواهی تولیدشده استفاده می‌شود. در غیر این صورت، مقدار موجود در درخواست گواهی به کار می‌رود. مقدار -ext نشان می‌دهد چه افزونه‌های X.509 در گواهی تعبیه خواهند شد. برای آگاهی از قواعد نگارشی -ext، بخش گزینه‌های مشترک دستورات (Common Command Options) را مطالعه کنید. گزینه -gencert این امکان را به شما می‌دهد که زنجیره‌های گواهی (certificate chains) ایجاد کنید. مثال زیر گواهی 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}: نام مخزن کلید (keystore)
  • [-storepass arg]: گذرواژه مخزن کلید (keystore)
  • {-storetype type}: نوع مخزن کلید (keystore)
  • {-providername name}: نام تأمین‌کننده (Provider)
  • {-addprovider name [-providerarg arg]}: افزودن تأمین‌کننده امنیتی با نام (مانند SunPKCS11) همراه با یک آرگومان پیکربندی اختیاری..IP • 2 {-providerclass class [-providerarg arg] }: افزودن ارائه‌دهندهٔ امنیتی با نام کامل کلاس (fully qualified class name) به همراه یک آرگومان پیکربندی اختیاری.
  • {-providerpath list}: مسیر کلاس (classpath) ارائه‌دهنده
  • {-v}: خروجی با جزئیات کامل
  • {-protected}: گذرواژه از طریق یک سازوکار محافظت‌شده ارائه می‌شود از دستور -genkeypair برای تولید یک جفت‌کلید (یک کلید عمومی و کلید خصوصی مرتبط با آن) استفاده کنید. هنگامی که گزینهٔ -signer مشخص نشده باشد، کلید عمومی در یک گواهی خودامضا (self-signed) از نوع X.509 v3 قرار گرفته و به عنوان یک زنجیرهٔ گواهی تک‌عنصری ذخیره می‌شود. هنگامی که گزینهٔ -signer مشخص شده باشد، گواهی جدیدی تولید شده و توسط امضاکنندهٔ تعیین‌شده امضا می‌شود و به عنوان یک زنجیرهٔ گواهی چندعنصری (شامل خود گواهی تولیدشده و زنجیرهٔ گواهی امضاکننده) ذخیره می‌گردد. زنجیرهٔ گواهی و کلید خصوصی در یک مدخل جدید در keystore که با نام مستعار (alias) آن مشخص می‌شود، ذخیره می‌گردند. مقدار -keyalg الگوریتمی را که باید برای تولید جفت‌کلید استفاده شود مشخص می‌کند. مقدار -keysize اندازهٔ هر کلید تولیدی را مشخص می‌کند. مقدار -groupname گروه نام‌گذاری‌شدهٔ (به عنوان مثال، نام استاندارد یا از پیش تعریف‌شدهٔ یک منحنی بیضوی) کلید تولیدی را مشخص می‌کند. هنگامی که مقدار -keysize ارائه شود، از آن برای مقداردهی اولیهٔ شیء KeyPairGenerator با استفاده از متد initialize(int keysize) استفاده خواهد شد. هنگامی که مقدار -groupname ارائه شود، از آن برای مقداردهی اولیهٔ شیء KeyPairGenerator با استفاده از متد initialize(AlgorithmParameterSpec params) استفاده خواهد شد که در آن params همان new NamedParameterSpec(groupname) است. تنها یکی از دو گزینهٔ -groupname و -keysize را می‌توان مشخص کرد. اگر الگوریتمی دارای چند گروه نام‌گذاری‌شده با اندازهٔ کلید یکسان باشد، معمولاً باید از گزینهٔ -groupname استفاده شود. در این حالت، اگر -keysize مشخص شده باشد، تعیین اینکه هنگام تولید جفت‌کلید کدام گروه نام‌گذاری‌شده انتخاب شود به ارائه‌دهندهٔ امنیتی واگذار می‌شود. مقدار -sigalg الگوریتمی را که باید برای امضای گواهی استفاده شود مشخص می‌کند. این الگوریتم باید با مقدار -keyalg سازگار باشد. مقدار -signer نام مستعار (alias) یک PrivateKeyEntry را برای امضاکننده‌ای که از قبل در keystore وجود دارد مشخص می‌کند. این گزینه برای امضای گواهی با کلید خصوصی امضاکننده استفاده می‌شود. این ویژگی به‌ویژه برای الگوریتم‌های توافق کلید (یعنی زمانی که مقدار -keyalg برابر با XDH، X25519، X448 یا DH باشد) مفید است، زیرا این کلیدها نمی‌توانند برای امضاهای دیجیتال استفاده شوند و بنابراین امکان ایجاد یک گواهی خودامضا (self-signed) وجود ندارد. مقدار -signerkeypass گذرواژهٔ کلید خصوصی امضاکننده را مشخص می‌کند. اگر کلید خصوصی مدخل امضاکننده با گذرواژه‌ای متفاوت از گذرواژهٔ مخزن (store password) محافظت شده باشد، می‌توان آن را مشخص کرد. مقدار -dname نام متمایز (Distinguished Name) استاندارد X.500 را که باید با مقدار -alias مرتبط شود مشخص می‌کند. اگر گزینهٔ -signer مشخص نشده باشد، فیلدهای صادرکننده (issuer) و موضوع (subject) در گواهی خودامضا با نام متمایز مشخص‌شده مقداردهی می‌شوند. اگر گزینهٔ -signer مشخص شده باشد، فیلد موضوع (subject) گواهی با نام متمایز مشخص‌شده مقداردهی می‌شود و فیلد صادرکننده (issuer) با فیلد موضوع گواهیِ امضاکننده پر می‌گردد. اگر نام متمایز در خط فرمان ارائه نشود، از کاربر خواسته می‌شود تا آن را وارد کند. مقدار -keypass گذرواژه‌ای است که برای محافظت از کلید خصوصی جفت‌کلید تولیدشده استفاده می‌شود. اگر گذرواژه‌ای ارائه نشود، از کاربر خواسته می‌شود تا آن را وارد کند. اگر هنگام نمایش اعلان (prompt) کلید Return را فشار دهید، گذرواژهٔ کلید با گذرواژهٔ keystore یکسان تنظیم می‌شود. مقدار -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}: نام keystore
  • [-storepass arg]: گذرواژهٔ keystore
  • {-storetype type}: نوع keystore
  • {-providername name}: نام ارائه‌دهنده
  • {-addprovider name [-providerarg arg]}: افزودن ارائه‌دهندهٔ امنیتی با نام (مانند SunPKCS11) به همراه یک آرگومان پیکربندی اختیاری.
  • {-providerclass class [-providerarg arg]}: افزودن ارائه‌دهندهٔ امنیتی با نام کامل کلاس به همراه یک آرگومان پیکربندی اختیاری.
  • {-providerpath list}: مسیر کلاس (classpath) ارائه‌دهنده
  • {-v}: خروجی با جزئیات کامل
  • {-protected}: گذرواژه از طریق یک سازوکار محافظت‌شده ارائه می‌شود از دستور -genseckey برای تولید یک کلید مخفی (secret key) و ذخیرهٔ آن در یک KeyStore.SecretKeyEntry جدید با نام مستعار alias استفاده کنید. مقدار -keyalg الگوریتم مورد استفاده برای تولید کلید مخفی را مشخص کرده و مقدار -keysize اندازهٔ کلید تولیدشده را تعیین می‌کند. مقدار -keypass گذرواژه‌ای است که از کلید مخفی محافظت می‌کند. اگر گذرواژه‌ای ارائه نشود، از کاربر خواسته می‌شود تا آن را وارد کند. اگر هنگام نمایش اعلان کلید Return را فشار دهید، گذرواژهٔ کلید با گذرواژهٔ مورد استفاده برای -keystore یکسان تنظیم می‌شود. مقدار -keypass باید حداقل دارای شش نویسه باشد.
گزینه‌های در دسترس برای دستور -importcert عبارتند از:
  • {-noprompt}: بدون نمایش اعلان
  • {-trustcacerts}: اعتماد به گواهی‌های موجود در cacerts.IP • 2 {-protected}: گذرواژه از طریق سازوکار محافظت‌شده ارائه می‌شود
  • {-alias alias}: نام مستعار مدخل جهت پردازش
  • {-file file}: نام فایل ورودی
  • [-keypass arg]: گذرواژه کلید
  • {-keystore keystore}: نام keystore
  • {-cacerts}: دسترسی به keystore مربوط به cacerts
  • [-storepass arg]: گذرواژه keystore
  • {-storetype type}: نوع keystore
  • {-providername name}: نام ارائه‌دهنده
  • {-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 نسخه v1، v2 و v3 و همچنین زنجیره‌های گواهی با فرمت PKCS#7 متشکل از گواهی‌هایی از این نوع را وارد کند. داده‌هایی که باید وارد شوند باید یا در قالب کدگذاری دودویی و یا در قالب کدگذاری قابل‌چاپ (که با نام کدگذاری Base64 نیز شناخته می‌شود) طبق تعریف استاندارد اینترنتی RFC 1421 ارائه شوند. در حالت دوم، کدگذاری باید در ابتدا توسط رشته‌ای که با -----BEGIN شروع می‌شود و در انتها توسط رشته‌ای که با -----END شروع می‌شود، محدود شده باشد. شما به دو دلیل یک گواهی را وارد می‌کنید: برای افزودن آن به فهرست گواهی‌های مورد اعتماد، و برای وارد کردن پاسخ گواهی دریافت شده از یک مرجع صدور گواهی (CA) در نتیجه ارسال یک درخواست امضای گواهی (CSR) به آن CA. دستور -certreq را در Commands for Generating a Certificate Request ببینید. نوع واردسازی بر اساس مقدار گزینه -alias مشخص می‌شود. اگر نام مستعار به یک مدخل کلید اشاره نکند، دستور keytool فرض می‌کند که شما در حال افزودن یک مدخل گواهی مورد اعتماد هستید. در این حالت، نام مستعار نباید از قبل در keystore وجود داشته باشد. اگر نام مستعار وجود داشته باشد، دستور keytool خطایی صادر می‌کند زیرا یک گواهی مورد اعتماد از قبل برای آن نام مستعار وجود دارد، و گواهی را وارد نمی‌کند. اگر -alias به یک مدخل کلید اشاره کند، دستور keytool فرض می‌کند که در حال وارد کردن یک پاسخ گواهی هستید.
گزینه‌های زیر برای دستور -importpass در دسترس هستند:
  • {-alias alias}: نام مستعار مدخل جهت پردازش
  • [-keypass arg]: گذرواژه کلید
  • {-keyalg alg}: نام الگوریتم کلید
  • {-keysize size}: اندازه کلید بر حسب بیت
  • {-keystore keystore}: نام keystore
  • [-storepass arg]: گذرواژه keystore
  • {-storetype type}: نوع keystore
  • {-providername name}: نام ارائه‌دهنده
  • {-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}: نام تأمین‌کننده (provider) keystore مبدأ
  • {-destprovidername name}: نام تأمین‌کننده keystore مقصد
  • {-srcalias alias}: نام مستعار (alias) مبدأ
  • {-destalias alias}: نام مستعار (alias) مقصد
  • [-srckeypass arg]: گذرواژه کلید مبدأ
  • [-destkeypass arg]: گذرواژه کلید مقصد
  • {-noprompt}: بدون نمایش اعلان و درخواست تأیید
  • {-addprovider name [-providerarg arg]}: افزودن ارائه‌دهندهٔ امنیتی با نام (مانند SunPKCS11) همراه با یک آرگومان پیکربندی اختیاری.
  • {-providerclass class [-providerarg arg]}: افزودن ارائه‌دهندهٔ امنیتی با نام کامل کلاس (fully qualified class name) همراه با یک آرگومان پیکربندی اختیاری
  • {-providerpath list}: مسیر کلاس (classpath) ارائه‌دهنده
  • {-v}: خروجی مشروح نکته: خط نخستِ تمامی گزینه‌ها بدین صورت است:

-srckeystore keystore -destkeystore keystore

از دستور -importkeystore برای وارد کردن یک مدخل (entry) منفرد یا تمامی مدخل‌ها از یک keystore مبدأ به یک keystore مقصد استفاده کنید. نکته: اگر هنگام استفاده از دستور keytool -importkeystore گزینهٔ -destkeystore را مشخص نکنید، keystore پیش‌فرض مورد استفاده $HOME/.keystore خواهد بود. هنگامی که گزینهٔ -srcalias تعیین شود، دستور تنها مدخل مشخص‌شده با آن alias را به keystore مقصد وارد می‌کند. اگر alias مقصد با -destalias مشخص نشود، آنگاه از -srcalias به عنوان alias مقصد استفاده می‌شود. اگر مدخل مبدأ با یک گذرواژه محافظت شده باشد، از -srckeypass برای بازیابی مدخل استفاده خواهد شد. اگر -srckeypass مشخص نشده باشد، دستور keytool تلاش می‌کند از -srcstorepass برای بازیابی مدخل استفاده کند. اگر -srcstorepass مشخص نشده یا نادرست باشد، گذرواژه از کاربر درخواست می‌شود. مدخل مقصد با -destkeypass محافظت می‌شود. اگر -destkeypass مشخص نشود، مدخل مقصد با گذرواژهٔ مدخل مبدأ محافظت خواهد شد. برای مثال، بیشتر ابزارهای شخص ثالث نیازمند این هستند که storepass و keypass در یک keystore از نوع PKCS #12 یکسان باشند. برای ایجاد یک keystore از نوع PKCS#12 برای این ابزارها، همواره -destkeypass را یکسان با -deststorepass تعیین کنید. اگر گزینهٔ -srcalias ارائه نشود، تمام مدخل‌های موجود در keystore مبدأ به keystore مقصد وارد می‌شوند. هر مدخل مقصد تحت همان alias مربوط به مدخل مبدأ ذخیره می‌شود. اگر مدخل مبدأ با یک گذرواژه محافظت شده باشد، از -srcstorepass برای بازیابی مدخل استفاده خواهد شد. اگر -srcstorepass ارائه نشده یا نادرست باشد، از کاربر درخواست وارد کردن گذرواژه می‌شود. اگر نوع یک مدخل keystore مبدأ در keystore مقصد پشتیبانی نشود، یا هنگام ذخیرهٔ یک مدخل در keystore مقصد خطایی رخ دهد، از کاربر خواسته می‌شود که یا از آن مدخل صرف‌نظر کرده و ادامه دهد یا خارج شود. مدخل مقصد با گذرواژهٔ مدخل مبدأ محافظت می‌شود. اگر alias مقصد از پیش در keystore مقصد وجود داشته باشد، به کاربر اعلان داده می‌شود تا یا روی مدخل بازنویسی کند یا یک مدخل جدید تحت نام alias متفاوتی بسازد. اگر گزینهٔ -noprompt داده شده باشد، برای یک alias مقصد جدید به کاربر اعلانی نشان داده نمی‌شود. مدخل‌های موجود با نام alias مقصد بازنویسی می‌شوند. از مدخل‌هایی که امکان وارد کردن آن‌ها وجود ندارد صرف‌نظر شده و یک هشدار نمایش داده می‌شود.
گزینه‌های دردسترس برای دستور -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]}: افزودن ارائه‌دهنده امنیتی با نام کامل کلاس (fully qualified class name) به‌همراه یک آرگومان پیکربندی اختیاری.
  • {-providerpath list}: مسیر کلاس (classpath) ارائه‌دهنده
  • {-v}: خروجی پرگو (verbose)
  • {-protected}: گذرواژه از طریق سازوکاری حفاظت‌شده ارائه می‌شود برای تولید یک درخواست امضای گواهی (CSR) با قالب PKCS #10 از دستور -certreq استفاده کنید. یک CSR برای ارسال به یک CA در نظر گرفته شده است. مرکز CA هویت درخواست‌کننده گواهی را (معمولاً به‌صورت آفلاین) احراز هویت کرده و یک گواهی یا زنجیره گواهی را بازمی‌گرداند تا جایگزین زنجیره گواهی موجود (در ابتدا یک گواهی خودامضا - self-signed) در keystore شود. کلید خصوصی مرتبط با alias برای ایجاد درخواست گواهی PKCS #10 استفاده می‌شود. برای دسترسی به کلید خصوصی، باید گذرواژه صحیح ارائه شود. اگر -keypass در خط فرمان ارائه نشود و با گذرواژه‌ای که برای محافظت از یکپارچگی keystore استفاده شده متفاوت باشد، از کاربر درخواست می‌شود آن را وارد کند. اگر -dname ارائه شود، به‌عنوان موضوع (subject) در CSR استفاده می‌شود. در غیر این صورت، نام متمایز X.500 مرتبط با alias استفاده خواهد شد. مقدار -sigalg الگوریتمی را مشخص می‌کند که باید برای امضای CSR استفاده شود. درخواست CSR در -file file ذخیره می‌شود. اگر فایلی مشخص نشود، CSR در -stdout خروجی داده خواهد شد. برای وارد کردن پاسخ دریافت شده از CA از دستور -importcert استفاده کنید.

گزینه‌های دردسترس برای دستور -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 برای خواندن یک گواهی از keystore که مرتبط با -alias alias است و ذخیره آن در -file file استفاده کنید. هنگامی که فایلی مشخص نشود، گواهی در stdout خروجی داده می‌شود. به‌طور پیش‌فرض، گواهی در کدگذاری باینری خروجی داده می‌شود. اگر گزینه -rfc مشخص شود، خروجی در قالب کدگذاری قابل‌چاپ تعریف‌شده توسط استاندارد کدگذاری گواهی اینترنت RFC 1421 خواهد بود. اگر -alias به یک گواهی معتمد (trusted certificate) اشاره کند، آن گواهی خروجی داده می‌شود. در غیر این صورت، -alias به یک مدخل کلید به‌همراه زنجیره گواهی مرتبط با آن اشاره می‌کند. در این حالت، نخستین گواهی در زنجیره بازگردانده می‌شود. این گواهی کلید عمومی نهادی را که توسط -alias مشخص شده احراز هویت می‌کند.
گزینه‌های دردسترس برای دستور -list عبارتند از:
  • {-rfc}: خروجی با سبک RFC
  • {-alias alias}: نام مستعار (alias) مدخل مورد پردازش
  • {-keystore keystore}: نام keystore
  • {-cacerts}: دسترسی به keystore مرجع cacerts
  • [-storepass arg]: گذرواژه keystore
  • {-storetype type}: نوع keystore
  • {-providername name}: نام ارائه‌دهنده (provider)
  • {-addprovider name [-providerarg arg]}: افزودن ارائه‌دهنده امنیتی بر اساس نام (مانند SunPKCS11) به‌همراه یک آرگومان پیکربندی اختیاری.
  • {-providerclass class [-providerarg arg] }: افزودن ارائه‌دهنده امنیتی با نام کامل کلاس (fully qualified class name) به‌همراه یک آرگومان پیکربندی اختیاری.
  • {-providerpath list}: مسیر کلاس (classpath) ارائه‌دهنده
  • {-v}: خروجی پرگو (verbose)
  • {-protected}: گذرواژه از طریق یک سازوکار حفاظت‌شده ارائه می‌شود از دستور -list برای چاپ محتوای مدخل keystore مشخص‌شده توسط -alias در stdout استفاده کنید. اگر -alias alias مشخص نشده باشد، محتویات کل keystore چاپ خواهد شد. به‌طور پیش‌فرض، این دستور اثرانگشت (fingerprint) از نوع SHA-256 گواهی را چاپ می‌کند. اگر گزینه -v مشخص شده باشد، گواهی در قالبی خوانا برای انسان، همراه با اطلاعات اضافی مانند مالک، صادرکننده، شماره سریال و هرگونه افزونه چاپ می‌شود. اگر گزینه -rfc مشخص شده باشد، محتوای گواهی با استفاده از قالب کدگذاری قابل‌چاپ، همان‌طور که توسط استاندارد کدگذاری گواهی Internet RFC 1421 تعریف شده است، چاپ می‌شود. نکته: شما نمی‌توانید هر دو گزینه -v و -rfc را در یک دستور مشخص کنید. در غیر این صورت، خطا گزارش خواهد شد.
گزینه‌های دردسترس برای دستور -printcert عبارتند از:
  • {-rfc}: خروجی با سبک RFC
  • {-file cert_file}: نام فایل ورودی
  • {-sslserver server[:port]}:: میزبان و درگاه سرور Secure Sockets Layer (SSL)
  • {-jarfile JAR_file}: فایل .jar امضاشده
  • {-keystore keystore}: نام keystore
  • {-trustcacerts}: اعتماد به گواهی‌های حاصل از cacerts
  • [-storepass arg]: گذرواژه keystore
  • {-storetype type}: نوع keystore
  • {-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 پشت دیوار آتش (firewall) قرار داشته باشد، گزینه‌های -J-Dhttps.proxyHost=proxyhost و -J-Dhttps.proxyPort=proxyport را می‌توان در خط فرمان برای تونل‌سازی پراکسی (proxy tunneling) مشخص کرد. نکته: این دستور می‌تواند مستقل از یک keystore استفاده شود. این دستور در صورتی که گواهی، یک گواهی مورد اعتماد در keystore کاربر (مشخص‌شده با -keystore) یا در keystore متعلق به cacerts (در صورت تعیین -trustcacerts) باشد، ضعف الگوریتم امضای گواهی را بررسی نمی‌کند.
گزینه‌های دردسترس برای دستور -printcertreq عبارتند از:
  • {-file file}: نام فایل ورودی
  • {-v}: خروجی پرگو از دستور -printcertreq برای چاپ محتوای یک درخواست گواهی در قالب PKCS #10 (که می‌تواند توسط دستور keytool -certreq تولید شود) استفاده کنید. این دستور، درخواست را از فایل می‌خواند. اگر فایلی وجود نداشته باشد، درخواست از ورودی استاندارد (standard input) خوانده می‌شود.
گزینه‌های دردسترس برای دستور -printcrl عبارتند از:
  • {-file crl}: نام فایل ورودی
  • {-keystore keystore}: نام keystore
  • {-trustcacerts}: اعتماد به گواهی‌های حاصل از cacerts
  • [-storepass arg]: گذرواژه keystore
  • {-storetype type}: نوع keystore
  • {-providername name}: نام ارائه‌دهنده
  • {-addprovider name [-providerarg arg]}: افزودن ارائه‌دهنده امنیتی بر اساس نام (مانند SunPKCS11) به‌همراه یک آرگومان پیکربندی اختیاری.
  • {-providerclass class [-providerarg arg]}: افزودن ارائه‌دهنده امنیتی با نام کامل کلاس به‌همراه یک آرگومان پیکربندی اختیاری.
  • {-providerpath list}: مسیر کلاس ارائه‌دهنده
  • {-protected}: گذرواژه از طریق سازوکار حفاظت‌شده ارائه می‌شود
  • {-v}: خروجی پرگو از دستور -printcrl برای خواندن فهرست ابطال گواهی (CRL یا Certificate Revocation List) از -file crl استفاده کنید. یک CRL فهرستی از گواهی‌های دیجیتالی است که توسط مرجع صدور گواهی (CA) صادرکننده آن‌ها باطل شده‌اند. مرجع CA فایل crl را تولید می‌کند. نکته: این دستور می‌تواند مستقل از یک keystore استفاده شود. این دستور تلاش می‌کند CRL را با استفاده از یک گواهی از keystore کاربر (مشخص‌شده با -keystore) یا 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}: مسیر کلاس ارائه‌دهنده
  • {-v}: خروجی پرگو برای تغییر گذرواژه‌ای که به منظور محافظت از یکپارچگی محتویات مخزن کلید استفاده می‌شود، از دستور -storepasswd استفاده کنید. گذرواژه جدید توسط -new arg تعیین می‌شود و باید دست‌کم شامل شش نویسه باشد.
موارد زیر گزینه‌های دردسترس برای دستور -keypasswd هستند:
  • {-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}: مسیر کلاس ارائه‌دهنده
  • {-v}: خروجی پرگو از دستور -keypasswd برای تغییر گذرواژه‌ای (که کلیدهای خصوصی/سری مشخص‌شده با -alias تحت حفاظت آن هستند) از -keypass old_keypass به -new new_keypass استفاده کنید. مقدار گذرواژه باید حداقل شامل شش نویسه باشد. اگر گزینه -keypass در خط فرمان مشخص نشده باشد و گذرواژه -keypass با گذرواژه مخزن کلید (-storepass arg) تفاوت داشته باشد، از کاربر درخواست می‌شود آن را وارد کند. اگر گزینه -new در خط فرمان مشخص نشده باشد، از کاربر خواسته می‌شود آن را وارد کند.
موارد زیر گزینه‌های دردسترس برای دستور -delete هستند:
  • [-alias alias]: نام مستعار مدخلی که باید پردازش شود
  • {-keystore keystore}: نام مخزن کلید
  • {-cacerts}: دسترسی به مخزن کلید cacerts
  • [-storepass arg]: گذرواژه مخزن کلید
  • {-storetype type}: نوع مخزن کلید
  • {-providername name}: نام ارائه‌دهنده
  • {-addprovider name [-providerarg arg]}: افزودن ارائه‌دهنده امنیتی بر اساس نام (مانند SunPKCS11) با یک آرگومان پیکربندی اختیاری.
  • {-providerclass class [-providerarg arg]}: افزودن ارائه‌دهنده امنیتی بر پایه نام کلاس کاملاً مشخص با یک آرگومان پیکربندی اختیاری.
  • {-providerpath list}: مسیر کلاس ارائه‌دهنده
  • {-v}: خروجی پرگو
  • {-protected}: گذرواژه از طریق یک سازوکار حفاظت‌شده ارائه شده است از دستور -delete برای حذف مدخل -alias alias از مخزن کلید استفاده کنید. در صورتی که در خط فرمان مشخص نشده باشد، مقدار alias از کاربر درخواست می‌شود.
موارد زیر گزینه‌های دردسترس برای دستور -changealias هستند:
  • {-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}: مسیر کلاس ارائه‌دهنده
  • {-v}: خروجی پرگو
  • {-protected}: گذرواژه از طریق یک سازوکار حفاظت‌شده ارائه شده است از دستور -changealias برای انتقال یک مدخل موجود در مخزن کلید از -alias alias به یک -destalias alias جدید استفاده کنید. اگر نام مستعار مقصد مشخص نشده باشد، دستور آن را از شما درخواست می‌کند. اگر مدخل اصلی با گذرواژه مدخل محافظت شده باشد، می‌توان گذرواژه را با گزینه -keypass ارائه کرد. اگر گذرواژه کلید ارائه نشده باشد، ابتدا -storepass (در صورت ارائه) آزمایش می‌شود. اگر این تلاش ناموفق باشد، از کاربر خواسته می‌شود تا گذرواژه را وارد کند.
موارد زیر گزینه‌های در دسترس برای دستور -showinfo هستند:
  • {-tls}: اطلاعات پیکربندی TLS را نمایش می‌دهد
  • {-v}: خروجی پرگو (مشروح) از دستور -showinfo برای نمایش اطلاعات مختلف مرتبط با امنیت استفاده کنید. گزینهٔ -tls پیکربندی‌های TLS، مانند فهرست پروتکل‌ها و مجموعه‌های رمز (cipher suites) فعال را نمایش می‌دهد.

می‌توانید از -version برای چاپ نسخهٔ برنامهٔ keytool استفاده کنید.

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

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

keytool --help

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

keytool -<command> --help

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

آرگومان -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 وجود نداشته باشد، ایجاد خواهد شد. برای اطلاعات بیشتر دربارهٔ JKS storetype، بخش KeyStore Implementation را در KeyStore aliases ببینید. توجه داشته باشید که جریان ورودی از گزینهٔ -keystore به متد KeyStore.load فرستاده می‌شود. اگر NONE به عنوان URL مشخص شود، یک جریان خالی (null stream) به متد 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) استفاده می‌شود.
برای تعیین نام فایل کلاس اصلی (master class) یک ارائه‌دهندهٔ خدمات رمزنگاری در صورتی که در فایل مشخصه‌های امنیتی فهرست نشده باشد، استفاده می‌شود.
برای تعیین مسیر کلاس (classpath) ارائه‌دهنده استفاده می‌شود.
همراه با گزینهٔ -addprovider یا -providerclass برای ارائهٔ یک آرگومان ورودی رشته‌ای اختیاری به سازندهٔ (constructor) نام class استفاده می‌شود.
هنگامی که یک گذرواژه باید از طریق یک مسیر احراز هویت حفاظت‌شده مانند یک پین‌خوان اختصاصی تعیین شود، این مقدار را true مشخص کنید. از آنجا که در دستور -importkeystore دو keystore دخیل هستند، دو گزینهٔ زیر، یعنی -srcprotected و -destprotected به ترتیب برای keystore مبدأ و مقصد ارائه شده‌اند.
نمایانگر یک افزونهٔ گواهی X.509 است. این گزینه می‌تواند در -genkeypair و -gencert برای گنجاندن افزونه‌ها درون گواهی تولیدشده، یا در -certreq برای نشان دادن این‌که چه افزونه‌هایی در درخواست گواهی تقاضا شده‌اند استفاده شود. این گزینه می‌تواند چندین بار تکرار شود. آرگومان name می‌تواند یک نام افزونهٔ پشتیبانی‌شده (بخش Supported Named Extensions را ببینید) یا یک شمارهٔ OID دلخواه باشد. آرگومان value، در صورت ارائه، نشان‌دهندهٔ آرگومان برای افزونه است. هنگامی که value حذف شود، از مقدار پیش‌فرض افزونه استفاده می‌شود یا خود افزونه نیازی به آرگومان ندارد. اصلاح‌کنندهٔ :critical، در صورت ارائه، بدین معناست که ویژگی isCritical در افزونه برابر با true است؛ در غیر این صورت، برابر با false خواهد بود. می‌توانید از :c به جای :critical استفاده کنید.
یک فایل گزینه‌های از پیش‌پیکربندی‌شده را مشخص می‌کند..SH "فایل گزینه‌های از پیش‌پیکربندی‌شده (PRE-CONFIGURED OPTIONS FILE)" یک فایل گزینه‌های از پیش‌پیکربندی‌شده، یک فایل مشخصات جاوا (Java properties) است که می‌توان آن را با گزینهٔ -conf مشخص کرد. هر مشخصه بیانگر گزینه(های) پیش‌فرض برای یکی از دستورات keytool با استفاده از "keytool.command_name" به عنوان نام مشخصه است. یک مشخصهٔ ویژه به نام "keytool.all" بیانگر گزینه(های) پیش‌فرضی است که بر همهٔ دستورات اعمال می‌شود. مقدار یک مشخصه می‌تواند شامل ${prop} باشد که به مشخصهٔ سیستمی مرتبط با آن بسط داده خواهد شد. اگر مقدار یک گزینه حاوی نویسه‌های فاصله باشد، باید درون علامت‌های نقل‌قول (" یا ') قرار گیرد. تمام نام‌های مشخصه‌ها باید با حروف کوچک باشند.

هنگامی که 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 (هنگام استفاده از -genkeypair و در صورتی که -keyalg برابر "DSA" باشد)
    3072 (هنگام استفاده از -genkeypair و در صورتی که -keyalg برابر "RSA"، "RSASSA-PSS" یا "DH" باشد)
    384 (هنگام استفاده از -genkeypair و در صورتی که -keyalg برابر "EC" باشد)
    56 (هنگام استفاده از -genseckey و در صورتی که -keyalg برابر "DES" باشد)
    168 (هنگام استفاده از -genseckey و در صورتی که -keyalg برابر "DESede" باشد)
-groupname
    ed25519 (هنگام استفاده از -genkeypair و در صورتی که -keyalg برابر "EdDSA" و اندازه کلید 255 باشد)
    x25519 (هنگام استفاده از -genkeypair و در صورتی که -keyalg برابر "XDH" و اندازه کلید 255 باشد)
-validity 90
-keystore <فایل با نام .keystore در دایرکتوری خانگی کاربر>
-destkeystore <فایل با نام .keystore در دایرکتوری خانگی کاربر>
-storetype <مقدار مشخصهٔ "keystore.type" در فایل مشخصات
    امنیتی، که توسط متد ایستای getDefaultType در
    java.security.KeyStore بازگردانده می‌شود>
-file
    stdin (در صورت خواندن)
    stdout (در صورت نوشتن)
-protected false

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

الگوریتم‌های امضای پیش‌فرض

keyalg اندازه کلید sigalg پیش‌فرض
DSA هر اندازه‌ای SHA256withDSA
RSA < 624 SHA256withRSA (اندازه کلید برای استفاده از SHA-384 بسیار کوچک است)
<= 7680 SHA384withRSA
> 7680 SHA512withRSA
EC < 512 SHA384withECDSA
>= 512 SHA512withECDSA
RSASSA-PSS < 624 RSASSA-PSS (با SHA-256، اندازه کلید برای استفاده
از SHA-384 بسیار کوچک است)
<= 7680 RSASSA-PSS (با SHA-384)
> 7680 RSASSA-PSS (با SHA-512)
EdDSA 255 Ed25519
448 Ed448
Ed25519 255 Ed25519
Ed448 448 Ed448
• 2
اندازه کلید که بر حسب بیت سنجیده می‌شود، با اندازه کلید خصوصی مطابقت
دارد.
این اندازه با مقدار گزینه‌های -keysize یا
-groupname، یا مقدار برگرفته از یک تنظیم پیش‌فرض تعیین
می‌شود.
• 2
یک الگوریتم امضای RSASSA-PSS از یک الگوریتم MessageDigest
به عنوان الگوریتم‌های درهم‌سازی (هش) و MGF1 خود استفاده می‌کند.
• 2
اگر نه -keysize و نه -groupname پیش‌فرضی برای یک
الگوریتم تعریف نشده باشد، ارائه‌دهنده امنیت یک تنظیم پیش‌فرض را انتخاب
خواهد کرد.
نکته:
برای بهبود امنیت اولیه، مقادیر پیش‌فرض keysize، groupname و نام‌های
الگوریتم امضا با هر انتشار JDK به‌طور دوره‌ای به مقادیر قوی‌تری
به‌روزرسانی می‌شوند.
اگر سازگاری با نسخه‌های قدیمی‌تر JDK اهمیت دارد، اطمینان حاصل کنید که
مقادیر پیش‌فرض توسط آن نسخه‌ها پشتیبانی می‌شوند.
همچنین می‌توانید با مسئولیت خودتان از گزینه‌های -keysize،
-groupname یا -sigalg برای بازنویسی مقادیر
پیش‌فرض استفاده کنید.
"افزونه‌های نام‌دار پشتیبانی‌شده (SUPPORTED NAMED EXTENSIONS)"
دستور keytool از این افزونه‌های نام‌دار پشتیبانی می‌کند.
نام‌ها به بزرگی و کوچکی حروف حساس نیستند.
BC یا BasicConstraints
مقادیر:
شکل کامل آن
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) یا
به سبک کمل‌کیس (مانند 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 باشد، مقدار آن تخلیهٔ شانزده‌شانزدهی
(hexadecimal 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
استفاده می‌شود و بیانگر یک استثنا است).
افزونه‌های درخواست‌شده به‌طور پیش‌فرض پذیرفته نمی‌شوند.
اگر علاوه بر گزینهٔ -ext honored، گزینهٔ -ext
نام‌دار یا OID دیگری ارائه شود، این افزونه به مواردی که پیش‌تر پذیرفته
شده‌اند افزوده می‌شود.
با این حال، اگر این نام (یا OID) در مقدار honored نیز ظاهر شود، آنگاه
مقدار و صفت بحرانی بودن (criticality) آن، مقدار موجود در درخواست را
بازنویسی می‌کند.
اگر افزونه‌ای از همان نوع چندین بار از طریق نام یا OID ارائه شود، تنها
آخرین افزونه استفاده خواهد شد.
افزونهٔ subjectKeyIdentifier همواره ایجاد می‌شود.
برای گواهی‌های غیر خودامضاشده، افزونهٔ authorityKeyIdentifier
ایجاد می‌شود..PP
احتیاط:
کاربران باید آگاه باشند که برخی از ترکیب‌های افزونه‌ها (و سایر
فیلدهای گواهی) ممکن است با استانداردهای اینترنت سازگار نباشند.
به بخش 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
این دستور مخزن کلید با نام mykeystore را در
دایرکتوری کاری (به شرط آنکه از قبل وجود نداشته باشد) ایجاد کرده و
گذرواژه مشخص‌شده توسط -keypass را به آن اختصاص می‌دهد.
این دستور یک جفت‌کلید عمومی/خصوصی برای هویتی تولید می‌کند که
نام متمایز (distinguished name) آن myname، mygroup،
mycompany و کد کشور دو حرفی آن
mycountry است.
دستور برای ایجاد کلیدها از الگوریتم تولید کلید RSA استفاده می‌کند؛ هر دو کلید
۳۰۷۲ بیتی هستند.
این دستور از الگوریتم امضای پیش‌فرض SHA384withRSA برای ایجاد
یک گواهی خودامضا (self-signed) که شامل کلید عمومی و اطلاعات
نام متمایز است، استفاده می‌کند.
این گواهی به مدت ۱۸۰ روز معتبر است و با
کلید خصوصی در یک مدخل 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"
نکته:
تولید جفت‌کلید، یک گواهی خودامضاشده (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"
برای وارد کردن یک گواهی برای CA، فرایند زیر را انجام دهید:
"1." 3
پیش از وارد کردن پاسخ گواهی از یک CA، به یک یا چند گواهی معتمد
در keystore خود یا در فایل پایگاه کلید cacerts نیاز دارید.
گزینهٔ -importcert را در دستورات (Commands) ببینید.
4
• 2
اگر پاسخ گواهی یک زنجیرهٔ گواهی است، به بالاترین گواهی این زنجیره
نیاز خواهید داشت؛ یعنی گواهی CA ریشه (root CA) که کلید عمومی مرجع CA را اعتبارسنجی می‌کند.
• 2
اگر پاسخ گواهی یک گواهی منفرد است، به گواهی مرجع CA صادرکننده (همان مرجعی که
آن را امضا کرده است) نیاز دارید. اگر آن گواهی خودامضاشده نباشد، به گواهی
امضاکنندهٔ آن نیاز خواهید داشت، و به همین ترتیب تا رسیدن به یک گواهی خودامضاشدهٔ CA ریشه.
پایگاه کلید cacerts همراه با مجموعه‌ای از گواهی‌های ریشه ارائه می‌شود که
توسط مراجع صدور گواهی در برنامه گواهی ریشه اوراکل جاوا (Oracle Java Root Certificate program)
[https://www.oracle.com/java/technologies/javase/carootcertsprogram.html] صادر شده‌اند.
اگر گواهی امضاشده‌ای از یک CA درخواست کنید و گواهی اعتبارسنجی‌کنندهٔ کلید عمومی آن
CA به cacerts اضافه نشده باشد، باید گواهی آن CA را به‌عنوان یک گواهی معتمد وارد کنید.
یک گواهی از طرف یک 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
"صادر کردن گواهی اعتبارسنج کلید عمومی (EXPORTING A CERTIFICATE THAT AUTHENTICATES THE PUBLIC KEY)"
نکته:
اگر از دستور jarsigner برای امضای یک فایل آرشیو جاوا (JAR) استفاده کرده‌اید، کلاینت‌هایی که از این فایل استفاده می‌کنند می‌خواهند امضای شما را اعتبارسنجی کنند.
یک راه برای اینکه کلاینت‌ها بتوانند هویت شما را اعتبارسنجی کنند این است که گواهی کلید عمومی شما را به عنوان یک مدخل مورد اعتماد در keystore خود وارد کنند.
سپس می‌توانید گواهی را صادر (export) کرده و در اختیار کلاینت‌های خود قرار دهید.
برای نمونه:
"1." 3
با وارد کردن دستور زیر، گواهی خود را در فایلی به نام myname.cer کپی کنید:
4
نکته:
در این مثال، مدخل دارای نام مستعار (alias) mykey است.
keytool -exportcert -alias mykey -file myname.cer
"2." 3
با در اختیار داشتن گواهی و فایل JAR امضاشده، یک کلاینت می‌تواند از دستور jarsigner برای اعتبارسنجی امضای شما استفاده کند.
"وارد کردن KEYSTORE (IMPORTING THE 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 (Keystore entries)
مخازن کلید می‌توانند انواع مختلفی از ورودی‌ها را داشته باشند.
دو نوع ورودی که بیشترین کاربرد را برای دستور keytool دارند، شامل موارد زیر هستند:
ورودی‌های کلید (Key entries): هر ورودی حامل اطلاعات کلید رمزنگاری بسیار حساس است که در قالبی محافظت‌شده برای جلوگیری از دسترسی غیرمجاز ذخیره می‌شود.
به طور معمول، کلید ذخیره‌شده در این نوع ورودی، یک کلید محرمانه (secret key) یا یک کلید خصوصی (private key) همراه با زنجیره گواهی برای کلید عمومی متناظر است.
بخش Certificate Chains را ببینید.
دستور keytool می‌تواند هر دو نوع ورودی را مدیریت کند، در حالی که ابزار jarsigner تنها نوع دوم ورودی را مدیریت می‌نماید، یعنی کلیدهای خصوصی و زنجیره‌های گواهی مرتبط با آن‌ها.
ورودی‌های گواهی معتمد (Trusted certificate entries): هر ورودی شامل یک گواهی کلید عمومی منفرد است که متعلق به طرف دیگری است.
این ورودی «گواهی معتمد» نامیده می‌شود زیرا مالک keystore اعتماد دارد که کلید عمومی موجود در گواهی، متعلق به هویتی است که توسط موضوع (مالک) گواهی مشخص شده است.
صادرکننده گواهی با امضای گواهی، این موضوع را تأیید می‌کند.
نام‌های مستعار Keystore (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 (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 را به عنوان فایلی با یک نوع (قالب) اختصاصی keystore به نام JKS پیاده می‌کند.
این قالب از هر کلید خصوصی با گذرواژه مجزای خودش محافظت کرده، و همچنین یکپارچگی کل keystore را با یک گذرواژه (احتمالاً متفاوت) محافظت می‌نماید.
پیاده‌سازی‌های keystore مبتنی بر ارائه‌دهنده (provider-based) هستند.
به طور مشخص‌تر، رابط‌های برنامه‌نویسی ارائه‌شده توسط KeyStore در قالب یک Service Provider Interface (SPI) پیاده‌سازی شده‌اند.
بدین معنا که یک کلاس انتزاعی متناظر به نام KeystoreSpi نیز در java.security package وجود دارد که متدهای Service Provider Interface را که ارائه‌دهندگان باید پیاده‌سازی کنند، تعریف می‌کند.
اصطلاح ارائه‌دهنده (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
لینوکس و macOS: 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 Standard می‌باشد.
این مورد با خط زیر در فایل مشخصه‌های امنیتی تعیین می‌شود:
keystore.type=pkcs12
برای اینکه ابزارها از پیاده‌سازی keystore دیگری غیر از مقدار پیش‌فرض استفاده کنند، می‌توانید آن خط را برای تعیین نوع متفاوتی از keystore تغییر دهید.
برای نمونه، اگر می‌خواهید از پیاده‌سازی keystore مربوط به Oracle به نام jks استفاده کنید، آن خط را به صورت زیر تغییر دهید:
keystore.type=jks
نکته:
بزرگی یا کوچکی حروف در نام‌گذاری نوع keystore اهمیتی ندارد.
برای نمونه، JKS همانند jks در نظر گرفته می‌شود.
گواهی (Certificate)
یک گواهی (یا گواهی کلید عمومی) بیانیه‌ای با امضای دیجیتال از سوی یک موجودیت (صادرکننده یا issuer) است که بیان می‌کند کلید عمومی و برخی اطلاعات دیگرِ یک موجودیت دیگر (موضوع یا subject) مقادیر مشخصی دارند.
اصطلاحات زیر با گواهی‌ها مرتبط هستند:
• 2
کلیدهای عمومی (Public Keys): این‌ها اعدادی مرتبط با یک موجودیت خاص هستند و هدف این است که برای هر کسی که نیاز به تعاملات مطمئن با آن موجودیت دارد، شناخته‌شده باشند.
از کلیدهای عمومی برای تأیید امضاها استفاده می‌شود.
• 2
دارای امضای دیجیتال (Digitally Signed): اگر داده‌ای دارای امضای دیجیتال باشد، همراه با هویت یک موجودیت و امضایی ذخیره می‌شود که ثابت می‌کند آن موجودیت از داده‌ها آگاهی دارد.
داده‌ها با امضا شدن توسط کلید خصوصیِ آن موجودیت، جعل‌ناپذیر می‌شوند.
• 2
هویت (Identity): روشی شناخته‌شده برای شناسایی یا آدرس‌دهی به یک موجودیت.
در برخی سیستم‌ها، هویت همان کلید عمومی است، و در برخی دیگر می‌تواند هر چیزی باشد؛ از یک UID در Oracle Solaris گرفته تا یک نشانی رایانامه یا یک نام متمایز در X.509.
• 2
امضا (Signature): یک امضا بر روی داده‌ها با استفاده از کلید خصوصی یک موجودیت محاسبه می‌شود.
امضاکننده، که در مورد یک گواهی با عنوان صادرکننده (issuer) نیز شناخته می‌شود.
• 2
کلیدهای خصوصی (Private Keys): این‌ها اعدادی هستند که فرض بر این است تنها برای همان موجودیت خاصی که کلید متعلق به آن است شناخته‌شده باشند (یعنی باید مخفی نگه داشته شوند).
کلیدهای خصوصی و عمومی به‌صورت جفت در تمام سیستم‌های رمزنگاری کلید عمومی (که به آن‌ها سیستم‌های رمزنگاری نامتقارن نیز گفته می‌شود) وجود دارند.
در یک سیستم رمزنگاری کلید عمومی معمول، مانند DSA، یک کلید خصوصی دقیقاً با یک کلید عمومی متناظر است.
از کلیدهای خصوصی برای محاسبه‌ی امضاها استفاده می‌شود.
• 2
موجودیت (Entity): یک موجودیت می‌تواند یک شخص، سازمان، برنامه، رایانه، کسب‌وکار، بانک یا هر چیز دیگری باشد که شما تا حدی به آن اعتماد دارید.
رمزنگاری کلید عمومی نیازمند دسترسی به کلیدهای عمومی کاربران است.
در یک محیط شبکه‌ای در مقیاس بزرگ، تضمین این‌که از پیش روابطی میان موجودیت‌های در حال ارتباط برقرار شده باشد، یا مخزن مورد اعتمادی شامل تمام کلیدهای عمومیِ استفاده‌شده وجود داشته باشد، غیرممکن است.
گواهی‌ها به‌عنوان راه‌حلی برای این مشکلِ توزیع کلید عمومی ابداع شدند.
اکنون یک مرجع صدور گواهی (CA یا Certification Authority) می‌تواند به‌عنوان شخص ثالث معتمد عمل کند.
مراجع 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 را وارد و صادر کند.
این دستور گواهی‌های v3 تولید می‌کند.
2
• 2
نسخه ۱ استاندارد X.509 از سال ۱۹۸۸ در دسترس بوده، به‌طور گسترده مستقر شده و عمومی‌ترین نسخه است.
• 2
نسخه ۲ استاندارد X.509 مفهوم شناسه‌های یکتای موضوع و صادرکننده را برای مدیریت احتمال استفاده مجدد از نام‌های موضوع یا صادرکننده در طول زمان معرفی کرد.
اکثر اسناد نمایه گواهی اکیداً توصیه می‌کنند که نام‌ها بازاستفاده نشوند و گواهی‌ها از شناسه‌های یکتا استفاده نکنند.
گواهی‌های نسخه ۲ کاربرد گسترده‌ای ندارند.
• 2
نسخه ۳ استاندارد X.509 جدیدترین نسخه است (۱۹۹۶) و از مفهوم افزونه‌ها (extensions) پشتیبانی می‌کند که در آن هر کسی می‌تواند یک افزونه تعریف کرده و آن را در گواهی بگنجاند.
برخی از افزونه‌های رایج عبارتند از: KeyUsage (استفاده از کلیدها را به اهداف خاصی مانند signing-only محدود می‌کند) و AlternativeNames (اجازه می‌دهد هویت‌های دیگری نیز با این کلید عمومی مرتبط شوند، برای مثال نام‌های DNS، نشانی‌های رایانامه، نشانی‌های IP).
افزونه‌ها می‌توانند بحرانی (critical) علامت‌گذاری شوند تا نشان دهند که افزونه باید بررسی و اعمال یا استفاده شود.
برای مثال، اگر گواهی دارای افزونه‌ی KeyUsage با علامت بحرانی و مقدارِ keyCertSign باشد، در هنگام ارائه در طول ارتباط SSL، باید رد شود زیرا افزونه‌ی گواهی مشخص می‌کند که کلید خصوصیِ مرتبط تنها باید برای امضای گواهی‌ها به کار رود و نه برای استفاده در SSL.
• 2
شماره سریال (Serial number): موجودیتی که گواهی را ایجاد کرده است، مسئول تخصیص یک شماره سریال به آن است تا آن را از سایر گواهی‌هایی که صادر می‌کند متمایز سازد.
این اطلاعات به روش‌های متعددی استفاده می‌شود.
برای مثال، هنگامی که یک گواهی باطل می‌شود، شماره سریال آن در یک فهرست ابطال گواهی (CRL) قرار می‌گیرد.
• 2
شناسه الگوریتم امضا (Signature algorithm identifier): این مورد الگوریتم استفاده‌شده توسط CA برای امضای گواهی را مشخص می‌کند.
• 2
نام صادرکننده (Issuer name): نام متمایز (Distinguished Name) استاندارد X.500 از موجودیتی که گواهی را امضا کرده است.
این معمولاً یک CA است.
استفاده از این گواهی به معنای اعتماد به موجودیتی است که این گواهی را امضا کرده است.
در برخی موارد، مانند گواهی‌های ریشه یا گواهی‌های CA بالاترین سطح، صادرکننده گواهیِ خود را امضا می‌کند.
• 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) موضوع اشاره دارند.
• 2
اطلاعات کلید عمومی موضوع (Subject public key information): این کلید عمومی موجودیت نام‌برده‌شده به همراه یک شناسه‌ی الگوریتم است که مشخص می‌کند این کلید به کدام سیستم رمزنگاری کلید عمومی و چه پارامترهای کلید مرتبطی تعلق دارد.
زنجیره‌های گواهی (Certificate Chains)
دستور keytool می‌تواند مدخل‌های کلید در keystore را ایجاد و مدیریت کند که هرکدام شامل یک کلید خصوصی و یک زنجیره گواهی مرتبط هستند.
اولین گواهی در زنجیره حاوی کلید عمومیِ متناظر با کلید خصوصی است.
هنگامی که کلیدها برای نخستین بار تولید می‌شوند، زنجیره معمولاً با یک عنصر واحد آغاز می‌شود؛ یک گواهی خودامضا (self-signed).
دستور -genkeypair را در بخش دستورات (Commands) ببینید.
گواهی خودامضا گواهی‌ای است که صادرکننده (امضاکننده) آن با موضوع (subject) یکسان است.
موضوع، موجودیتی است که کلید عمومی آن توسط گواهی احراز اصالت می‌شود.
هنگامی که دستور -genkeypair برای تولید یک جفت‌کلید عمومی/خصوصی جدید فراخوانی می‌شود، کلید عمومی را نیز درون یک گواهی خودامضا بسته‌بندی می‌کند (مگر اینکه گزینه‌ی -signer مشخص شده باشد).
بعداً، پس از اینکه یک درخواست امضای گواهی (CSR) با دستور -certreq ایجاد و به یک مرجع صدور گواهی (CA) ارسال شد، پاسخ از سوی CA با -importcert وارد شده و گواهی خودامضا با زنجیره‌ای از گواهی‌ها جایگزین می‌شود.
در انتهای (پایین) زنجیره، گواهی (پاسخ) صادرشده توسط CA قرار دارد که اصالت کلید عمومیِ موضوع را تأیید می‌کند.
گواهی بعدی در زنجیره گواهی‌ای است که کلید عمومی CA را احراز اصالت می‌کند.
در بسیاری از موارد، این یک گواهی خودامضا است؛ یعنی گواهی‌ای از سوی CA که اصالت کلید عمومی خود را تأیید می‌کند و آخرین گواهی در زنجیره است.
در موارد دیگر، ممکن است CA زنجیره‌ای از گواهی‌ها را بازگرداند.
در این حالت، پایین‌ترین گواهی در زنجیره یکسان است (گواهی امضاشده توسط CA که کلید عمومی مدخل کلید را تأیید می‌کند)، اما دومین گواهی در زنجیره گواهی‌ای است که توسط یک CA دیگر امضا شده و کلید عمومیِ مرجع CAیی را که به آن CSR فرستاده‌اید تأیید می‌کند.
گواهی بعدی در زنجیره گواهی‌ای است که کلید CA دوم را احراز اصالت می‌کند، و به همین ترتیب ادامه می‌یابد تا به یک گواهی ریشه‌ی (root) خودامضا برسد.
هر گواهی در زنجیره (پس از اولی)، کلید عمومیِ امضاکننده‌ی گواهی قبلی در زنجیره را احراز اصالت می‌کند.
بسیاری از مراجع CA تنها گواهی صادرشده را بدون زنجیره پشتیبان بازمی‌گردانند، به‌ویژه زمانی که یک ساختار سلسله‌مراتبی مسطح وجود دارد (بدون CAهای میانی).
در این حالت، زنجیره گواهی باید از روی اطلاعات گواهی‌های قابل‌اعتمادی که از پیش در keystore ذخیره شده‌اند تشکیل شود.
یک قالب پاسخ دیگر (که توسط استاندارد PKCS #7 تعریف شده است) علاوه بر گواهی صادرشده، شامل زنجیره گواهی پشتیبان نیز می‌شود.
هر دو قالب پاسخ می‌توانند توسط دستور keytool پردازش و مدیریت شوند.
گواهی CA بالاترین سطح (ریشه یا root) به‌صورت خودامضا است.
با این حال، اعتماد به کلید عمومی ریشه از خود گواهی ریشه حاصل نمی‌شود، بلکه از منابع دیگری همچون یک روزنامه به دست می‌آید.
این به این دلیل است که هر کسی می‌تواند یک گواهی خودامضا با نام متمایزِ مثلاً CA ریشه‌ی DigiCert تولید کند.
کلید عمومی CA ریشه به‌طور گسترده شناخته‌شده است.
تنها دلیلی که در یک گواهی ذخیره می‌شود این است که این قالب توسط اکثر ابزارها پشتیبانی و فهمیده می‌شود، بنابراین گواهی در این حالت صرفاً به‌عنوان وسیله‌ای برای انتقال کلید عمومی CA ریشه به کار می‌رود.
پیش از افزودن گواهی CA ریشه به keystore خود، باید آن را با گزینه‌ی -printcert مشاهده کرده و اثرانگشت (fingerprint) نمایش‌داده‌شده را با اثرانگشت معروفی که از یک روزنامه، وبگاه CA ریشه یا منابع معتبر دیگر به دست آمده است مقایسه کنید.
فایل گواهی‌های cacerts
یک فایل گواهی با نام cacerts در دایرکتوری ویژگی‌های امنیتی قرار دارد:
• 2
لینوکس و macOS: JAVA_HOME/lib/security
• 2
ویندوز: JAVA_HOME\lib\security
فایل cacerts نشان‌دهنده یک keystore در سطح کل سیستم حاوی گواهی‌های CA است.
مدیران سیستم می‌توانند با مشخص کردن jks به عنوان نوع keystore، این فایل را با دستور keytool پیکربندی و مدیریت کنند.
فایل keystore با نام cacerts همراه با مجموعه‌ای پیش‌فرض از گواهی‌های ریشهٔ CA عرضه می‌شود.
برای لینوکس، macOS و ویندوز، می‌توانید گواهی‌های پیش‌فرض را با دستور زیر فهرست کنید:
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 بیابید.
اگر مجوز ویرایش این فایل را ندارید، با مدیر سیستم خود تماس بگیرید.
استاندارد کدگذاری گواهی Internet RFC 1421
گواهی‌ها اغلب به جای کدگذاری باینری، با استفاده از قالب کدگذاری قابل‌چاپ تعریف‌شده توسط استاندارد اینترنتی RFC 1421 ذخیره می‌شوند.
این قالب گواهی، که با عنوان کدگذاری Base64 نیز شناخته می‌شود، خروجی گرفتن و ارسال گواهی‌ها به برنامه‌های دیگر را از طریق ایمیل یا سازوکارهای دیگر آسان می‌سازد.
گواهی‌های خوانده‌شده توسط دستورهای -importcert و -printcert می‌توانند در این قالب یا به صورت کدگذاری باینری باشند.
دستور -exportcert به‌طور پیش‌فرض گواهی را با کدگذاری باینری در خروجی می‌آورد، اما در صورت مشخص کردن گزینه -rfc، گواهی را در قالب کدگذاری قابل‌چاپ ارائه می‌دهد.
دستور -list به‌طور پیش‌فرض اثر انگشت SHA-256 یک گواهی را چاپ می‌کند.
اگر گزینه -v مشخص شده باشد، گواهی در قالبی خوانا برای انسان چاپ می‌شود.
اگر گزینه -rfc مشخص شده باشد، گواهی در قالب کدگذاری قابل‌چاپ خروجی داده می‌شود.
در قالب کدگذاری قابل‌چاپ، گواهی کدگذاری‌شده در ابتدا و انتها با متن زیر محدود می‌شود:
-----BEGIN CERTIFICATE-----
encoded certificate goes here.
-----END CERTIFICATE-----
نام‌های متمایز X.500
نام‌های متمایز 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
یک نمونه رشته نام متمایز عبارت است از:
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
اگر مقدار یک رشته نام متمایز حاوی کاما باشد، هنگام مشخص کردن رشته در خط فرمان باید قبل از کاما یک نویسه بک‌اسلش (\) قرار داده شود (اسکیپ شود)، مانند:
cn=Jack, ou=Java\, Product Development, o=Oracle, c=US
هرگز الزامی نیست که یک رشته نام متمایز را در خط فرمان مشخص کنید.
هنگامی که نام متمایز برای یک دستور مورد نیاز باشد اما در خط فرمان وارد نشده باشد، از کاربر برای هر یک از زیرمؤلفه‌ها درخواست ورودی می‌شود.
در این حالت، نیازی به اسکیپ کردن کاما با بک‌اسلش (\) نیست.
"هشدار وارد کردن گواهی‌های معتمد (IMPORTING TRUSTED CERTIFICATES WARNING)"
مهم: پیش از وارد کردن یک گواهی به عنوان گواهی مورد اعتماد،
حتماً آن را بسیار با دقت بررسی کنید.
مثال ویندوز:
ابتدا گواهی را با دستور -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
مثال لینوکس:
ابتدا گواهی را با دستور -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 که فایل‌های کلاس مخرب در درون آن قرار دارد.
نکته:
الزامی نیست که پیش از وارد کردن یک گواهی حتماً یک دستور -printcert
را اجرا کنید.
زیرا پیش از افزودن گواهی به فهرست گواهی‌های مورد اعتماد در keystore، دستور
-importcert اطلاعات گواهی را چاپ کرده و از شما می‌خواهد که آن را تأیید کنید.
سپس می‌توانید عملیات وارد کردن را متوقف سازید.
با این حال، تنها در صورتی می‌توانید این کار را انجام دهید که دستور -importcert
را بدون گزینهٔ -noprompt فراخوانی کرده باشید.
اگر گزینهٔ -noprompt مشخص شده باشد، هیچ تعاملی با کاربر وجود نخواهد داشت.
"هشدار گذرواژه‌ها (PASSWORDS WARNING)"
بیشتر دستوراتی که روی یک keystore عمل می‌کنند به گذرواژهٔ مخزن نیاز دارند.
برخی از دستورها به گذرواژهٔ کلید خصوصی/محرمانه احتیاج دارند.
گذرواژه‌ها را می‌توان در خط فرمان در گزینه‌های
-storepass و -keypass مشخص کرد.
با این حال، یک گذرواژه نباید در خط فرمان یا در یک اسکریپت مشخص شود،
مگر اینکه صرفاً برای آزمایش باشد یا اینکه در یک سامانهٔ امن قرار داشته باشید.
هنگامی که یک گزینهٔ گذرواژهٔ الزامی را در خط فرمان مشخص نکنید،
اعلان برای وارد کردن آن به شما نمایش داده می‌شود..SH "هشدار انطباق گواهی (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 تعریف کرده است که مشخص می‌کند چه مقادیر و ترکیبی از مقادیر
برای فیلدها و افزونه‌های (extensions) گواهی معتبر هستند.
دستور keytool تمام این قوانین را اعمال نمی‌کند، بنابراین می‌تواند
گواهی‌هایی تولید کند که با استاندارد مطابقت ندارند؛ مانند گواهی‌های
خودامضاشده (self-signed) که برای اهداف آزمایش داخلی استفاده می‌شوند.
گواهی‌هایی که با استاندارد مطابقت ندارند ممکن است توسط JDK یا سایر
برنامه‌ها رد شوند.
کاربران باید اطمینان حاصل کنند که گزینه‌های صحیحی را برای
-dname، -ext و غیره فراهم می‌کنند.
"وارد کردن یک گواهی معتمد جدید (IMPORT A NEW TRUSTED CERTIFICATE)"
پیش از افزودن گواهی به keystore، دستور keytool با تلاش
برای ساخت یک زنجیره اعتماد (chain of trust) از آن گواهی تا یک گواهی
خودامضاشده (متعلق به یک CA ریشه)، با استفاده از گواهی‌های معتمدی که
از قبل در keystore موجود هستند، آن را اعتبارسنجی می‌کند.
اگر گزینهٔ -trustcacerts مشخص شده باشد، گواهی‌های اضافی
برای زنجیره اعتماد در نظر گرفته می‌شوند، به‌ویژه گواهی‌های موجود در
فایلی به نام cacerts.
اگر دستور keytool نتواند یک مسیر اعتماد از گواهی مورد نظر
برای وارد شدن تا یک گواهی خودامضاشده (چه از keystore یا از فایل
cacerts) برقرار کند، اطلاعات گواهی چاپ می‌شود و از کاربر
خواسته می‌شود تا با مقایسهٔ اثرانگشت‌های نمایش‌داده‌شده با
اثرانگشت‌های به‌دست‌آمده از یک منبع اطلاعاتی دیگر (معتمد)، که ممکن است
مالک گواهی باشد، آن را تأیید کند.
بسیار دقت کنید تا قبل از وارد کردن گواهی به‌عنوان یک گواهی معتمد، از
معتبر بودن آن اطمینان حاصل نمایید.
سپس کاربر این گزینه را دارد که عملیات وارد کردن را لغو کند.
اگر گزینهٔ -noprompt مشخص شده باشد، هیچ تعاملی با کاربر
صورت نخواهد گرفت.
"وارد کردن پاسخ گواهی (IMPORT A CERTIFICATE REPLY)"
هنگامی که یک پاسخ گواهی (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، ترجیح داده می‌شود.
2026 JDK 26.0.2.1