| KEYTOOL(1) | JDK Commands | KEYTOOL(1) |
نام (NAME)
keytool - ابزار مدیریت کلیدها و گواهیهای امنیتی در جاوا (نسخه ۲۵)
خلاصه دستور (SYNOPSIS)
keytool [دستورات]
- دستورات
- دستورات keytool شامل موارد زیر است:
- -certreq: ایجاد یک درخواست گواهی (Certificate Request)
- -changealias: تغییر نام مستعار (alias) یک مدخل
- -delete: حذف یک مدخل
- -exportcert: صدور (Export) گواهی
- -genkeypair: تولید یک جفتکلید (عمومی و خصوصی)
- -genseckey: تولید یک کلید مخفی (Secret Key)
- -gencert: تولید یک گواهی از روی یک درخواست گواهی
- -importcert: وارد کردن (Import) یک گواهی یا زنجیره گواهی
- -importpass: وارد کردن یک گذرواژه
- -importkeystore: وارد کردن یک یا تمام مدخلها از یک انبار کلید (Keystore) دیگر
- -keypasswd: تغییر گذرواژه کلید مربوط به یک مدخل
- -list: فهرست کردن مدخلهای موجود در انبار کلید
- -printcert: چاپ محتوای یک گواهی
- -printcertreq: چاپ محتوای یک درخواست گواهی
- -printcrl: چاپ محتوای یک فایل فهرست ابطال گواهی (CRL)
- -storepasswd: تغییر گذرواژه انبار کلید
- -showinfo: نمایش اطلاعات مرتبط با امنیت
- -version: چاپ نسخه برنامه
برای مشاهده شرح این دستورات به همراه گزینههای آنها، بخش دستورات و گزینهها را ببینید.
توضیحات (DESCRIPTION)
دستور keytool یک ابزار مدیریت کلید و گواهی است. این ابزار به کاربران امکان میدهد جفتکلیدهای عمومی/خصوصی خود و گواهیهای مرتبط را به منظور استفاده در خوداحرازهویت (جایی که کاربر خود را به سایر کاربران و سرویسها احراز هویت میکند) یا خدمات یکپارچگی داده و احراز هویت از طریق امضاهای دیجیتال مدیریت کنند. دستور keytool همچنین به کاربران اجازه میدهد کلیدهای عمومی طرفهای ارتباطی خود را (در قالب گواهیها) ذخیره موقت (Cache) کنند.
یک گواهی، بیانیهای با امضای دیجیتال از سوی یک هویت (شخص، شرکت و غیره) است که بیان میکند کلید عمومی (و برخی اطلاعات دیگر) هویت دیگر دارای مقداری مشخص است. هنگامی که دادهها به صورت دیجیتالی امضا میشوند، امضا میتواند برای بررسی یکپارچگی داده و اصالت آن اعتبارسنجی شود. یکپارچگی به این معناست که دادهها دستکاری یا اصلاح نشدهاند، و اصالت به این معناست که دادهها از سوی همان فردی آمده که ادعای ایجاد و امضای آن را دارد.
دستور keytool همچنین به کاربران اجازه میدهد کلیدهای مخفی و عبارتهای عبور مورد استفاده در رمزگذاری و رمزگشایی متقارن (استاندارد رمزگذاری دادهها یا DES) را مدیریت کنند. این ابزار همچنین میتواند سایر اطلاعات امنیتی را نمایش دهد.
دستور keytool کلیدها و گواهیها را در یک انبار کلید (Keystore) ذخیره میکند.
دستور keytool از مشخصههای امنیتی jdk.certpath.disabledAlgorithms و jdk.security.legacyAlgorithms برای تعیین الگوریتمهایی که ریسک امنیتی دارند استفاده میکند. هنگام استفاده از الگوریتمهای غیرفعال یا قدیمی، هشدارهایی صادر میشود. مشخصههای امنیتی jdk.certpath.disabledAlgorithms و jdk.security.legacyAlgorithms در فایل java.security (واقع در دایرکتوری $JAVA_HOME/conf/security کیت توسعه جاوا) تعریف شدهاند.
نکات مربوط به دستورات و گزینهها (COMMAND AND OPTION NOTES)
نکات زیر در مورد توضیحات بخش دستورات و گزینهها صدق میکند:
- نام تمامی دستورات و گزینهها با علامت خط تیره (-) شروع میشود.
- در هر اجرا فقط یک دستور میتواند مشخص شود.
- گزینههای هر دستور را میتوان به هر ترتیبی ارائه داد.
- دو نوع گزینه وجود دارد: تکمقداری که باید فقط یک بار ارائه شود. اگر یک گزینه تکمقداری چندین بار ارائه شود، مقدار آخرین مورد استفاده میشود. نوع دیگر چندمقداری است که میتواند چندین بار ارائه شود و از تمام مقادیر آن استفاده خواهد شد. تنها گزینه چندمقداری که در حال حاضر پشتیبانی میشود گزینه -ext برای تولید پسوندهای گواهی X.509v3 است.
- تمام مواردی که مورب نبوده یا داخل آکولاد ({ }) یا قلاب ([ ]) قرار ندارند، باید دقیقاً به همان صورت درج شوند.
- آکولادها در اطراف یک گزینه نشاندهنده آن است که در صورت عدم تعیین گزینه در خط فرمان، یک مقدار پیشفرض استفاده میشود. آکولادها همچنین در اطراف گزینههای -v، -rfc و -J استفاده میشوند که تنها هنگام درج در خط فرمان معنا دارند و فاقد مقدار پیشفرض هستند.
- قلابها در اطراف یک گزینه نشاندهنده آن است که اگر گزینه در خط فرمان مشخص نشود، از کاربر برای مقدار آن سوال خواهد شد. برای گزینه -keypass، اگر آن را در خط فرمان مشخص نکنید، دستور keytool ابتدا تلاش میکند از گذرواژه انبار کلید برای بازیابی کلید خصوصی/مخفی استفاده کند. اگر این تلاش با شکست مواجه شود، دستور keytool گذرواژه کلید خصوصی/مخفی را از شما درخواست میکند.
- موارد با حروف مورب (مقادیر گزینهها) نشاندهنده مقادیر واقعی هستند که باید فراهم شوند. برای مثال، فرمت دستور -printcert به این صورت است:
keytool -printcert {-file cert_file} {-v}
هنگام اجرای دستور -printcert، مقدار cert_file را با نام واقعی فایل جایگزین کنید:
keytool -printcert -file VScert.cer
- •
- مقادیر گزینهها در صورتی که حاوی فاصله (space) باشند باید داخل علامت نقلقول قرار گیرند.
دستورات و گزینهها (COMMANDS AND OPTIONS)
دستورات keytool و گزینههای آنها را میتوان بر اساس وظایفی که انجام میدهند دستهبندی کرد.
دستورات ایجاد یا افزودن داده به انبار کلید:
- -gencert
- -genkeypair
- -genseckey
- -importcert
- -importpass
دستورات وارد کردن محتوا از یک انبار کلید دیگر:
- •
- -importkeystore
دستورات ایجاد درخواست گواهی:
- •
- -certreq
دستورات صدور داده:
- •
- -exportcert
دستورات نمایش دادهها:
- -list
- -printcert
- -printcertreq
- -printcrl
دستورات مدیریت انبار کلید:
- -storepasswd
- -keypasswd
- -delete
- -changealias
دستورات نمایش اطلاعات مرتبط با امنیت:
- •
- -showinfo
دستورات نمایش نسخه برنامه:
- •
- -version
دستورات ایجاد یا افزودن داده به انبار کلید (COMMANDS FOR CREATING OR ADDING DATA TO THE KEYSTORE)
- -gencert
- گزینههای موجود برای دستور -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}: نام انبار کلید
- [-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]}: افزودن ارائهدهنده امنیت با نام کلاس واجد شرایط کامل (Fully Qualified Class Name) با یک آرگومان پیکربندی اختیاری.
برای مثال، اگر MyProvider یک ارائهدهنده قدیمی باشد که از طریق بازتاب بارگیری میشود:
keytool -providerclass com.example.MyProvider ...
- {-providerpath list}: مسیر کلاس ارائهدهنده
- {-v}: خروجی با جزئیات کامل (Verbose)
- {-protected}: گذرواژه از طریق سازوکار محافظتشده ارائه میشود
از دستور -gencert برای تولید گواهی در پاسخ به یک فایل درخواست گواهی (که میتواند توسط دستور keytool -certreq ایجاد شود) استفاده کنید. دستور درخواست را از infile یا در صورت حذف، از ورودی استاندارد میخواند، آن را با استفاده از کلید خصوصی نام مستعار امضا میکند و گواهی X.509 را در outfile یا در صورت حذف، در خروجی استاندارد مینویسد. هنگامی که -rfc مشخص شود، قالب خروجی PEM با کدگذاری Base64 خواهد بود؛ در غیر این صورت، یک فایل دودویی DER ایجاد میشود. مقدار -sigalg الگوریتمی را که باید برای امضای گواهی استفاده شود مشخص میکند. آرگومان startdate زمان و تاریخ شروع اعتبار گواهی است. آرگومان days تعداد روزهایی را که گواهی باید معتبر در نظر گرفته شود مشخص میکند. هنگامی که dname ارائه شود، به عنوان موضوع (Subject) گواهی تولیدشده استفاده میشود؛ در غیر این صورت، از موضوع موجود در درخواست گواهی استفاده خواهد شد. مقدار -ext نشان میدهد چه پسوندهای X.509 در گواهی تعبیه خواهند شد. برای دستور زبان -ext بخش گزینههای عمومی دستورات را بخوانید. گزینه -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 را امضا میکند که همگی خودصادرشده هستند: -
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
- گزینههای موجود برای دستور -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]: گذرواژه انبار کلید
- {-storetype type}: نوع انبار کلید
- {-providername name}: نام ارائهدهنده امنیت
- {-addprovider name [-providerarg arg]}: افزودن ارائهدهنده امنیت با نام (مانند SunPKCS11) به همراه آرگومان پیکربندی اختیاری.
- {-providerclass class [-providerarg arg] }: افزودن ارائهدهنده امنیت با نام کلاس واجد شرایط کامل با یک آرگومان پیکربندی اختیاری.
- {-providerpath list}: مسیر کلاس ارائهدهنده
- {-v}: خروجی با جزئیات کامل
- {-protected}: گذرواژه از طریق سازوکار محافظتشده ارائه میشود
از دستور -genkeypair برای تولید یک جفتکلید (یک کلید عمومی و کلید خصوصی مرتبط) استفاده کنید. هنگامی که گزینه -signer مشخص نشده باشد، کلید عمومی در یک گواهی خودامضاشده X.509 v3 پیچیده شده و به عنوان یک زنجیره گواهی تکعضوی ذخیره میشود. هنگامی که گزینه -signer مشخص شود، گواهی جدیدی تولید شده و توسط امضاکننده تعیینشده امضا میشود و به عنوان یک زنجیره گواهی چندعضوی (شامل خود گواهی تولیدشده و زنجیره گواهی امضاکننده) ذخیره میشود. زنجیره گواهی و کلید خصوصی در یک مدخل جدید انبار کلید ذخیره میشوند که با نام مستعار آن شناسایی میشود. مقدار -keyalg الگوریتم مورد استفاده برای تولید جفتکلید را مشخص میکند. مقدار -keysize اندازه هر کلید تولیدشده را مشخص میکند. مقدار -groupname گروه نامگذاریشده (برای مثال، نام استاندارد یا از پیشتعریفشده یک منحنی بیضوی) کلید تولیدشده را مشخص میکند. هنگامی که مقدار -keysize ارائه شود، برای مقداردهی اولیه یک شیء KeyPairGenerator با استفاده از متد initialize(int keysize) استفاده خواهد شد. هنگامی که مقدار -groupname ارائه شود، برای مقداردهی اولیه یک شیء KeyPairGenerator با استفاده از متد initialize(AlgorithmParameterSpec params) که در آن params برابر با new NamedParameterSpec(groupname) است استفاده خواهد شد. تنها یکی از دو گزینه -groupname و -keysize میتواند مشخص شود. اگر یک الگوریتم دارای چندین گروه نامگذاریشده با اندازه کلید یکسان باشد، معمولاً باید از گزینه -groupname استفاده شود. در این حالت، اگر -keysize مشخص شود، انتخاب گروه نامگذاریشده هنگام تولید جفتکلید بر عهده ارائهدهنده امنیت خواهد بود. مقدار -sigalg الگوریتم مورد استفاده برای امضای گواهی را مشخص میکند. این الگوریتم باید با مقدار -keyalg سازگار باشد. مقدار -signer نام مستعار یک PrivateKeyEntry برای امضاکنندهای را مشخص میکند که از قبل در انبار کلید وجود دارد. این گزینه برای امضای گواهی با کلید خصوصی امضاکننده استفاده میشود. این امر به ویژه برای الگوریتمهای توافق کلید (مانند مواردی که مقدار -keyalg برابر با XDH، X25519، X448 یا DH است) مفید است، زیرا این کلیدها نمیتوانند برای امضاهای دیجیتال استفاده شوند و بنابراین گواهی خودامضاشده برای آنها قابل ایجاد نیست. مقدار -signerkeypass گذرواژه کلید خصوصی امضاکننده را مشخص میکند. اگر کلید خصوصی مدخل امضاکننده با گذرواژهای متفاوت از گذرواژه انبار کلید محافظت شده باشد، میتوان این گزینه را مشخص کرد. مقدار -dname نام متمایز X.500 مرتبط با مقدار -alias را مشخص میکند. اگر گزینه -signer مشخص نشود، فیلدهای صادرکننده (issuer) و موضوع (subject) گواهی خودامضاشده با نام متمایز مشخصشده مقداردهی میشوند. اگر گزینه -signer مشخص شود، فیلد موضوع گواهی با نام متمایز مشخصشده و فیلد صادرکننده با فیلد موضوع گواهی امضاکننده مقداردهی میشود. اگر نام متمایز در خط فرمان ارائه نشود، از کاربر درخواست خواهد شد. مقدار -keypass گذرواژهای است که برای محافظت از کلید خصوصی جفتکلید تولیدشده استفاده میشود. اگر گذرواژهای ارائه نشود، از کاربر درخواست خواهد شد. اگر در اعلان کلید Return (Enter) را فشار دهید، گذرواژه کلید برابر با گذرواژه انبار کلید تنظیم میشود. مقدار -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
- گزینههای موجود برای دستور -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 برای تولید یک کلید مخفی و ذخیره آن در یک مدخل جدید KeyStore.SecretKeyEntry که با alias شناسایی میشود استفاده کنید. مقدار -keyalg الگوریتم مورد استفاده برای تولید کلید مخفی را مشخص میکند و مقدار -keysize اندازه کلید تولیدشده را تعیین میکند. مقدار -keypass گذرواژهای است که از کلید مخفی محافظت میکند. اگر گذرواژهای ارائه نشود، از کاربر درخواست خواهد شد. اگر در اعلان کلید Return را فشار دهید، گذرواژه کلید برابر با گذرواژه مورد استفاده برای -keystore تنظیم میشود. مقدار -keypass باید حداقل دارای شش کاراکتر باشد.
- -importcert
- گزینههای موجود برای دستور -importcert به شرح زیر است:
- {-noprompt}: عدم نمایش اعلان تعاملی
- {-trustcacerts}: اعتماد به گواهیهای موجود در cacerts
- {-protected}: گذرواژه از طریق سازوکار محافظتشده ارائه میشود
- {-alias alias}: نام مستعار مدخل مورد پردازش
- {-file file}: نام فایل ورودی
- [-keypass arg]: گذرواژه کلید
- {-keystore keystore}: نام انبار کلید
- {-cacerts}: دسترسی به انبار کلید cacerts
- [-storepass arg]: گذرواژه انبار کلید
- {-storetype type}: نوع انبار کلید
- {-providername name}: نام ارائهدهنده امنیت
- {-addprovider name [-providerarg arg]}: افزودن ارائهدهنده امنیت با نام (مانند SunPKCS11) به همراه آرگومان پیکربندی اختیاری.
- {-providerclass class [-providerarg arg]}: افزودن ارائهدهنده امنیت با نام کلاس واجد شرایط کامل با یک آرگومان پیکربندی اختیاری.
- {-providerpath list}: مسیر کلاس ارائهدهنده
- {-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 را در بخش دستورات ایجاد درخواست گواهی ببینید. نوع عملیات وارد کردن توسط مقدار گزینه -alias مشخص میشود. اگر نام مستعار به مدخل کلید اشاره نکند، دستور keytool فرض میکند که در حال افزودن یک مدخل گواهی مورد اعتماد هستید. در این حالت، نام مستعار نباید از قبل در انبار کلید وجود داشته باشد. اگر نام مستعار وجود داشته باشد، دستور keytool خطایی صادر میکند زیرا یک گواهی مورد اعتماد از قبل برای آن نام مستعار وجود دارد و گواهی را وارد نمیکند. اگر -alias به یک مدخل کلید اشاره کند، دستور keytool فرض میکند که در حال وارد کردن پاسخ گواهی هستید.
- -importpass
- گزینههای موجود برای دستور -importpass به شرح زیر است:
- {-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}: گذرواژه از طریق سازوکار محافظتشده ارائه میشود
از دستور -importpass برای وارد کردن یک عبارت عبور و ذخیره آن در یک مدخل جدید KeyStore.SecretKeyEntry که با -alias شناسایی میشود استفاده کنید. عبارت عبور میتواند از طریق جریان ورودی استاندارد ارائه شود؛ در غیر این صورت از کاربر درخواست خواهد شد. گزینه -keypass گذرواژهای برای محافظت از عبارت عبور واردشده فراهم میکند. اگر گذرواژهای ارائه نشود، از کاربر درخواست خواهد شد. اگر در اعلان کلید Return را فشار دهید، گذرواژه کلید برابر با گذرواژه مورد استفاده برای keystore تنظیم میشود. مقدار -keypass باید حداقل دارای شش کاراکتر باشد.
دستورات وارد کردن محتوا از یک انبار کلید دیگر (COMMANDS FOR IMPORTING CONTENTS FROM ANOTHER KEYSTORE)
- -importkeystore
- گزینههای موجود برای دستور -importkeystore به شرح زیر است:
- -srckeystore keystore: نام انبار کلید مبدأ
- {-destkeystore keystore}: نام انبار کلید مقصد
- {-srcstoretype type}: نوع انبار کلید مبدأ
- {-deststoretype type}: نوع انبار کلید مقصد
- [-srcstorepass arg]: گذرواژه انبار کلید مبدأ
- [-deststorepass arg]: گذرواژه انبار کلید مقصد
- {-srcprotected}: گذرواژه انبار کلید مبدأ محافظتشده است
- {-destprotected}: گذرواژه انبار کلید مقصد محافظتشده است
- {-srcprovidername name}: نام ارائهدهنده انبار کلید مبدأ
- {-destprovidername name}: نام ارائهدهنده انبار کلید مقصد
- {-srcalias alias}: نام مستعار مبدأ
- {-destalias alias}: نام مستعار مقصد
- [-srckeypass arg]: گذرواژه کلید مبدأ
- [-destkeypass arg]: گذرواژه کلید مقصد
- {-noprompt}: عدم نمایش اعلان تعاملی
- {-addprovider name [-providerarg arg]}: افزودن ارائهدهنده امنیت با نام (مانند SunPKCS11) به همراه آرگومان پیکربندی اختیاری.
- {-providerclass class [-providerarg arg]}: افزودن ارائهدهنده امنیت با نام کلاس واجد شرایط کامل با یک آرگومان پیکربندی اختیاری
- {-providerpath list}: مسیر کلاس ارائهدهنده
- {-v}: خروجی با جزئیات کامل
نکته: این خط اول تمام گزینهها است:
-srckeystore keystore -destkeystore keystore
از دستور -importkeystore برای وارد کردن یک مدخل یا تمام مدخلها از یک انبار کلید مبدأ به یک انبار کلید مقصد استفاده کنید.
نکته: اگر هنگام استفاده از دستور keytool -importkeystore گزینه -destkeystore را مشخص نکنید، انبار کلید پیشفرض مورد استفاده $HOME/.keystore خواهد بود.
هنگامی که گزینه -srcalias ارائه شود، دستور تنها مدخل مشخصشده با آن نام مستعار را به انبار کلید مقصد وارد میکند. اگر نام مستعار مقصد با -destalias ارائه نشود، از -srcalias به عنوان نام مستعار مقصد استفاده میشود. اگر مدخل مبدأ با گذرواژه محافظت شده باشد، از -srckeypass برای بازیابی مدخل استفاده میشود. اگر -srckeypass ارائه نشود، دستور keytool تلاش میکند از -srcstorepass برای بازیابی مدخل استفاده کند. اگر -srcstorepass ارائه نشده یا نادرست باشد، گذرواژه از کاربر پرسیده میشود. مدخل مقصد با -destkeypass محافظت میشود. اگر -destkeypass ارائه نشود، مدخل مقصد با گذرواژه مدخل مبدأ محافظت خواهد شد. برای مثال، اکثر ابزارهای شخص ثالث نیازمند یکسان بودن storepass و keypass در انبار کلید PKCS #12 هستند. برای ایجاد یک انبار کلید PKCS#12 برای این ابزارها، همیشه مقداری برای -destkeypass تعیین کنید که با -deststorepass یکسان باشد. اگر گزینه -srcalias ارائه نشود، تمام مدخلهای انبار کلید مبدأ به انبار کلید مقصد وارد میشوند. هر مدخل مقصد تحت همان نام مستعار مدخل مبدأ ذخیره میشود. اگر مدخل مبدأ با گذرواژه محافظت شده باشد، از -srcstorepass برای بازیابی مدخل استفاده میشود. اگر -srcstorepass ارائه نشده یا نادرست باشد، گذرواژه از کاربر پرسیده میشود. اگر نوع یک مدخل انبار کلید مبدأ در انبار کلید مقصد پشتیبانی نشود، یا اگر هنگام ذخیره یک مدخل در انبار کلید مقصد خطایی رخ دهد، از کاربر پرسیده میشود که آیا مایل به رد کردن مدخل و ادامه است یا خروج از برنامه. مدخل مقصد با گذرواژه مدخل مبدأ محافظت میشود. اگر نام مستعار مقصد از قبل در انبار کلید مقصد وجود داشته باشد، از کاربر پرسیده میشود که آیا مدخل رونویسی شود یا یک مدخل جدید با نام مستعار متفاوت ایجاد گردد. اگر گزینه -noprompt ارائه شود، از کاربر برای نام مستعار جدید سوال نخواهد شد. مدخلهای موجود با نام مستعار مقصد رونویسی میشوند. مدخلهایی که قابل وارد کردن نباشند نادیده گرفته شده و هشداری نمایش داده میشود.
دستورات ایجاد درخواست گواهی (COMMANDS FOR GENERATING A CERTIFICATE REQUEST)
- -certreq
- گزینههای موجود برای دستور -certreq به شرح زیر است:
- {-alias alias}: نام مستعار مدخل مورد پردازش
- {-sigalg alg}: نام الگوریتم امضا
- {-file file}: نام فایل خروجی
- [ -keypass arg]: گذرواژه کلید
- {-keystore keystore}: نام انبار کلید
- {-dname name}: نام متمایز (Distinguished Name)
- {-ext value}: پسوند X.509
- [-storepass arg]: گذرواژه انبار کلید
- {-storetype type}: نوع انبار کلید
- {-providername name}: نام ارائهدهنده امنیت
- {-addprovider name [-providerarg arg]}: افزودن ارائهدهنده امنیت با نام (مانند SunPKCS11) به همراه آرگومان پیکربندی اختیاری.
- {-providerclass class [-providerarg arg]}: افزودن ارائهدهنده امنیت با نام کلاس واجد شرایط کامل با یک آرگومان پیکربندی اختیاری.
- {-providerpath list}: مسیر کلاس ارائهدهنده
- {-v}: خروجی با جزئیات کامل
- {-protected}: گذرواژه از طریق سازوکار محافظتشده ارائه میشود
از دستور -certreq برای ایجاد یک درخواست امضای گواهی (CSR) با استفاده از قالب PKCS #10 استفاده کنید. یک CSR به منظور ارسال به مرجع صدور گواهی (CA) ایجاد میشود. مرجع CA درخواستکننده گواهی را (معمولاً به صورت برونخط) احراز هویت کرده و یک گواهی یا زنجیره گواهی بازمیگرداند تا جایگزین زنجیره گواهی موجود (در ابتدا یک گواهی خودامضاشده) در انبار کلید شود. کلید خصوصی مرتبط با alias برای ایجاد درخواست گواهی PKCS #10 استفاده میشود. برای دسترسی به کلید خصوصی باید گذرواژه صحیح ارائه شود. اگر -keypass در خط فرمان ارائه نشود و متفاوت از گذرواژه مورد استفاده برای محافظت از یکپارچگی انبار کلید باشد، از کاربر درخواست خواهد شد. اگر -dname ارائه شود، به عنوان موضوع (Subject) در CSR استفاده میشود؛ در غیر این صورت، از نام متمایز X.500 مرتبط با نام مستعار استفاده خواهد شد. مقدار -sigalg الگوریتم مورد استفاده برای امضای CSR را مشخص میکند. درخواست CSR در فایل -file file ذخیره میشود. اگر فایلی مشخص نشود، CSR در -stdout نوشته میشود. برای وارد کردن پاسخ دریافت شده از CA از دستور -importcert استفاده کنید.
دستورات صدور داده (COMMANDS FOR EXPORTING DATA)
- -exportcert
- گزینههای موجود برای دستور -exportcert به شرح زیر است:
- {-rfc}: خروجی با قالب سبک RFC
- {-alias alias}: نام مستعار مدخل مورد پردازش
- {-file file}: نام فایل خروجی
- {-keystore keystore}: نام انبار کلید
- {-cacerts}: دسترسی به انبار کلید cacerts
- [-storepass arg]: گذرواژه انبار کلید
- {-storetype type}: نوع انبار کلید
- {-providername name}: نام ارائهدهنده امنیت
- {-addprovider name [-providerarg arg]}: افزودن ارائهدهنده امنیت با نام (مانند SunPKCS11) به همراه آرگومان پیکربندی اختیاری.
- {-providerclass class [-providerarg arg] }: افزودن ارائهدهنده امنیت با نام کلاس واجد شرایط کامل با یک آرگومان پیکربندی اختیاری.
- {-providerpath list}: مسیر کلاس ارائهدهنده
- {-v}: خروجی با جزئیات کامل
- {-protected}: گذرواژه از طریق سازوکار محافظتشده ارائه میشود
از دستور -exportcert برای خواندن یک گواهی از انبار کلید که با -alias alias مرتبط است و ذخیره آن در -file file استفاده کنید. هنگامی که فایلی مشخص نشود، گواهی به stdout ارسال میشود. به طور پیشفرض، گواهی در قالب کدگذاری دودویی صادر میشود. اگر گزینه -rfc مشخص شود، خروجی در قالب کدگذاری متنی قابلچاپ تعریفشده توسط استاندارد کدگذاری گواهی RFC 1421 اینترنت خواهد بود. اگر -alias به یک گواهی مورد اعتماد اشاره کند، همان گواهی صادر میشود. در غیر این صورت، -alias به یک مدخل کلید همراه با زنجیره گواهی مرتبط اشاره دارد. در این حالت، اولین گواهی در زنجیره بازگردانده میشود. این گواهی کلید عمومی هویتی را که توسط -alias مشخص شده احراز هویت میکند.
دستورات نمایش دادهها (COMMANDS FOR DISPLAYING DATA)
- -list
- گزینههای موجود برای دستور -list به شرح زیر است:
- {-rfc}: خروجی با قالب سبک RFC
- {-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}: گذرواژه از طریق سازوکار محافظتشده ارائه میشود
از دستور -list برای چاپ محتوای مدخل انبار کلید شناساییشده با -alias در stdout استفاده کنید. اگر -alias alias مشخص نشود، محتوای کل انبار کلید چاپ میشود. به طور پیشفرض، این دستور اثرانگشت SHA-256 گواهی را چاپ میکند. اگر گزینه -v مشخص شود، گواهی در قالب خوانا برای انسان به همراه اطلاعات اضافی مانند مالک، صادرکننده، شماره سریال و هرگونه پسوند چاپ میشود. اگر گزینه -rfc مشخص شود، محتوای گواهی با استفاده از قالب کدگذاری قابلچاپ تعریفشده توسط استاندارد کدگذاری گواهی RFC 1421 اینترنت چاپ میشود.
نکته: نمیتوانید هر دو گزینه -v و -rfc را در یک دستور مشخص کنید؛ در غیر این صورت خطا گزارش میشود.
- -printcert
- گزینههای موجود برای دستور -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 طبق تعریف استاندارد کدگذاری گواهی RFC 1421 اینترنت چاپ میکند. اگر گواهی از یک فایل یا stdin خوانده شود، ممکن است با کدگذاری دودویی یا قالب کدگذاری قابلچاپ طبق استاندارد RFC 1421 باشد. اگر سرور SSL پشت یک دیوار آتش (فایروال) باشد، گزینههای -J-Dhttps.proxyHost=proxyhost و -J-Dhttps.proxyPort=proxyport میتوانند در خط فرمان برای تونلزنی از طریق پراکسی مشخص شوند.
نکته: این دستور میتواند مستقل از یک انبار کلید استفاده شود. این دستور ضعف الگوریتم امضای گواهی را در صورتی که یک گواهی مورد اعتماد در انبار کلید کاربر (مشخصشده با -keystore) یا در انبار کلید cacerts (در صورت تعیین -trustcacerts) باشد، بررسی نمیکند.
- -printcertreq
- گزینههای موجود برای دستور -printcertreq به شرح زیر است:
- {-file file}: نام فایل ورودی
- {-v}: خروجی با جزئیات کامل
از دستور -printcertreq برای چاپ محتوای یک درخواست گواهی با قالب PKCS #10 (که توسط دستور keytool -certreq تولید میشود) استفاده کنید. این دستور درخواست را از فایل میخواند؛ اگر فایلی وجود نداشته باشد، درخواست از ورودی استاندارد خوانده میشود.
- -printcrl
- گزینههای موجود برای دستور -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 فایل crl را تولید میکند.
نکته: این دستور میتواند مستقل از یک انبار کلید استفاده شود. این دستور تلاش میکند CRL را با استفاده از گواهی موجود در انبار کلید کاربر (مشخصشده با -keystore) یا انبار کلید cacerts (در صورت تعیین -trustcacerts) اعتبارسنجی کند و در صورت عدم امکان اعتبارسنجی، هشداری چاپ خواهد کرد.
دستورات مدیریت انبار کلید (COMMANDS FOR MANAGING THE KEYSTORE)
- -storepasswd
- گزینههای موجود برای دستور -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
- گزینههای موجود برای دستور -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
- گزینههای موجود برای دستور -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
- گزینههای موجود برای دستور -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 (در صورت ارائه) آزمایش میشود. اگر این تلاش با شکست مواجه شود، گذرواژه از کاربر پرسیده خواهد شد.
دستورات نمایش اطلاعات امنیتی (COMMANDS FOR DISPLAYING SECURITY-RELATED INFORMATION)
- -showinfo
- گزینههای موجود برای دستور -showinfo به شرح زیر است:
- {-tls}: نمایش اطلاعات پیکربندی TLS
- {-v}: خروجی با جزئیات کامل
از دستور -showinfo برای نمایش اطلاعات گوناگون امنیتی استفاده کنید. گزینه -tls پیکربندیهای TLS مانند فهرست پروتکلها و مجموعههای رمزنگاری (Cipher Suites) فعال را نمایش میدهد.
دستورات نمایش نسخه برنامه (COMMANDS FOR DISPLAYING PROGRAM VERSION)
میتوانید از -version برای چاپ نسخه برنامه keytool استفاده کنید.
دستورات نمایش اطلاعات راهنما (COMMANDS FOR DISPLAYING HELP INFORMATION)
میتوانید از --help برای نمایش فهرستی از دستورات keytool یا نمایش اطلاعات راهنما در مورد یک دستور خاص keytool استفاده کنید.
- •
- برای نمایش فهرست دستورات keytool، وارد کنید:
keytool --help
- •
- برای نمایش اطلاعات راهنما در مورد یک دستور خاص keytool، وارد کنید:
keytool -<command> --help
گزینههای عمومی دستورات (COMMON COMMAND OPTIONS)
گزینه -v میتواند برای تمام دستورات به جز --help درج شود. هنگامی که گزینه -v درج شود، نشاندهنده حالت پرگویی (Verbose) است که به معنای ارائه اطلاعات بیشتر در خروجی خواهد بود.
آرگومان -Joption میتواند برای هر دستوری درج شود. هنگامی که -Joption استفاده شود، رشته option مشخصشده مستقیماً به مفسر جاوا منتقل میشود. این گزینه نباید شامل هیچ فاصلهای باشد. این گزینه برای تنظیم محیط اجرا یا مصرف حافظه مفید است. برای مشاهده فهرستی از گزینههای ممکن مفسر، دستور java -h یا java -X را در خط فرمان وارد کنید.
گزینههای زیر میتوانند برای تمام دستوراتی که روی یک انبار کلید عمل میکنند درج شوند:
- -storetype storetype
- این شناسه نوع انبار کلیدی را که باید نمونهسازی شود مشخص میکند.
- -keystore keystore
- محل قرارگیری انبار کلید.
- -cacerts cacerts
- روی انبار کلید cacerts عمل میکند. این گزینه معادل -keystore path_to_cacerts -storetype type_of_cacerts است. اگر از گزینه -keystore یا -storetype همراه با گزینه -cacerts استفاده شود، خطا گزارش میشود.
- -storepass [:env | :file ] argument
- گذرواژهای که برای محافظت از یکپارچگی انبار کلید استفاده میشود.
- env: بازیابی گذرواژه از متغیر محیطی با نام argument.
- file: بازیابی گذرواژه از فایل با نام argument.
نکته: تمام گزینههای دیگری که نیازمند گذرواژه هستند، مانند -keypass، -srckeypass، -destkeypass، -srcstorepass و -deststorepass نیز اصلاحکنندههای env و file را میپذیرند. به یاد داشته باشید که گزینه گذرواژه و اصلاحکننده را با یک دونقطه (:) جدا کنید. گذرواژه باید برای تمام دستوراتی که به محتوای انبار کلید دسترسی دارند ارائه شود. برای چنین دستوراتی، هنگامی که گزینه -storepass در خط فرمان ارائه نشود، از کاربر درخواست خواهد شد. هنگام بازیابی اطلاعات از انبار کلید، ارائه گذرواژه اختیاری است. اگر گذرواژهای مشخص نشود، یکپارچگی اطلاعات بازیابیشده قابل اعتبارسنجی نیست و هشداری نمایش داده میشود.
- -providername name
- برای شناسایی نام یک ارائهدهنده خدمات رمزنگاری در صورتی که در فایل مشخصههای امنیتی فهرست شده باشد استفاده میشود.
- -addprovider name
- برای افزودن یک ارائهدهنده امنیت با نام (مانند SunPKCS11) استفاده میشود.
- -providerclass class
- برای مشخص کردن نام فایل کلاس اصلی ارائهدهنده خدمات رمزنگاری در صورتی که در فایل مشخصههای امنیتی فهرست نشده باشد استفاده میشود.
- -providerpath list
- برای تعیین مسیر کلاس ارائهدهنده استفاده میشود.
- -providerarg arg
- همراه با گزینه -addprovider یا -providerclass برای ارائه یک آرگومان رشتهای اختیاری به سازنده (Constructor) نام class استفاده میشود.
- -protected=true|false
- این مقدار را زمانی true تعیین کنید که گذرواژه باید از طریق یک مسیر احراز هویت محافظتشده، مانند یک کارتخوان اختصاصی پینکد (PIN Reader) وارد شود. از آنجا که در دستور -importkeystore دو انبار کلید دخیل هستند، دو گزینه -srcprotected و -destprotected به ترتیب برای انبار کلید مبدأ و مقصد ارائه شدهاند.
- -ext {name{:critical} {=value}}
- نشاندهنده یک پسوند گواهی X.509 است. این گزینه میتواند در -genkeypair و -gencert برای تعبیه پسوندها در گواهی تولیدشده یا در -certreq برای نشان دادن پسوندهای درخواستشده در درخواست گواهی استفاده شود. این گزینه میتواند چندین بار درج شود. آرگومان name میتواند یک نام پسوند پشتیبانیشده (بخش پسوندهای نامدار پشتیبانیشده را ببینید) یا یک شماره شناسه شیء (OID) دلخواه باشد. آرگومان value، در صورت ارائه، آرگومان مربوط به پسوند را مشخص میکند. هنگامی که value حذف شود، مقدار پیشفرض پسوند استفاده شده یا خود پسوند نیازی به آرگومان ندارد. اصلاحکننده :critical، در صورت ارائه، به این معناست که ویژگی isCritical پسوند برابر با true است؛ در غیر این صورت برابر با false خواهد بود. میتوانید به جای :critical از :c استفاده کنید.
- -conf file
- یک فایل گزینههای از پیش پیکربندیشده را مشخص میکند.
فایل گزینههای از پیش پیکربندیشده (PRE-CONFIGURED OPTIONS FILE)
فایل گزینههای از پیش پیکربندیشده یک فایل مشخصههای جاوا (Java Properties File) است که میتواند با گزینه -conf مشخص شود. هر مشخصه نشاندهنده گزینه(های) پیشفرض برای یک دستور keytool با استفاده از keytool.command_name به عنوان نام مشخصه است. یک مشخصه ویژه به نام keytool.all نشاندهنده گزینه(های) پیشفرضی است که برای تمام دستورات اعمال میشود. مقدار یک مشخصه میتواند شامل ${prop} باشد که به مشخصه سیستمی مرتبط با آن بسط داده خواهد شد. اگر مقدار یک گزینه حاوی فاصله باشد، باید درون علامت نقلقول ( تمام نامهای مشخصهها باید با حروف کوچک باشند.
هنگامی که keytool با یک فایل گزینههای از پیش پیکربندیشده اجرا میشود، ابتدا مقدار مربوط به keytool.all (در صورت وجود) به خط فرمان keytool اضافه میشود، سپس مقدار مربوط به نام دستور (در صورت وجود) قرار میگیرد و در نهایت گزینههای موجود در خط فرمان اعمال میشوند. برای یک گزینه تکمقداری، این سازوکار به مشخصه یک دستور خاص اجازه میدهد مقدار keytool.all را بازنویسی کند، و مقدار مشخصشده در خط فرمان هر دو را بازنویسی خواهد کرد. برای گزینههای چندمقداری، تمام آنها توسط 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 مشخصشده در خط فرمان فایل گزینههای از پیش پیکربندیشده را بازنویسی میکند.
مثالهایی از مقادیر گزینهها (EXAMPLES OF OPTION VALUES)
مثالهای زیر مقادیر پیشفرض برای گزینههای گوناگون را نشان میدهند:
-
-alias "mykey" -keysize 2048 (when using -genkeypair and -keyalg is "DSA") 3072 (when using -genkeypair and -keyalg is "RSA", "RSASSA-PSS", or "DH") 384 (when using -genkeypair and -keyalg is "EC") 56 (when using -genseckey and -keyalg is "DES") 168 (when using -genseckey and -keyalg is "DESede") -groupname ed25519 (when using -genkeypair and -keyalg is "EdDSA", key size is 255) x25519 (when using -genkeypair and -keyalg is "XDH", key size is 255) -validity 90 -keystore <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 | key size | default sigalg |
| DSA | any size | SHA256withDSA |
| RSA | < 624 | SHA256withRSA (key size is too small for using SHA-384) |
| <= 7680 | SHA384withRSA | |
| > 7680 | SHA512withRSA | |
| EC | < 512 | SHA384withECDSA |
| >= 512 | SHA512withECDSA | |
| RSASSA-PSS | < 624 | RSASSA-PSS (with SHA-256, key size is too small for |
| using SHA-384) | ||
| <= 7680 | RSASSA-PSS (with SHA-384) | |
| > 7680 | RSASSA-PSS (with SHA-512) | |
| EdDSA | 255 | Ed25519 |
| 448 | Ed448 | |
| Ed25519 | 255 | Ed25519 |
| Ed448 | 448 | Ed448 |
- اندازه کلید که بر حسب بیت سنجیده میشود، متناظر با اندازه کلید خصوصی است. این اندازه توسط مقدار گزینه -keysize یا -groupname یا مقدار مشتقشده از تنظیمات پیشفرض تعیین میشود.
- یک الگوریتم امضای RSASSA-PSS از یک الگوریتم MessageDigest به عنوان الگوریتمهای درهمسازی (Hash) و MGF1 خود استفاده میکند.
- اگر هیچ مقدار پیشفرضی برای -keysize یا -groupname برای یک الگوریتم تعریف نشده باشد، ارائهدهنده امنیت یک تنظیم پیشفرض را انتخاب خواهد کرد.
نکته:
به منظور بهبود امنیت آمادهبهکار، نامهای پیشفرض اندازه کلید، نام گروه و الگوریتم امضا به طور دورهای در هر نسخه JDK به مقادیر قویتر ارتقا مییابند. اگر تعاملپذیری با نسخههای قدیمیتر JDK اهمیت دارد، اطمینان حاصل کنید که مقادیر پیشفرض توسط آن نسخهها پشتیبانی میشوند. همچنین میتوانید از گزینههای -keysize، -groupname یا -sigalg برای بازنویسی مقادیر پیشفرض با مسئولیت خود استفاده کنید.
پسوندهای نامدار پشتیبانیشده (SUPPORTED NAMED EXTENSIONS)
دستور keytool از این پسوندهای نامدار پشتیبانی میکند. نامها به بزرگی و کوچکی حروف حساس نیستند.
- BC یا BasicConstraints
- مقادیر:
- KU یا KeyUsage
- مقادیر:
مقدار usage میتواند یکی از موارد زیر باشد:
- digitalSignature
- nonRepudiation (contentCommitment)
- keyEncipherment
- dataEncipherment
- keyAgreement
- keyCertSign
- cRLSign
- encipherOnly
- decipherOnly
به شرط عدم وجود ابهام، آرگومان usage میتواند با چند حرف اول مخفف شود (مانند dig برای digitalSignature) یا با سبک شتری (مانند dS برای digitalSignature یا cRLS برای cRLSign). مقادیر usage به بزرگی و کوچکی حروف حساس هستند.
- EKU یا ExtendedKeyUsage
- مقادیر:
مقدار usage میتواند یکی از موارد زیر باشد:
- anyExtendedKeyUsage
- serverAuth
- clientAuth
- codeSigning
- emailProtection
- timeStamping
- OCSPSigning
- هر رشته شناسه شیء (OID)
به شرط عدم وجود ابهام، آرگومان usage میتواند با چند حرف اول یا سبک شتری مخفف شود. مقادیر usage به بزرگی و کوچکی حروف حساس هستند.
- SAN یا SubjectAlternativeName
- مقادیر:
مقدار type میتواند یکی از موارد زیر باشد:
- URI
- DNS
- IP
- OID
آرگومان value مقدار با قالب رشتهای برای آن type است.
- IAN یا IssuerAlternativeName
- مقادیر:
- SIA یا SubjectInfoAccess
- مقادیر:
مقدار method میتواند یکی از موارد زیر باشد:
- timeStamping
- caRepository
- هر OID
آرگومانهای location-type و location-value میتوانند هر type:value پشتیبانیشده توسط پسوند SubjectAlternativeName باشند.
- AIA یا AuthorityInfoAccess
- مقادیر:
آرگومان method میتواند یکی از موارد زیر باشد:
- ocsp
- caIssuers
- هر OID
هنگامی که name برابر با OID باشد، مقدار آن کدگذاری هگزادسیمال DER مربوط به extnValue برای پسوند بدون نوع OCTET STRING و بایتهای طول خواهد بود. به جز اعداد هگزادسیمال استاندارد (0-9, a-f, A-F)، هرگونه نویسه اضافی در رشته هگز نادیده گرفته میشود. بنابراین هر دو مقدار 01:02:03:04 و 01020304 یکسان در نظر گرفته میشوند. هنگامی که مقداری وجود نداشته باشد، پسوند دارای فیلد مقدار خالی خواهد بود.
نام ویژه honored که تنها در -gencert استفاده میشود، نحوه رفتار با پسوندهای گنجاندهشده در درخواست گواهی را مشخص میکند. مقدار این نام یک فهرست جداشده با کاما از موارد all (پذیرش تمام پسوندهای درخواستی)، name{:[critical|non-critical]} (پذیرش پسوند نامبرده با ویژگی isCritical متفاوت) و -name (همراه با all برای استثنا کردن) است. پسوندهای درخواستی به طور پیشفرض پذیرفته نمیشوند.
اگر علاوه بر گزینه -ext honored، گزینه -ext نامدار یا OID دیگری ارائه شود، این پسوند به پسوندهای پذیرفتهشده قبلی اضافه میشود. اما اگر این نام (یا OID) در مقدار honored نیز ظاهر شود، مقدار و ویژگی بحرانی بودن آن، موارد موجود در درخواست را بازنویسی خواهد کرد. اگر پسوندی از همان نوع چندین بار از طریق نام یا OID ارائه شود، تنها آخرین پسوند استفاده خواهد شد.
پسوند subjectKeyIdentifier همیشه ایجاد میشود. برای گواهیهای غیرخودامضاشده، پسوند authorityKeyIdentifier ایجاد میگردد.
هشدار:
کاربران باید آگاه باشند که برخی ترکیبات پسوندها (و سایر فیلدهای گواهی) ممکن است با استانداردهای اینترنت منطبق نباشند. بخش هشدار انطباق گواهی را ببینید.
مثالهایی از مراحل ایجاد انبار کلید (EXAMPLES OF TASKS IN CREATING A KEYSTORE)
مثالهای زیر توالی اقدامات در ایجاد یک انبار کلید برای مدیریت جفتکلیدهای عمومی/خصوصی و گواهیهای دریافت شده از هویتهای مورد اعتماد را شرح میدهند:
- تولید جفتکلید
- درخواست گواهی امضاشده از مرجع صدور گواهی (CA)
- وارد کردن گواهی مرجع صدور (CA)
- وارد کردن پاسخ گواهی از مرجع صدور (CA)
- صدور گواهی تأییدکننده کلید عمومی
- وارد کردن انبار کلید
- تولید گواهیها برای یک سرور SSL
تولید جفتکلید (GENERATING THE KEY PAIR)
ابتدا یک انبار کلید ایجاد کرده و سپس جفتکلید را تولید کنید.
میتوانید دستور را به صورت یک خط واحد مانند زیر وارد کنید:
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 را به آن اختصاص میدهد. این دستور یک جفتکلید عمومی/خصوصی برای هویتی که نام متمایز آن myname، mygroup، mycompany و کد کشور دوحرفی mycountry است تولید میکند. این دستور از الگوریتم تولید کلید RSA برای ایجاد کلیدها استفاده میکند؛ اندازه هر دو کلید 3072 بیت است.
دستور از الگوریتم امضای پیشفرض SHA384withRSA برای ایجاد یک گواهی خودامضاشده استفاده میکند که شامل کلید عمومی و اطلاعات نام متمایز است. گواهی برای مدت ۱۸۰ روز معتبر است و در یک مدخل انبار کلید با نام مستعار -alias business با کلید خصوصی مرتبط میشود. به کلید خصوصی گذرواژه مشخصشده با -keypass اختصاص مییابد.
در صورت پذیرش مقادیر پیشفرض گزینهها، دستور بسیار کوتاهتر خواهد بود. در این حالت، تنها گزینه -keyalg الزامی است و برای گزینههای نامشخص از مقادیر پیشفرض استفاده میشود. مقادیر الزامی از شما پرسیده خواهند شد:
keytool -genkeypair -keyalg rsa
در این حالت، یک مدخل انبار کلید با نام مستعار mykey به همراه یک جفتکلید جدید و گواهی با اعتبار ۹۰ روز ایجاد میشود. این مدخل در دایرکتوری خانگی شما در انبار کلیدی به نام .keystore قرار میگیرد. فایل .keystore در صورت عدم وجود ایجاد میشود. اطلاعات نام متمایز، گذرواژه انبار کلید و گذرواژه کلید خصوصی از شما درخواست خواهد شد.
نکته:
سایر مثالها فرض میکنند که به اعلانها با مقادیری برابر با مقادیر مشخصشده در اولین دستور -genkeypair پاسخ دادهاید. برای مثال، نام متمایز: cn=myname, ou=mygroup, o=mycompany, c=mycountry.
درخواست گواهی امضاشده از مرجع صدور گواهی (CA) (REQUESTING A SIGNED CERTIFICATE FROM A CA)
نکته:
تولید جفتکلید یک گواهی خودامضاشده ایجاد کرد؛ با این حال، هنگامی که گواهی توسط یک مرجع CA امضا شود، احتمال اعتماد دیگران به آن بسیار بیشتر است.
برای دریافت امضای مرجع CA، مراحل زیر را طی کنید:
- 1.
- تولید یک CSR:
keytool -certreq -file myname.csr
این دستور یک CSR برای هویتی که با نام مستعار پیشفرض mykey مشخص شده ایجاد میکند و درخواست را در فایلی به نام myname.csr قرار میدهد.
- 2.
- ارسال myname.csr به یک مرجع CA مانند DigiCert.
مرجع CA شما (درخواستکننده) را معمولاً به صورت برونخط احراز هویت کرده و یک گواهی امضاشده توسط خود را بازمیگرداند که کلید عمومی شما را احراز هویت میکند. در برخی موارد، CA زنجیرهای از گواهیها را بازمیگرداند که هر یک کلید عمومی امضاکننده گواهی قبلی در زنجیره را احراز هویت میکنند.
وارد کردن گواهی مرجع صدور (CA) (IMPORTING A CERTIFICATE FOR THE CA)
برای وارد کردن یک گواهی برای مرجع CA، مراحل زیر را طی کنید:
- 1.
- پیش از وارد کردن پاسخ گواهی از یک CA، به یک یا چند گواهی مورد اعتماد در انبار کلید خود یا در فایل انبار کلید cacerts نیاز دارید. بخش -importcert را در دستورات ببینید.
- اگر پاسخ گواهی یک زنجیره گواهی باشد، به بالاترین گواهی زنجیره نیاز دارید؛ یعنی گواهی ریشه CA که کلید عمومی مرجع CA را احراز هویت میکند.
- اگر پاسخ گواهی یک گواهی منفرد باشد، به گواهی مرجع صادرکننده CA (همان که آن را امضا کرده) نیاز دارید. اگر آن گواهی خودامضاشده نباشد، به گواهی امضاکننده آن نیاز خواهید داشت و به همین ترتیب تا یک گواهی ریشه CA خودامضاشده.
انبار کلید cacerts با مجموعهای از گواهیهای ریشه صادرشده توسط مراجع CA تحت برنامه گواهی ریشه اوراکل جاوا [https://www.oracle.com/java/technologies/javase/carootcertsprogram.html] ارائه میشود. اگر درخواست گواهی امضاشدهای به یک CA دادهاید و گواهی تأییدکننده کلید عمومی آن CA به cacerts اضافه نشده باشد، باید گواهی آن CA را به عنوان گواهی مورد اعتماد وارد کنید.
گواهی یک CA معمولاً خودامضاشده است یا توسط یک CA دیگر امضا شده است. اگر توسط CA دیگری امضا شده باشد، به گواهی تأییدکننده کلید عمومی آن CA نیاز دارید.
برای مثال، فرض کنید فایلی به نام X.cer از یک شرکت مرجع CA دریافت کردهاید و قرار است این فایل یک گواهی خودامضاشده باشد که کلید عمومی آن CA را احراز هویت میکند. پیش از وارد کردن آن به عنوان گواهی مورد اعتماد، باید از معتبر بودن آن از طریق زیر اطمینان حاصل کنید:
- 1.
- مشاهده آن با دستور keytool -printcert یا دستور keytool -importcert بدون استفاده از گزینه -noprompt. اطمینان حاصل کنید که اثرانگشتهای نمایشدادهشده گواهی با اثرانگشتهای مورد انتظار مطابقت دارند.
- 2.
- تماس با فرد یا سازمانی که گواهی را ارسال کرده و مقایسه اثرانگشتهای مشاهدهشده با مواردی که آنها ارائه میدهند یا در یک مخزن عمومی امن منتشر شده است.
تنها در صورت یکسان بودن اثرانگشتها، این اطمینان حاصل میشود که گواهی در طول مسیر با گواهی فرد دیگری (مانند گواهی یک مهاجم) جایگزین نشده است. اگر چنین حملهای رخ دهد و گواهی را پیش از وارد کردن بررسی نکرده باشید، به هر چیزی که مهاجم امضا کند اعتماد خواهید کرد.
- 2.
- جایگزینی گواهی خودامضاشده با یک زنجیره گواهی که در آن هر گواهی در زنجیره، کلید عمومی امضاکننده گواهی قبلی را تا یک مرجع ریشه CA احراز هویت میکند.
اگر به معتبر بودن گواهی اعتماد دارید، میتوانید با اجرای دستور زیر آن را به انبار کلید خود اضافه کنید:
keytool -importcert -alias alias -file X.cer
این دستور یک مدخل گواهی مورد اعتماد در انبار کلید بر اساس دادههای فایل گواهی CA ایجاد میکند و مقادیر alias را به آن مدخل اختصاص میدهد.
وارد کردن پاسخ گواهی از مرجع صدور (CA) (IMPORTING THE CERTIFICATE REPLY FROM THE CA)
پس از وارد کردن گواهی تأییدکننده کلید عمومی مرجع CA که درخواست امضای گواهی خود را به آن ارسال کردهاید (یا وجود چنین گواهیای از قبل در فایل cacerts)، میتوانید پاسخ گواهی را وارد کرده و گواهی خودامضاشده خود را با یک زنجیره گواهی جایگزین کنید.
زنجیره گواهی یکی از موارد زیر خواهد بود:
- توسط CA بازگردانده شده باشد هنگامی که پاسخ CA یک زنجیره باشد.
- هنگامی که پاسخ CA یک گواهی منفرد باشد، ساخته شود. این زنجیره گواهی با استفاده از پاسخ گواهی و گواهیهای مورد اعتماد موجود در انبار کلیدی که پاسخ را در آن وارد میکنید یا فایل انبار کلید cacerts ساخته میشود.
برای مثال، اگر درخواست امضای گواهی خود را به DigiCert ارسال کردهاید، میتوانید با وارد کردن دستور زیر پاسخ آنها را وارد کنید:
نکته:
در این مثال، گواهی بازگرداندهشده DCmyname.cer نام دارد:
keytool -importcert -trustcacerts -file DCmyname.cer
صدور گواهی تأییدکننده کلید عمومی (EXPORTING A CERTIFICATE THAT AUTHENTICATES THE PUBLIC KEY)
نکته:
اگر از دستور jarsigner برای امضای یک فایل آرشیو جاوا (JAR) استفاده کردهاید، کلاینتهایی که از این فایل استفاده میکنند میخواهند امضای شما را احراز هویت کنند.
یکی از راههایی که کلاینتها میتوانند شما را احراز هویت کنند، وارد کردن گواهی کلید عمومی شما در انبار کلید خود به عنوان یک مدخل مورد اعتماد است. سپس میتوانید گواهی را صادر کرده و در اختیار کلاینتهای خود قرار دهید.
برای مثال:
- 1.
- کپی کردن گواهی خود در فایلی به نام myname.cer با وارد کردن دستور زیر:
نکته:
در این مثال، مدخل دارای نام مستعار mykey است:
keytool -exportcert -alias mykey -file myname.cer
- 2.
- با داشتن گواهی و فایل JAR امضاشده، یک کلاینت میتواند از دستور jarsigner برای احراز هویت امضای شما استفاده کند.
وارد کردن انبار کلید (IMPORTING THE KEYSTORE)
از دستور importkeystore برای وارد کردن یک انبار کلید کامل به یک انبار کلید دیگر استفاده کنید. این کار تمام مدخلهای انبار کلید مبدأ شامل کلیدها و گواهیها را با یک دستور واحد به انبار کلید مقصد وارد میکند. میتوانید از این دستور برای وارد کردن مدخلها از نوع متفاوتی از انبار کلید استفاده کنید. در طول فرآیند وارد کردن، تمام مدخلهای جدید در انبار کلید مقصد دارای نامهای مستعار و گذرواژههای حفاظتی یکسان (برای کلیدهای مخفی و کلیدهای خصوصی) خواهند بود. اگر دستور keytool نتواند کلیدهای خصوصی یا کلیدهای مخفی را از انبار کلید مبدأ بازیابی کند، گذرواژه را از شما درخواست خواهد کرد. اگر نام مستعار تکراری شناسایی شود، نام مستعار جدیدی از شما درخواست میشود و میتوانید یک نام مستعار جدید مشخص کنید یا به دستور keytool اجازه دهید مدخل موجود را رونویسی کند.
برای مثال، وارد کردن مدخلها از یک انبار کلید معمولی نوع JKS به نام key.jks به یک انبار کلید مبتنی بر سختافزار از نوع PKCS #11 با دستور زیر انجام میشود:
keytool -importkeystore -srckeystore key.jks -destkeystore NONE -srcstoretype JKS -deststoretype PKCS11 -srcstorepass password -deststorepass password
دستور importkeystore همچنین میتواند برای وارد کردن یک مدخل منفرد از انبار کلید مبدأ به انبار کلید مقصد استفاده شود. در این حالت، علاوه بر گزینههای استفادهشده در مثال قبل، باید نام مستعاری را که میخواهید وارد کنید مشخص نمایید. با تعیین گزینه -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
تولید گواهیها برای یک سرور SSL (GENERATING CERTIFICATES FOR AN SSL SERVER)
دستورات keytool زیر برای تولید جفتکلیدها و گواهیها برای سه هویت استفاده میشوند:
- مرجع ریشه CA (root)
- مرجع میانی CA (ca)
- سرور SSL (server)
اطمینان حاصل کنید که تمام گواهیها را در یک انبار کلید یکسان ذخیره میکنید.
-
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 entries)
- انبارهای کلید میتوانند انواع متفاوتی از مدخلها را در خود جای دهند. دو نوع مدخل پرکاربرد برای دستور keytool شامل موارد زیر است:
مدخلهای گواهی مورد اعتماد (Trusted certificate entries): هر مدخل شامل یک گواهی کلید عمومی منفرد متعلق به یک طرف دیگر است. این مدخل گواهی مورد اعتماد نامیده میشود زیرا مالک انبار کلید اطمینان دارد که کلید عمومی موجود در گواهی متعلق به همان هویتی است که با موضوع (مالک) گواهی مشخص شده است. صادرکننده گواهی با امضای دیجیتال گواهی این موضوع را تضمین میکند.
- نامهای مستعار انبار کلید (Keystore aliases)
- تمام مدخلهای انبار کلید (مدخلهای کلید و گواهیهای مورد اعتماد) از طریق نامهای مستعار (alias) منحصربهفرد در دسترس قرار میگیرند.
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 رابطهای مشخصی برای دسترسی و اصلاح اطلاعات موجود در انبار کلید فراهم میکند. امکان وجود چندین پیادهسازی عینی متفاوت وجود دارد که هر پیادهسازی مربوط به نوع خاصی از انبار کلید است.
- لینوکس و مکاواس: java.home/lib/security
- ویندوز: java.home\lib\security
هر ابزار مقدار keystore.type را دریافت کرده و سپس تمام ارائهدهندگان نصبشده را بررسی میکند تا ارائهدهندهای را بیابد که انبار کلیدی از آن نوع را پیادهسازی کرده باشد، سپس از پیادهسازی آن ارائهدهنده استفاده میکند. کلاس KeyStore یک متد ایستا به نام getDefaultType تعریف میکند که به برنامهها اجازه میدهد مقدار مشخصه keystore.type را بازیابی کنند. خط کد زیر یک نمونه از نوع انبار کلید پیشفرض را همانطور که در مشخصه keystore.type تعیین شده ایجاد میکند:
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
نوع انبار کلید پیشفرض pkcs12 است که یک انبار کلید چندسکویی بر اساس استاندارد نحوی تبادل اطلاعات شخصی RSA PKCS12 است. این مورد با خط زیر در فایل مشخصههای امنیتی مشخص شده است:
keystore.type=pkcs12
برای استفاده از یک پیادهسازی انبار کلید دیگر به غیر از پیشفرض، میتوانید آن خط را برای مشخص کردن نوع انبار کلید متفاوت ویرایش کنید. برای مثال، اگر میخواهید از پیادهسازی انبار کلید jks اوراکل استفاده کنید، خط را به صورت زیر تغییر دهید:
keystore.type=jks
نکته: بزرگی و کوچکی حروف در نامگذاری نوع انبار کلید اهمیتی ندارد؛ برای مثال JKS همانند jks در نظر گرفته میشود.
- گواهی (Certificate)
- یک گواهی (یا گواهی کلید عمومی) بیانیهای با امضای دیجیتال از سوی یک هویت (صادرکننده یا issuer) است که بیان میکند کلید عمومی و برخی اطلاعات دیگر هویتی دیگر (موضوع یا subject) دارای مقداری مشخص است. اصطلاحات زیر با گواهیها مرتبط هستند:
- کلیدهای عمومی (Public Keys): اعدادی هستند که با یک هویت خاص مرتبط بوده و برای آگاهی تمام کسانی که نیاز به تعاملات مطمئن با آن هویت دارند در نظر گرفته شدهاند. کلیدهای عمومی برای بررسی و اعتبارسنجی امضاها استفاده میشوند.
- امضاشده دیجیتالی (Digitally Signed): اگر دادههایی به صورت دیجیتالی امضا شوند، همراه با هویت صادرکننده و امضایی ذخیره میشوند که اثبات میکند آن هویت از دادهها آگاهی دارد. دادهها با امضا شدن توسط کلید خصوصی هویت، غیرقابل جعل میشوند.
- هویت (Identity): روشی شناختهشده برای نشانیدهی یک هویت. در برخی سیستمها هویت همان کلید عمومی است و در برخی دیگر میتواند از UID سیستمعامل تا آدرس ایمیل یا نام متمایز X.509 متغیر باشد.
- امضا (Signature): یک امضا روی دادهها با استفاده از کلید خصوصی یک هویت محاسبه میشود. امضاکننده در مورد گواهیها با عنوان صادرکننده (Issuer) نیز شناخته میشود.
- کلیدهای خصوصی (Private Keys): اعدادی هستند که باید تنها برای همان هویتی که کلید خصوصی به آن تعلق دارد شناختهشده باشند (یعنی محرمانه نگهداری شوند). کلیدهای خصوصی و عمومی در تمام سیستمهای رمزنگاری کلید عمومی به صورت جفت وجود دارند. در یک سیستم معمولی رمزنگاری کلید عمومی مانند DSA، هر کلید خصوصی دقیقاً با یک کلید عمومی متناظر است. کلیدهای خصوصی برای محاسبه امضاها استفاده میشوند.
- موجودیت / هویت (Entity): یک هویت میتواند شخص، سازمان، برنامه، رایانه، کسبوکار، بانک یا هر چیزی باشد که تا حدی به آن اعتماد دارید. رمزنگاری کلید عمومی نیازمند دسترسی به کلیدهای عمومی کاربران است. در یک محیط شبکهای در مقیاس بزرگ، تضمین برقراری روابط پیشین میان طرفهای ارتباطی یا وجود یک مخزن مورد اعتماد حاوی تمام کلیدهای عمومی ناممکن است. گواهیها به عنوان راهکاری برای این مشکل توزیع کلید عمومی ابداع شدند. اکنون یک مرجع صدور گواهی (CA) میتواند به عنوان شخص ثالث مورد اعتماد عمل کند. مراجع CA سازمانها یا کسبوکارهایی هستند که برای امضا و صدور گواهیها برای سایر هویتها مورد اعتماد قرار میگیرند. فرض بر این است که مراجع CA تنها گواهیهای معتبر و قابل اعتماد ایجاد میکنند زیرا ملزم به توافقنامههای قانونی هستند. مراجع صدور گواهی عمومی متعددی مانند DigiCert، Comodo، Entrust و غیره وجود دارند. همچنین میتوانید مرجع صدور گواهی اختصاصی خود را با استفاده از محصولاتی مانند Microsoft Certificate Server یا محصول Entrust CA برای سازمان خود راهاندازی کنید. با دستور keytool امکان نمایش، وارد کردن و صدور گواهیها وجود دارد. همچنین امکان تولید گواهیهای خودامضاشده نیز فراهم است. دستور keytool در حال حاضر گواهیهای X.509 را مدیریت میکند.
- گواهیهای X.509 (X.509 Certificates)
- استاندارد X.509 اطلاعاتی را که میتوانند درون یک گواهی قرار گیرند تعریف کرده و نحوه نگارش آن را (قالب داده) شرح میدهد. تمام دادههای یک گواهی با دو استاندارد مرتبط به نامهای ASN.1/DER کدگذاری میشوند. استاندارد نحوی انتزاعی ۱ (ASN.1) دادهها را توصیف میکند و قواعد کدگذاری معین (DER) روش واحدی را برای ذخیره و انتقال آن دادهها شرح میدهد.
- •
- نسخه (Version): مشخص میکند کدام نسخه از استاندارد X.509 بر این گواهی حاکم است که بر اطلاعات قابل تعیین در آن تأثیر میگذارد. تاکنون سه نسخه تعریف شده است. دستور keytool میتواند گواهیهای نسخه ۱، ۲ و ۳ را وارد و صادر کند و گواهیهای نسخه ۳ را تولید میکند.
- نسخه ۱ استاندارد X.509 از سال ۱۹۸۸ در دسترس بوده، به طور گسترده پیادهسازی شده و عمومیترین نسخه است.
- نسخه ۲ استاندارد X.509 مفهوم شناسههای منحصربهفرد موضوع و صادرکننده را برای مدیریت احتمال استفاده مجدد از نامهای موضوع یا صادرکننده در طول زمان معرفی کرد. اکثر اسناد مشخصات گواهی اکیداً توصیه میکنند که نامها مجدداً استفاده نشوند و گواهیها از شناسههای منحصربهفرد استفاده نکنند. گواهیهای نسخه ۲ کاربرد گستردهای ندارند.
- نسخه ۳ استاندارد X.509 جدیدترین نسخه (۱۹۹۶) است و از مفهوم پسوندها (Extensions) پشتیبانی میکند که در آن هر کسی میتواند یک پسوند تعریف کرده و آن را در گواهی قرار دهد. برخی از پسوندهای متداول عبارتند از: KeyUsage (محدود کردن استفاده از کلیدها به اهداف خاص مانند signing-only) و AlternativeNames (امکان ارتباط هویتهای دیگر مانند نامهای DNS، آدرسهای ایمیل، آدرسهای IP با این کلید عمومی). پسوندها میتوانند به عنوان بحرانی (Critical) علامتگذاری شوند تا نشان دهند که پسوند باید حتماً بررسی شده و اعمال گردد. برای مثال، اگر گواهی دارای پسوند KeyUsage به صورت بحرانی و با مقدار keyCertSign باشد، هنگامی که این گواهی در طول ارتباطات SSL ارائه شود باید رد شود، زیرا پسوند گواهی نشان میدهد که کلید خصوصی مرتبط تنها باید برای امضای گواهیها استفاده شود و نه برای SSL.
- شماره سریال (Serial number): هویتی که گواهی را ایجاد کرده موظف است شماره سریالی به آن اختصاص دهد تا آن را از سایر گواهیهای صادرشده متمایز کند. این اطلاعات در موارد متعددی استفاده میشود؛ برای مثال، هنگامی که گواهی باطل میشود، شماره سریال آن در فهرست ابطال گواهی (CRL) قرار میگیرد.
- شناسه الگوریتم امضا (Signature algorithm identifier): الگوریتم مورد استفاده توسط مرجع CA برای امضای گواهی را مشخص میکند.
- نام صادرکننده (Issuer name): نام متمایز X.500 هویتی که گواهی را امضا کرده است. این هویت معمولاً یک مرجع CA است. استفاده از این گواهی به معنای اعتماد به هویتی است که آن را امضا کرده است. در برخی موارد مانند گواهیهای ریشه یا مراجع CA سطح بالا، صادرکننده گواهی خود را امضا میکند.
- دوره اعتبار (Validity period): هر گواهی تنها برای مدت زمان محدودی معتبر است. این دوره با تاریخ و زمان شروع و پایان مشخص میشود و میتواند از چند ثانیه تا نزدیک به یک قرن متغیر باشد. دوره اعتبار انتخابشده به عوامل مختلفی مانند استحکام کلید خصوصی استفادهشده برای امضا یا هزینهای که فرد برای گواهی میپردازد بستگی دارد. این دوره، بازه زمانی مورد انتظاری است که هویتها میتوانند به مقدار عمومی اطمینان کنند مشروط بر اینکه کلید خصوصی به خطر نیفتاده باشد.
- نام موضوع (Subject name): نام هویتی که کلید عمومی گواهی متعلق به آن است. این نام از استاندارد X.500 استفاده میکند، بنابراین طوری طراحی شده که در سراسر اینترنت یکتا باشد. این نام همان نام متمایز (DN) هویت است؛ برای مثال:
CN=Java Duke, OU=Java Software Division, O=Oracle Corporation, C=US
این موارد به نام عمومی (CN)، واحد سازمانی (OU)، سازمان (O) و کشور (C) موضوع اشاره دارند.
- •
- اطلاعات کلید عمومی موضوع (Subject public key information): کلید عمومی هویت نامبرده به همراه یک شناسه الگوریتم که مشخص میکند این کلید متعلق به کدام سیستم رمزنگاری کلید عمومی است و پارامترهای کلید مرتبط.
- زنجیرههای گواهی (Certificate Chains)
- دستور keytool میتواند مدخلهای کلید انبار کلید را ایجاد و مدیریت کند که هر یک حاوی یک کلید خصوصی و یک زنجیره گواهی مرتبط هستند. اولین گواهی در زنجیره شامل کلید عمومی متناظر با کلید خصوصی است.
- فایل گواهیهای cacerts (cacerts Certificates File)
- یک فایل گواهی به نام cacerts در دایرکتوری مشخصههای امنیتی قرار دارد:
- لینوکس و مکاواس: JAVA_HOME/lib/security
- ویندوز: JAVA_HOME\lib\security
فایل cacerts نشاندهنده یک انبار کلید در سطح سیستم حاوی گواهیهای CA است. مدیران سیستم میتوانند این فایل را با دستور keytool و با تعیین jks به عنوان نوع انبار کلید پیکربندی و مدیریت کنند. فایل انبار کلید cacerts همراه با مجموعهای از گواهیهای ریشه CA پیشفرض عرضه میشود. در لینوکس، مکاواس و ویندوز میتوانید گواهیهای پیشفرض را با دستور زیر فهرست کنید:
keytool -list -cacerts
گذرواژه اولیه فایل انبار کلید cacerts برابر با changeit است. مدیران سیستم باید این گذرواژه و مجوز دسترسی پیشفرض فایل را پس از نصب SDK تغییر دهند.
نکته: اعتبارسنجی فایل cacerts اهمیت زیادی دارد. از آنجا که به مراجع CA موجود در فایل cacerts به عنوان هویتهایی برای امضا و صدور گواهیها به سایر هویتها اعتماد میکنید، باید فایل cacerts را با دقت مدیریت کنید. فایل cacerts باید تنها شامل گواهیهای مراجع CA باشد که به آنها اعتماد دارید. بررسی گواهیهای ریشه CA موجود در فایل cacerts و تصمیمگیری درباره میزان اعتماد بر عهده شماست. برای حذف یک گواهی CA نامعتبر از فایل cacerts، از گزینه -delete در دستور keytool استفاده کنید. میتوانید فایل cacerts را در دایرکتوری $JAVA_HOME/lib/security کیت توسعه جاوا پیدا کنید. اگر مجوز ویرایش این فایل را ندارید با مدیر سیستم خود تماس بگیرید.
- استاندارد کدگذاری گواهی RFC 1421 اینترنت (Internet RFC 1421 Certificate Encoding Standard)
- گواهیها اغلب به جای کدگذاری دودویی، با استفاده از قالب کدگذاری متنی قابلچاپ تعریفشده توسط استاندارد RFC 1421 اینترنت ذخیره میشوند. این قالب گواهی که به عنوان کدگذاری Base64 نیز شناخته میشود، صدور گواهیها به سایر برنامهها از طریق ایمیل یا سازوکارهای دیگر را آسان میکند.
-
-----BEGIN CERTIFICATE----- encoded certificate goes here. -----END CERTIFICATE-----
- نامهای متمایز X.500 (X.500 Distinguished Names)
- نامهای متمایز X.500 برای شناسایی هویتها مانند مواردی که توسط فیلدهای subject و issuer (امضاکننده) گواهیهای X.509 نامگذاری میشوند، استفاده میشوند. دستور keytool از زیربخشهای زیر پشتیبانی میکند:
- commonName: نام عمومی شخص مانند Susan Jones.
- organizationUnit: نام واحد سازمانی کوچک (مانند دپارتمان یا بخش)؛ برای مثال Purchasing.
- localityName: نام محل یا شهر؛ برای مثال Palo Alto.
- stateName: نام ایالت یا استان؛ برای مثال California.
- 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
مشخص کردن رشته نام متمایز در خط فرمان هرگز اجباری نیست. هنگامی که نام متمایز برای دستوری مورد نیاز باشد اما در خط فرمان ارائه نشود، از کاربر برای تکتک زیرمؤلفهها سوال خواهد شد. در این حالت، نیازی به اسکیپ کردن کاما با بکاسلش نیست.
هشدارها (WARNINGS)
هشدار وارد کردن گواهیهای مورد اعتماد (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 پیش از وارد کردن گواهی اجباری نیست، زیرا قبل از افزودن گواهی به فهرست گواهیهای مورد اعتماد در انبار کلید، دستور -importcert اطلاعات گواهی را چاپ کرده و از شما میخواهد آن را تأیید کنید. در این مرحله میتوانید عملیات وارد کردن را متوقف کنید. اما این کار تنها زمانی ممکن است که دستور -importcert را بدون گزینه -noprompt اجرا کنید. اگر گزینه -noprompt مشخص شده باشد، هیچ تعاملی با کاربر صورت نخواهد گرفت.
هشدار گذرواژهها (PASSWORDS WARNING)
اکثر دستوراتی که روی یک انبار کلید عمل میکنند نیازمند گذرواژه انبار کلید هستند. برخی دستورات نیازمند گذرواژه کلید خصوصی/مخفی هستند. گذرواژهها میتوانند در خط فرمان در گزینههای -storepass و -keypass مشخص شوند. با این حال، گذرواژه نباید در خط فرمان یا اسکریپتها مشخص شود مگر اینکه برای اهداف آزمایشی باشد یا روی یک سیستم امن قرار داشته باشید. هنگامی که یک گزینه گذرواژه الزامی را در خط فرمان مشخص نکنید، از شما درخواست خواهد شد.
هشدار انطباق گواهی (CERTIFICATE CONFORMANCE WARNING)
سند مشخصات گواهی و فهرست ابطال گواهی (CRL) زیرساخت کلید عمومی اینترنت X.509 [https://tools.ietf.org/rfc/rfc5280.txt] مشخصاتی را در مورد گواهیهای منطبق با X.509 تعریف کرده که شامل مقادیر و ترکیبات مقادیر معتبر برای فیلدها و پسوندهای گواهی است.
دستور keytool تمام این قوانین را اجبار نمیکند، بنابراین میتواند گواهیهایی تولید کند که با استاندارد منطبق نیستند، مانند گواهیهای خودامضاشدهای که برای مقاصد آزمایش داخلی استفاده میشوند. گواهیهایی که با استاندارد منطبق نباشند ممکن است توسط JDK یا سایر برنامهها رد شوند. کاربران باید اطمینان حاصل کنند که گزینههای صحیحی را برای -dname، -ext و غیره ارائه میدهند.
وارد کردن یک گواهی مورد اعتماد جدید (IMPORT A NEW TRUSTED CERTIFICATE)
پیش از افزودن گواهی به انبار کلید، دستور keytool با تلاش برای ساخت زنجیرهای از اعتماد از آن گواهی تا یک گواهی خودامضاشده (متعلق به مرجع ریشه CA) با استفاده از گواهیهای مورد اعتماد موجود در انبار کلید، آن را اعتبارسنجی میکند.
اگر گزینه -trustcacerts مشخص شده باشد، گواهیهای اضافی در فایلی به نام cacerts برای زنجیره اعتماد در نظر گرفته میشوند.
اگر دستور keytool نتواند یک مسیر اعتماد از گواهی ورودی تا یک گواهی خودامضاشده (از انبار کلید یا فایل cacerts) برقرار کند، اطلاعات گواهی چاپ شده و از کاربر خواسته میشود با مقایسه اثرانگشتهای نمایشدادهشده با اثرانگشتهای به دست آمده از منبع معتبر دیگر (مانند مالک گواهی)، آن را تأیید کند. پیش از وارد کردن گواهی به عنوان گواهی مورد اعتماد بسیار دقت کنید تا از معتبر بودن آن مطمئن شوید. سپس کاربر این امکان را دارد که عملیات وارد کردن را متوقف کند. اگر گزینه -noprompt مشخص شده باشد، هیچ تعاملی با کاربر انجام نخواهد شد.
وارد کردن پاسخ گواهی (IMPORT A CERTIFICATE REPLY)
هنگامی که پاسخ گواهی را وارد میکنید، پاسخ گواهی با گواهیهای مورد اعتماد موجود در انبار کلید و در صورت تعیین گزینه -trustcacerts با گواهیهای پیکربندیشده در فایل انبار کلید cacerts اعتبارسنجی میشود.
روشهای تعیین معتبر بودن پاسخ گواهی به شرح زیر است:
- اگر پاسخ یک گواهی منفرد X.509 باشد، دستور keytool تلاش میکند یک زنجیره اعتماد از پاسخ گواهی تا یک گواهی خودامضاشده (متعلق به مرجع ریشه CA) برقرار کند. پاسخ گواهی و سلسلهمراتب گواهیها برای احراز هویت پاسخ گواهی از زنجیره گواهی جدید نامهای مستعار استفاده میشود. اگر زنجیره اعتماد برقرار نشود، پاسخ گواهی وارد نخواهد شد. در این حالت، دستور keytool گواهی را چاپ نکرده و از کاربر برای تأیید سوال نمیکند، زیرا تشخیص اصالت پاسخ گواهی برای کاربر بسیار دشوار است.
- اگر پاسخ یک زنجیره گواهی با قالب PKCS #7 یا دنبالهای از گواهیهای X.509 باشد، زنجیره به گونهای مرتب میشود که گواهی کاربر در ابتدا و سپس صفر یا چند گواهی CA قرار میگیرد. اگر زنجیره با یک گواهی ریشه خودامضاشده CA پایان یابد و گزینه -trustcacerts مشخص شده باشد، دستور keytool تلاش میکند آن را با هر یک از گواهیهای مورد اعتماد موجود در انبار کلید یا فایل cacerts مطابقت دهد. اگر زنجیره با یک گواهی ریشه خودامضاشده CA پایان نیابد و گزینه -trustcacerts مشخص شده باشد، دستور keytool تلاش میکند گواهی ریشه را از گواهیهای مورد اعتماد موجود در انبار کلید یا فایل cacerts پیدا کرده و به انتهای زنجیره اضافه کند. اگر گواهی پیدا نشود و گزینه -noprompt مشخص نشده باشد، اطلاعات آخرین گواهی موجود در زنجیره چاپ شده و از کاربر برای تأیید آن سوال خواهد شد.
اگر کلید عمومی موجود در پاسخ گواهی با کلید عمومی کاربر که از قبل با alias ذخیره شده مطابقت داشته باشد، زنجیره گواهی قدیمی با زنجیره گواهی جدید موجود در پاسخ جایگزین میشود. زنجیره قدیمی تنها با یک keypass معتبر قابل جایگزینی است و بنابراین گذرواژه مورد استفاده برای محافظت از کلید خصوصی مدخل ارائه میشود. اگر هیچ گذرواژهای ارائه نشود و گذرواژه کلید خصوصی با گذرواژه انبار کلید متفاوت باشد، از کاربر درخواست خواهد شد.
این دستور در نسخههای قبلی -import نام داشت. این نام قدیمی همچنان در این نسخه پشتیبانی میشود، اما نام جدید -importcert ترجیح داده میشود.
| 2026 | JDK 25.0.4.1 |