.\" Copyright (c) 1998, 2024, Oracle and/or its affiliates. All rights reserved. .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. .\" .\" This code is free software; you can redistribute it and/or modify it .\" under the terms of the GNU General Public License version 2 only, as .\" published by the Free Software Foundation. .\" .\" This code is distributed in the hope that it will be useful, but WITHOUT .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or .\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License .\" version 2 for more details (a copy is included in the LICENSE file that .\" accompanied this code). .\" .\" You should have received a copy of the GNU General Public License version .\" 2 along with this work; if not, write to the Free Software Foundation, .\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. .\" .\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA .\" or visit www.oracle.com if you need additional information or have any .\" questions. .\" '\" t .\" Automatically generated by Pandoc 2.19.2 .\" .\" Define V font for inline verbatim, using C font in formats .\" that render this, and otherwise B font. .ie "\f[CB]x\f[R]"x" \{\ . ftr V B . ftr VI BI . ftr VB B . ftr VBI BI .\} .el \{\ . ftr V CR . ftr VI CI . ftr VB CB . ftr VBI CBI .\} .TH "JARSIGNER" "1" "2024" "JDK 22" "دستورات JDK" .hy .SH "نام (NAME)" .PP jarsigner-openjdk22 \- امضا و اعتبارسنجی فایل‌های JAR در OpenJDK 22 .SH "خلاصه دستور (SYNOPSIS)" .PP \f[V]jarsigner\f[R] [\f[I]گزینه‌ها\f[R]] \f[I]jar-file\f[R] \f[I]alias\f[R] .PP \f[V]jarsigner\f[R] \f[V]-verify\f[R] [\f[I]گزینه‌ها\f[R]] \f[I]jar-file\f[R] [\f[I]alias\f[R] ...] .PP \f[V]jarsigner\f[R] \f[V]-version\f[R] .TP \f[I]options\f[R] گزینه‌های خط فرمان. بخش \f[B]گزینه‌های JARSIGNER\f[R] را ببینید. .TP \f[V]-verify\f[R] گزینه \f[V]-verify\f[R] می‌تواند صفر یا چند نام مستعار مخزن کلید (keystore alias) را بعد از نام فایل JAR دریافت کند. هنگامی که گزینه \f[V]-verify\f[R] مشخص می‌شود، دستور \f[V]jarsigner\f[R] بررسی می‌کند که گواهی استفاده‌شده برای اعتبارسنجی هر مدخل امضاشده در فایل JAR با یکی از نام‌های مستعار مخزن کلید مطابقت داشته باشد. نام‌های مستعار در مخزن کلید مشخص‌شده با \f[V]-keystore\f[R] یا در مخزن کلید پیش‌فرض تعریف شده‌اند. .RS .PP اگر گزینه \f[V]-strict\f[R] را نیز مشخص کنید و دستور \f[V]jarsigner\f[R] هشدارهای شدیدی شناسایی کند، پیام \[dq]jar verified, with signer errors\[dq] نمایش داده می‌شود. .RE .TP \f[I]jar-file\f[R] فایل JAR که باید امضا شود. .RS .PP اگر گزینه \f[V]-strict\f[R] را نیز مشخص کرده باشید و دستور \f[V]jarsigner\f[R] هشدارهای شدیدی شناسایی کند، پیام \[dq]jar signed, with signer errors\[dq] نمایش داده می‌شود. .RE .TP \f[I]alias\f[R] نام‌های مستعار در مخزن کلید تعیین‌شده توسط \f[V]-keystore\f[R] یا در مخزن کلید پیش‌فرض تعریف می‌شوند. .TP \f[V]-version\f[R] گزینه \f[V]-version\f[R] نسخه برنامه \f[V]jarsigner\f[R] را چاپ می‌کند. .SH "توضیحات (DESCRIPTION)" .PP ابزار \f[V]jarsigner\f[R] دو هدف اصلی دارد: .IP \[bu] 2 امضای فایل‌های آرشیو جاوا (JAR). .IP \[bu] 2 اعتبارسنجی امضاها و بررسی یکپارچگی فایل‌های JAR امضاشده. .PP قابلیت JAR امکان بسته‌بندی فایل‌های کلاس، تصاویر، صداها و سایر داده‌های دیجیتال را در یک تک‌فایل جهت توزیع سریع‌تر و آسان‌تر فراهم می‌کند. ابزاری به نام \f[V]jar\f[R] به توسعه‌دهندگان امکان ساخت فایل‌های JAR را می‌دهد. (از نظر فنی، هر فایل zip نیز می‌تواند یک فایل JAR تلقی شود، هرچند وقتی توسط دستور \f[V]jar\f[R] ایجاد شده یا توسط دستور \f[V]jarsigner\f[R] پردازش می‌شود، فایل‌های JAR شامل یک فایل \f[V]META-INF/MANIFEST.MF\f[R] نیز خواهند بود.) .PP امضای دیجیتال رشته‌ای از بیت‌ها است که از روی داده‌ها (داده‌های در حال امضا) و کلید خصوصی یک موجودیت (شخص، شرکت و غیره) محاسبه می‌شود. همانند یک امضای دست‌نویس، امضای دیجیتال ویژگی‌های مفید بسیاری دارد: .IP \[bu] 2 اصالت آن قابل تایید و اعتبارسنجی است. محاسبه آن از کلید عمومی موجودیت استفاده می‌کند که مربوط به کلید خصوصی استفاده‌شده برای تولید امضا است. .IP \[bu] 2 امضا قابل جعل نیست، با این فرض که کلید خصوصی محرمانه باقی بماند. .IP \[bu] 2 داده‌های امضاشده قابل تغییر نیستند. اگر داده‌ها تغییر کنند، اصالت امضا دیگر قابل اعتبارسنجی نخواهد بود. .PP برای تولید امضای یک موجودیت برای یک فایل، آن موجودیت ابتدا باید یک جفت کلید عمومی/خصوصی مرتبط با خود و یک یا چند گواهی که کلید عمومی آن را تایید می‌کنند داشته باشد. گواهی بیانیه‌ای با امضای دیجیتال از سوی یک موجودیت است که بیان می‌کند کلید عمومی موجودیت دیگر دارای مقدار مشخصی است. .PP دستور \f[V]jarsigner\f[R] از اطلاعات کلید و گواهی موجود در یک مخزن کلید (keystore) برای تولید امضاهای دیجیتال برای فایل‌های JAR استفاده می‌کند. مخزن کلید پایگاه‌داده‌ای از کلیدهای خصوصی و زنجیره‌های گواهی X.509 مرتبط با آن‌ها است که کلیدهای عمومی متناظر را تایید می‌کنند. دستور \f[V]keytool\f[R] برای ایجاد و مدیریت مخازن کلید استفاده می‌شود. .PP دستور \f[V]jarsigner\f[R] از کلید خصوصی یک موجودیت برای تولید امضا استفاده می‌کند. فایل JAR امضاشده، علاوه بر موارد دیگر، شامل کپی گواهی مربوط به کلید عمومی متناظر با کلید خصوصی استفاده‌شده برای امضای فایل از مخزن کلید است. دستور \f[V]jarsigner\f[R] می‌تواند امضای دیجیتال فایل JAR امضاشده را با استفاده از گواهی درون آن (در فایل بلوک امضای آن) اعتبارسنجی کند. .PP دستور \f[V]jarsigner\f[R] می‌تواند امضاهایی شامل برچسب زمانی (timestamp) تولید کند که به سیستم‌ها یا مستقرکنندگان امکان می‌دهد بررسی کنند آیا فایل JAR در زمانی که گواهی امضا هنوز معتبر بوده، امضا شده است یا خیر. .PP علاوه بر این، رابط‌های برنامه‌نویسی (APIها) به برنامه‌ها اجازه می‌دهند اطلاعات برچسب زمانی را دریافت کنند. .PP در حال حاضر، دستور \f[V]jarsigner\f[R] فقط می‌تواند فایل‌های JAR ایجادشده توسط دستور \f[V]jar\f[R] یا فایل‌های zip را امضا کند. فایل‌های JAR همان فایل‌های zip هستند، با این تفاوت که دارای فایل \f[V]META-INF/MANIFEST.MF\f[R] نیز می‌باشند. هنگامی که دستور \f[V]jarsigner\f[R] یک فایل zip را امضا می‌کند، یک فایل \f[V]META-INF/MANIFEST.MF\f[R] ایجاد می‌شود. .PP رفتار پیش‌فرض دستور \f[V]jarsigner\f[R] امضای یک فایل JAR یا zip است. برای اعتبارسنجی یک فایل JAR امضاشده از گزینه \f[V]-verify\f[R] استفاده کنید. .PP دستور \f[V]jarsigner\f[R] همچنین پس از امضا یا اعتبارسنجی تلاش می‌کند گواهی امضاکننده را ارزیابی کند. در طول ارزیابی، هنگامی که گزینه \f[V]-revCheck\f[R] مشخص شده باشد، وضعیت ابطال هر گواهی در زنجیره گواهی امضاکننده را بررسی می‌کند. اگر خطای ارزیابی یا هر مشکل دیگری وجود داشته باشد، دستور پیام‌های هشدار تولید می‌کند. اگر گزینه \f[V]-strict\f[R] را مشخص کنید، دستور هشدارهای شدید را به عنوان خطا در نظر می‌گیرد. بخش \f[B]خطاها و هشدارها\f[R] را ببینید. .SH "نام‌های مستعار مخزن کلید (KEYSTORE ALIASES)" .PP تمامی موجودیت‌های مخزن کلید با نام‌های مستعار منحصربه‌فرد (aliases) قابل دسترسی هستند. .PP هنگامی که از دستور \f[V]jarsigner\f[R] برای امضای فایل JAR استفاده می‌کنید، باید نام مستعار مدخل مخزن کلید را که حاوی کلید خصوصی مورد نیاز برای تولید امضا است مشخص کنید. اگر هیچ فایل خروجی مشخص نشود، فایل JAR امضاشده را روی فایل JAR اصلی بازنویسی می‌کند. .PP مخازن کلید با گذرواژه محافظت می‌شوند، بنابراین گذرواژه مخزن (store password) باید مشخص شود. اگر آن را در خط فرمان مشخص نکنید، از شما خواسته می‌شود آن را وارد کنید. به همین ترتیب، کلیدهای خصوصی در مخزن کلید با گذرواژه محافظت می‌شوند، بنابراین گذرواژه کلید خصوصی باید مشخص شود و اگر آن را در خط فرمان مشخص نکنید و با گذرواژه مخزن یکسان نباشد، از شما خواسته می‌شود آن را وارد کنید. .SH "محل مخزن کلید (KEYSTORE LOCATION)" .PP دستور \f[V]jarsigner\f[R] دارای گزینه \f[V]-keystore\f[R] برای تعیین URL مخزن کلید مورد استفاده است. مخزن کلید به طور پیش‌فرض در فایلی به نام \f[V].keystore\f[R] در دایرکتوری خانگی کاربر، طبق ویژگی سیستمی \f[V]user.home\f[R] ذخیره می‌شود. .PP \f[B]لینوکس و macOS:\f[R] ویژگی \f[V]user.home\f[R] به طور پیش‌فرض روی دایرکتوری خانگی کاربر تنظیم است. .PP جریان ورودی از گزینه \f[V]-keystore\f[R] به متد \f[V]KeyStore.load\f[R] ارسال می‌شود. اگر \f[V]NONE\f[R] به عنوان URL مشخص شود، یک جریان null به متد \f[V]KeyStore.load\f[R] ارسال می‌گردد. هنگامی که کلاس \f[V]KeyStore\f[R] مبتنی بر فایل نیست (مثلاً زمانی که روی یک توکن سخت‌افزاری قرار دارد)، باید مقدار \f[V]NONE\f[R] مشخص شود. .SH "پیاده‌سازی مخزن کلید (KEYSTORE IMPLEMENTATION)" .PP کلاس \f[V]KeyStore\f[R] ارائه‌شده در بسته \f[V]java.security\f[R] رابط‌های مشخصی را برای دسترسی و اصلاح اطلاعات در مخزن کلید فراهم می‌کند. شما می‌توانید چندین پیاده‌سازی عینی مختلف داشته باشید که هر پیاده‌سازی برای نوع خاصی از مخزن کلید است. .PP در حال حاضر دو ابزار خط فرمان وجود دارند که از پیاده‌سازی‌های مخزن کلید استفاده می‌کنند (\f[V]keytool\f[R] و \f[V]jarsigner\f[R]). .PP پیاده‌سازی پیش‌فرض مخزن کلید \f[V]PKCS12\f[R] است. این یک مخزن کلید چندسکویی بر اساس استاندارد نحوی تبادل اطلاعات شخصی RSA PKCS12 است. این استاندارد در درجه اول برای ذخیره یا انتقال کلیدهای خصوصی، گواهی‌ها و اسرار گوناگون کاربر در نظر گرفته شده است. پیاده‌سازی درون‌ساخت دیگری نیز وجود دارد که توسط اوراکل ارائه شده است. این پیاده‌سازی، مخزن کلید را به صورت فایلی با نوع اختصاصی به نام \f[V]JKS\f[R] پیاده می‌کند. این نوع، از هر کلید خصوصی با گذرواژه اختصاصی خود محافظت می‌کند و همچنین یکپارچگی کل مخزن کلید را با یک گذرواژه (احتمالاً متفاوت) تأمین می‌نماید. .PP پیاده‌سازی‌های مخزن کلید مبتنی بر ارائه‌دهنده (provider-based) هستند، به این معنی که رابط‌های برنامه‌نویسی ارائه‌شده توسط کلاس \f[V]KeyStore\f[R] بر اساس یک رابط ارائه‌دهنده خدمات (SPI) پیاده‌سازی شده‌اند. کلاس انتزاعی متناظر \f[V]KeystoreSpi\f[R] نیز در بسته \f[V]java.security\f[R] قرار دارد و متدهای رابط ارائه‌دهنده خدمات را که ارائه‌دهندگان باید پیاده کنند تعریف می‌نماید. اصطلاح ارائه‌دهنده به یک بسته یا مجموعه‌ای از بسته‌ها اشاره دارد که پیاده‌سازی عینی از زیرمجموعه‌ای از خدمات قابل دسترسی توسط API امنیت جاوا را ارائه می‌دهند. برای ارائه پیاده‌سازی مخزن کلید، کلاینت‌ها باید یک ارائه‌دهنده پیاده کنند و پیاده‌سازی زیرکلاس \f[V]KeystoreSpi\f[R] را ارائه دهند، همان‌طور که در \f[B]How to Implement a Provider in the Java Cryptography Architecture\f[R] [https://www.oracle.com/pls/topic/lookup?ctx=en/java/javase&id=security_guide_implement_provider_jca] شرح داده شده است. .PP برنامه‌ها می‌توانند انواع مختلفی از پیاده‌سازی‌های مخزن کلید را از ارائه‌دهندگان مختلف، با استفاده از متد کارخانه‌ای \f[V]getInstance\f[R] در کلاس \f[V]KeyStore\f[R] انتخاب کنند. نوع مخزن کلید، قالب ذخیره‌سازی و داده‌های اطلاعات مخزن کلید و الگوریتم‌های مورد استفاده برای محافظت از کلیدهای خصوصی در مخزن کلید و یکپارچگی خود مخزن کلید را تعریف می‌کند. پیاده‌سازی‌های مخزن کلید از انواع مختلف با یکدیگر سازگار نیستند. .PP دستورات \f[V]jarsigner\f[R] می‌توانند مخازن کلید مبتنی بر فایل را از هر مکانی که با URL قابل تعیین باشد بخوانند. علاوه بر این، این دستورات می‌توانند مخازن کلید غیرمبتنی بر فایل مانند موارد ارائه‌شده توسط MSCAPI در ویندوز و PKCS11 را در همه پلتفرم‌ها بخوانند. .PP برای دستورات \f[V]jarsigner\f[R] و \f[V]keytool\f[R]، می‌توانید نوع مخزن کلید را در خط فرمان با گزینه \f[V]-storetype\f[R] مشخص کنید. .PP اگر نوع مخزن کلید را صریحاً مشخص نکنید، ابزارها پیاده‌سازی مخزن کلید را بر اساس مقدار ویژگی \f[V]keystore.type\f[R] مشخص‌شده در فایل ویژگی‌های امنیتی انتخاب می‌کنند. فایل ویژگی‌های امنیتی \f[V]java.security\f[R] نام دارد و در دایرکتوری ویژگی‌های امنیتی JDK یعنی \f[V]java.home/conf/security\f[R] قرار دارد. .PP هر ابزار مقدار \f[V]keystore.type\f[R] را دریافت کرده و سپس تمام ارائه‌دهندگان نصب‌شده را بررسی می‌کند تا ارائه‌دهنده‌ای را پیدا کند که مخازن کلید آن نوع را پیاده‌سازی کرده باشد. سپس از پیاده‌سازی مخزن کلید آن ارائه‌دهنده استفاده می‌کند. .PP کلاس \f[V]KeyStore\f[R] متدی ایستا به نام \f[V]getDefaultType\f[R] تعریف می‌کند که به برنامه‌ها امکان می‌دهد مقدار ویژگی \f[V]keystore.type\f[R] را بازیابی کنند. خط کد زیر یک نمونه از نوع مخزن کلید پیش‌فرض را طبق ویژگی \f[V]keystore.type\f[R] ایجاد می‌کند: .RS .PP \f[V]KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());\f[R] .RE .PP نوع پیش‌فرض مخزن کلید \f[V]pkcs12\f[R] است که یک مخزن کلید چندسکویی بر اساس استاندارد نحوی تبادل اطلاعات شخصی RSA PKCS12 می‌باشد. این مورد با خط زیر در فایل ویژگی‌های امنیتی مشخص شده است: .RS .PP \f[V]keystore.type=pkcs12\f[R] .RE .PP بزرگی و کوچکی حروف در نام‌گذاری نوع مخزن کلید اهمیتی ندارد. به عنوان مثال، \f[V]JKS\f[R] همانند \f[V]jks\f[R] است. .PP برای اینکه ابزارها از پیاده‌سازی مخزن کلیدی غیر از پیش‌فرض استفاده کنند، می‌توانید آن خط را برای تعیین نوع مخزن کلید دیگری تغییر دهید. به عنوان مثال، اگر می‌خواهید از پیاده‌سازی مخزن کلید \f[V]jks\f[R] اوراکل استفاده کنید، خط را به صورت زیر تغییر دهید: .RS .PP \f[V]keystore.type=jks\f[R] .RE .SH "الگوریتم‌های پشتیبانی‌شده (SUPPORTED ALGORITHMS)" .PP به طور پیش‌فرض، دستور \f[V]jarsigner\f[R] یک فایل JAR را با استفاده از یکی از الگوریتم‌ها و پسوندهای فایل بلوک زیر بسته به نوع و اندازه کلید خصوصی امضا می‌کند: .PP الگوریتم‌های پیش‌فرض امضا و پسوندهای فایل بلوک .TS tab(@); l l l l. T{ keyalg T}@T{ keysize T}@T{ default sigalg T}@T{ block file extension T} _ T{ DSA T}@T{ هر اندازه‌ای T}@T{ SHA256withDSA T}@T{ \&.DSA T} T{ RSA T}@T{ < 624 T}@T{ SHA256withRSA T}@T{ \&.RSA T} T{ T}@T{ <= 7680 T}@T{ SHA384withRSA T}@T{ T} T{ T}@T{ > 7680 T}@T{ SHA512withRSA T}@T{ T} T{ EC T}@T{ < 512 T}@T{ SHA384withECDSA T}@T{ \&.EC T} T{ T}@T{ >= 512 T}@T{ SHA512withECDSA T}@T{ T} T{ RSASSA-PSS T}@T{ < 624 T}@T{ RSASSA-PSS (with SHA-256) T}@T{ \&.RSA T} T{ T}@T{ <= 7680 T}@T{ RSASSA-PSS (with SHA-384) T}@T{ T} T{ T}@T{ > 7680 T}@T{ RSASSA-PSS (with SHA-512) T}@T{ T} T{ EdDSA T}@T{ 255 T}@T{ Ed25519 T}@T{ \&.EC T} T{ T}@T{ 448 T}@T{ Ed448 T}@T{ T} .TE .IP \[bu] 2 اگر یک کلید RSASSA-PSS با پارامترها کدگذاری شده باشد، jarsigner از همان پارامترها در امضا استفاده خواهد کرد. در غیر این صورت، jarsigner از پارامترهایی استفاده می‌کند که بر اساس اندازه کلید طبق جدول بالا تعیین می‌شوند. به عنوان مثال، یک کلید ۳۰۷۲ بیتی RSASSA-PSS از RSASSA-PSS به عنوان الگوریتم امضا و SHA-384 به عنوان الگوریتم‌های هش و MGF1 استفاده خواهد کرد. .PP این الگوریتم‌های امضای پیش‌فرض را می‌توان با استفاده از گزینه \f[V]-sigalg\f[R] بازنویسی کرد. .PP دستور \f[V]jarsigner\f[R] از ویژگی‌های امنیتی \f[V]jdk.jar.disabledAlgorithms\f[R] و \f[V]jdk.security.legacyAlgorithms\f[R] برای تعیین الگوریتم‌هایی که ریسک امنیتی محسوب می‌شوند استفاده می‌کند. اگر فایل JAR با هر الگوریتمی که غیرفعال شده امضا شده باشد، با آن مانند یک فایل JAR امضانشده رفتار خواهد شد. اگر فایل JAR با هر یک از الگوریتم‌های موروثی (legacy) امضا شده باشد، به عنوان امضاشده همراه با یک هشدار اطلاع‌رسانی در نظر گرفته می‌شود تا به کاربران اطلاع دهد که این الگوریتم موروثی در به‌روزرسانی‌های آینده غیرفعال خواهد شد. برای دریافت خروجی اعتبارسنجی با جزئیات، عبارت \f[V]-J-Djava.security.debug=jar\f[R] را بگنجانید. ویژگی‌های امنیتی \f[V]jdk.jar.disabledAlgorithms\f[R] و \f[V]jdk.security.legacyAlgorithms\f[R] در فایل \f[V]java.security\f[R] (واقع در دایرکتوری \f[V]$JAVA_HOME/conf/security\f[R] متعلق به JDK) تعریف شده‌اند. .PP \f[B]نکته:\f[R] .PP به منظور بهبود امنیت پیش‌فرض، اندازه کلید پیش‌فرض و نام‌های الگوریتم امضا به طور دوره‌ای با هر نسخه جدید JDK به مقادیر قوی‌تر به‌روزرسانی می‌شوند. اگر قابلیت همکاری با نسخه‌های قدیمی‌تر JDK اهمیت دارد، لطفاً اطمینان حاصل کنید که مقادیر پیش‌فرض توسط آن نسخه‌ها پشتیبانی می‌شوند، یا در غیر این صورت با مسئولیت خود از گزینه \f[V]-sigalg\f[R] برای لغو مقادیر پیش‌فرض استفاده کنید. .SH "فایل JAR امضاشده (THE SIGNED JAR FILE)" .PP هنگامی که از دستور \f[V]jarsigner\f[R] برای امضای یک فایل JAR استفاده می‌شود، فایل JAR امضاشده خروجی دقیقاً همانند فایل JAR ورودی است، با این تفاوت که دو فایل اضافی در دایرکتوری META-INF آن قرار می‌گیرد: .IP \[bu] 2 یک فایل امضا با پسوند \f[V].SF\f[R] .IP \[bu] 2 یک فایل بلوک امضا با پسوند \f[V].DSA\f[R]، \f[V].RSA\f[R] یا \f[V].EC\f[R] .PP نام پایه این دو فایل از مقدار گزینه \f[V]-sigfile\f[R] گرفته می‌شود. به عنوان مثال، هنگامی که گزینه \f[V]-sigfile MKSIGN\f[R] باشد، فایل‌ها \f[V]MKSIGN.SF\f[R] و \f[V]MKSIGN.RSA\f[R] نام‌گذاری می‌شوند. در این سند فرض می‌کنیم امضاکننده همیشه از کلید RSA استفاده می‌کند. .PP اگر گزینه \f[V]-sigfile\f[R] در خط فرمان مشخص نشود، نام پایه برای فایل‌های \f[V].SF\f[R] و بلوک امضا، ۸ کاراکتر اول نام مستعار مشخص‌شده در خط فرمان خواهد بود که همگی به حروف بزرگ تبدیل شده‌اند. اگر نام مستعار کمتر از ۸ کاراکتر داشته باشد، کل نام مستعار استفاده می‌شود. اگر نام مستعار شامل کاراکترهایی باشد که در نام فایل امضا مجاز نیستند، هر یک از این کاراکترها در تشکیل نام فایل به یک کاراکتر خط زیر (_) تبدیل می‌شوند. کاراکترهای مجاز شامل حروف، ارقام، خط زیر و خط تیره هستند. .SH "فایل امضا (SIGNATURE FILE)" .PP یک فایل امضا (فایل \f[V].SF\f[R]) شبیه به فایل مانیفست است که همیشه در زمان استفاده از دستور \f[V]jarsigner\f[R] برای امضای فایل، در فایل JAR گنجانده می‌شود. برای هر فایل منبع گنجانده‌شده در فایل JAR، فایل \f[V].SF\f[R] همانند فایل مانیفست دارای دو خط است که موارد زیر را فهرست می‌کند: .IP \[bu] 2 نام فایل .IP \[bu] 2 نام الگوریتم چکیده (SHA) .IP \[bu] 2 مقدار چکیده SHA .PP \f[B]نکته:\f[R] .PP نام الگوریتم چکیده (SHA) و مقدار چکیده SHA در یک خط قرار دارند. .PP در فایل مانیفست، مقدار چکیده SHA برای هر فایل منبع، چکیده (هش) داده‌های باینری در فایل منبع است. در فایل \f[V].SF\f[R]، مقدار چکیده برای یک فایل منبع مشخص، هش دو خط مربوط به فایل منبع در فایل مانیفست است. .PP فایل امضا به طور پیش‌فرض شامل یک هدر با هش کل فایل مانیفست است. این هدر همچنین شامل هش هدر مانیفست نیز می‌باشد. وجود این هدر بهینه‌سازی فرآیند اعتبارسنجی را امکان‌پذیر می‌سازد. بخش \f[B]اعتبارسنجی فایل JAR\f[R] را ببینید. .SH "فایل بلوک امضا (SIGNATURE BLOCK FILE)" .PP فایل \f[V].SF\f[R] امضا شده و امضا در فایل بلوک امضا قرار می‌گیرد. این فایل همچنین حاوی گواهی یا زنجیره گواهی کدگذاری‌شده از مخزن کلید است که کلید عمومی متناظر با کلید خصوصی استفاده‌شده برای امضا را تایید می‌کند. این فایل بسته به الگوریتم کلید مورد استفاده، دارای پسوند \f[V].DSA\f[R]، \f[V].RSA\f[R] یا \f[V].EC\f[R] است. جدول بخش \f[B]الگوریتم‌های پشتیبانی‌شده\f[R] را ببینید. .SH "برچسب زمانی امضا (SIGNATURE TIME STAMP)" .PP دستور \f[V]jarsigner\f[R] که با گزینه‌های زیر استفاده شود، هنگام امضای فایل JAR یک برچسب زمانی امضا تولید و ذخیره می‌کند: .IP \[bu] 2 \f[V]-tsa\f[R] \f[I]url\f[R] .IP \[bu] 2 \f[V]-tsacert\f[R] \f[I]alias\f[R] .IP \[bu] 2 \f[V]-tsapolicyid\f[R] \f[I]policyid\f[R] .IP \[bu] 2 \f[V]-tsadigestalg\f[R] \f[I]algorithm\f[R] .PP بخش \f[B]گزینه‌های JARSIGNER\f[R] را ببینید. .SH "اعتبارسنجی فایل JAR (JAR FILE VERIFICATION)" .PP اعتبارسنجی موفقیت‌آمیز فایل JAR زمانی رخ می‌دهد که امضاها معتبر باشند و هیچ‌یک از فایل‌هایی که هنگام تولید امضا در فایل JAR وجود داشته‌اند، از آن زمان تغییر نکرده باشند. اعتبارسنجی فایل JAR شامل مراحل زیر است: .IP "1." 3 اعتبارسنجی امضای فایل \f[V].SF\f[R]. .RS 4 .PP این اعتبارسنجی تضمین می‌کند که امضای ذخیره‌شده در هر فایل بلوک امضا با استفاده از کلید خصوصی متناظر با کلید عمومی که گواهی (یا زنجیره گواهی) آن در فایل بلوک امضا ظاهر شده، تولید شده است. همچنین تضمین می‌کند که امضا یک امضای معتبر از فایل امضای متناظر (\f[V].SF\f[R]) است و بنابراین فایل \f[V].SF\f[R] دستکاری نشده است. .RE .IP "2." 3 اعتبارسنجی چکیده فهرست‌شده در هر مدخل در فایل \f[V].SF\f[R] با بخش متناظر در مانیفست. .RS 4 .PP فایل \f[V].SF\f[R] به طور پیش‌فرض شامل هدی است که حاوی هش کل فایل مانیفست می‌باشد. هنگامی که این هدر وجود دارد، فرآیند اعتبارسنجی می‌تواند بررسی کند که آیا هش موجود در هدر با هش فایل مانیفست مطابقت دارد یا خیر. اگر مطابقت وجود داشته باشد، اعتبارسنجی به مرحله بعدی می‌رود. .PP اگر تطابقی وجود نداشته باشد، اعتبارسنجی کمتر بهینه‌شده‌ای لازم است تا اطمینان حاصل شود که هش در بخش اطلاعات هر فایل منبع در فایل \f[V].SF\f[R] برابر با هش بخش متناظر آن در فایل مانیفست است. بخش فایل امضا را ببینید. .PP یکی از دلایلی که ممکن است هش فایل مانیفست ذخیره‌شده در هدر فایل \f[V].SF\f[R] با هش فایل مانیفست فعلی برابر نباشد این است که پس از امضای فایل، بخش‌هایی برای فایل‌های جدیداً اضافه‌شده به آن افزوده شده باشد. به عنوان مثال، فرض کنید یک یا چند فایل (با استفاده از ابزار \f[V]jar\f[R]) به فایل JAR امضاشده‌ای که از قبل دارای امضا و فایل \f[V].SF\f[R] است اضافه شده باشد. اگر فایل JAR دوباره توسط یک امضاکننده دیگر امضا شود، فایل مانیفست تغییر می‌کند (بخش‌هایی برای فایل‌های جدید توسط ابزار \f[V]jarsigner\f[R] به آن افزوده می‌شود) و یک فایل \f[V].SF\f[R] جدید ایجاد می‌گردد، اما فایل \f[V].SF\f[R] اصلی بدون تغییر باقی می‌ماند. اگر هیچ‌یک از فایل‌هایی که در زمان تولید امضای اصلی در فایل JAR بودند از آن زمان تغییر نکرده باشند، اعتبارسنجی همچنان موفقیت‌آمیز تلقی می‌شود. این به این دلیل است که هش‌های موجود در بخش‌های غیرهدر فایل \f[V].SF\f[R] با هش‌های بخش‌های متناظر در فایل مانیفست برابر هستند. .RE .IP "3." 3 خواندن هر فایل در فایل JAR که دارای مدخلی در فایل \f[V].SF\f[R] است. در حین خواندن، چکیده فایل محاسبه شده و نتیجه با چکیده این فایل در بخش مانیفست مقایسه می‌شود. چکیده‌ها باید یکسان باشند، در غیر این صورت اعتبارسنجی با شکست مواجه می‌شود. .RS 4 .PP اگر هرگونه شکست جدی در حین فرآیند اعتبارسنجی رخ دهد، فرآیند متوقف شده و یک استثنای امنیتی (security exception) صادر می‌شود. دستور \f[V]jarsigner\f[R] این استثنا را دریافت کرده و نمایش می‌دهد. .RE .IP "4." 3 بررسی استفاده از الگوریتم‌های غیرفعال‌شده. بخش \f[B]الگوریتم‌های پشتیبانی‌شده\f[R] را ببینید. .PP \f[B]نکته:\f[R] .PP شما باید هشدارهای اضافی (یا در صورت تعیین گزینه \f[V]-strict\f[R]، خطاها) و همچنین محتوای گواهی را (با تعیین گزینه‌های \f[V]-verbose\f[R] و \f[V]-certs\f[R]) بخوانید تا مشخص شود آیا می‌توان به امضا اعتماد کرد یا خیر. .SH "امضاهای چندگانه برای فایل JAR (MULTIPLE SIGNATURES FOR A JAR FILE)" .PP یک فایل JAR را می‌توان با اجرای چندباره دستور \f[V]jarsigner\f[R] روی فایل و تعیین نام مستعار برای اشخاص مختلف در هر بار، توسط چند نفر امضا کرد، به صورت زیر: .IP .nf \f[CB] jarsigner myBundle.jar susan jarsigner myBundle.jar kevin \f[R] .fi .PP هنگامی که یک فایل JAR چندین بار امضا می‌شود، چندین جفت فایل \f[V].SF\f[R] و بلوک امضا در فایل JAR حاصل قرار می‌گیرد، یک جفت برای هر امضا. در مثال قبلی، فایل JAR خروجی شامل فایل‌هایی با نام‌های زیر خواهد بود: .IP .nf \f[CB] SUSAN.SF SUSAN.RSA KEVIN.SF KEVIN.RSA \f[R] .fi .SH "گزینه‌های JARSIGNER (OPTIONS FOR JARSIGNER)" .PP بخش‌های زیر گزینه‌های \f[V]jarsigner\f[R] را شرح می‌دهند. به استانداردهای زیر توجه فرمایید: .IP \[bu] 2 تمام نام‌های گزینه‌ها با یک خط تیره (-) شروع می‌شوند. .IP \[bu] 2 گزینه‌ها را می‌توان به هر ترتیبی ارائه داد. .IP \[bu] 2 مواردی که با حروف کج (ایتالیک) یا زیرخط‌دار نمایش داده شده‌اند (مقادیر گزینه‌ها)، نشان‌دهنده مقادیر واقعی هستند که باید وارد شوند. .IP \[bu] 2 گزینه‌های \f[V]-storepass\f[R]، \f[V]-keypass\f[R]، \f[V]-sigfile\f[R]، \f[V]-sigalg\f[R]، \f[V]-digestalg\f[R]، \f[V]-signedjar\f[R] و گزینه‌های مرتبط با TSA تنها هنگام امضای فایل JAR مرتبط هستند و هنگام اعتبارسنجی فایل JAR امضاشده کاربردی ندارند. گزینه \f[V]-keystore\f[R] هم برای امضا و هم برای اعتبارسنجی فایل JAR مرتبط است. علاوه بر این، نام‌های مستعار هنگام امضا و اعتبارسنجی فایل JAR مشخص می‌شوند. .TP \f[V]-keystore\f[R] \f[I]url\f[R] نشانی URL نشان‌دهنده محل مخزن کلید را مشخص می‌کند. این گزینه به طور پیش‌فرض روی فایل \f[V].keystore\f[R] در دایرکتوری خانگی کاربر، طبق ویژگی سیستمی \f[V]user.home\f[R] تنظیم است. .RS .PP مخزن کلید هنگام امضا الزامی است. هنگامی که مخزن کلید پیش‌فرض وجود ندارد یا اگر می‌خواهید از مخزنی غیر از پیش‌فرض استفاده کنید، باید صریحاً یک مخزن کلید مشخص نمایید. .PP مخزن کلید هنگام اعتبارسنجی الزامی نیست، اما اگر مشخص شود یا مخزن پیش‌فرض وجود داشته باشد و گزینه \f[V]-verbose\f[R] نیز مشخص شده باشد، اطلاعات اضافی در مورد اینکه آیا گواهی‌های استفاده‌شده برای اعتبارسنجی فایل JAR در آن مخزن کلید وجود دارند یا خیر خروجی داده می‌شود. .PP آرگومان \f[V]-keystore\f[R] می‌تواند یک مسیر و نام فایل به جای URL باشد، که در این حالت مانند یک URL با طرح file: رفتار می‌شود، برای مثال موارد زیر معادل یکدیگرند: .IP \[bu] 2 \f[V]-keystore\f[R] \f[I]filePathAndName\f[R] .IP \[bu] 2 \f[V]-keystore file:\f[R]\f[I]filePathAndName\f[R] .PP اگر ارائه‌دهنده Sun PKCS #11 در فایل ویژگی‌های امنیتی \f[V]java.security\f[R] (واقع در دایرکتوری \f[V]$JAVA_HOME/conf/security\f[R] در JDK) پیکربندی شده باشد، ابزارهای \f[V]keytool\f[R] و \f[V]jarsigner\f[R] می‌توانند با مشخص کردن این گزینه‌ها روی توکن PKCS #11 کار کنند: .RS .PP \f[V]-keystore NONE -storetype PKCS11\f[R] .RE .PP به عنوان مثال، دستور زیر محتویات توکن PKCS#11 پیکربندی‌شده را فهرست می‌کند: .RS .PP \f[V]keytool -keystore NONE -storetype PKCS11 -list\f[R] .RE .RE .TP \f[V]-storepass\f[R] [\f[V]:env\f[R] | \f[V]:file\f[R]] \f[I]argument\f[R] گذرواژه مورد نیاز برای دسترسی به مخزن کلید را مشخص می‌کند. این مورد فقط هنگام امضا (نه اعتبارسنجی) یک فایل JAR مورد نیاز است. در این حالت، اگر گزینه \f[V]-storepass\f[R] در خط فرمان ارائه نشود، از کاربر درخواست گذرواژه می‌شود. .RS .PP اگر اصلاح‌کننده \f[V]env\f[R] یا \f[V]file\f[R] مشخص نشود، گذرواژه دارای مقدار \f[I]argument\f[R] خواهد بود. در غیر این صورت، گذرواژه به شرح زیر بازیابی می‌شود: .IP \[bu] 2 \f[V]env\f[R]: بازیابی گذرواژه از متغیر محیطی با نام \f[I]argument\f[R]. .IP \[bu] 2 \f[V]file\f[R]: بازیابی گذرواژه از فایل با نام \f[I]argument\f[R]. .PP \f[B]نکته:\f[R] .PP گذرواژه نباید در خط فرمان یا در یک اسکریپت مشخص شود مگر اینکه برای اهداف آزمایشی باشد، یا روی یک سیستم امن باشید. .RE .TP \f[V]-storetype\f[R] \f[I]storetype\f[R] نوع مخزن کلیدی که باید نمونه‌سازی شود را مشخص می‌کند. نوع پیش‌فرض مخزن کلید، مقداری است که به عنوان مقدار ویژگی \f[V]keystore.type\f[R] در فایل ویژگی‌های امنیتی تعیین شده و توسط متد ایستای \f[V]getDefaultType\f[R] در \f[V]java.security.KeyStore\f[R] بازگردانده می‌شود. .RS .PP کد PIN برای یک توکن PKCS #11 را نیز می‌توان با گزینه \f[V]-storepass\f[R] مشخص کرد. اگر هیچ مقداری مشخص نشود، دستورات \f[V]keytool\f[R] و \f[V]jarsigner\f[R] کد PIN توکن را درخواست می‌کنند. اگر توکن دارای مسیر احراز هویت محافظت‌شده باشد (مانند یک صفحه کلید اختصاصی PIN یا یک اثرانگشت‌خوان بیومتریک)، گزینه \f[V]-protected\f[R] باید مشخص شود و هیچ گزینه گذرواژه‌ای نباید ارائه گردد. .RE .TP \f[V]-keypass\f[R] [\f[V]:env\f[R] | \f[V]:file\f[R]] \f[I]argument\f[R] \f[V]-certchain\f[R] \f[I]file\f[R] گذرواژه مورد استفاده برای محافظت از کلید خصوصی مدخل مخزن کلید که با نام مستعار مشخص‌شده در خط فرمان آدرس‌دهی شده را تعیین می‌کند. این گذرواژه هنگام استفاده از \f[V]jarsigner\f[R] برای امضای فایل JAR الزامی است. اگر هیچ گذرواژه‌ای در خط فرمان ارائه نشود و گذرواژه مورد نیاز با گذرواژه مخزن متفاوت باشد، از کاربر خواسته می‌شود آن را وارد کند. .RS .PP اگر اصلاح‌کننده \f[V]env\f[R] یا \f[V]file\f[R] مشخص نشود، گذرواژه دارای مقدار \f[I]argument\f[R] خواهد بود. در غیر این صورت، گذرواژه به شرح زیر بازیابی می‌شود: .IP \[bu] 2 \f[V]env\f[R]: بازیابی گذرواژه از متغیر محیطی با نام \f[I]argument\f[R]. .IP \[bu] 2 \f[V]file\f[R]: بازیابی گذرواژه از فایل با نام \f[I]argument\f[R]. .PP \f[B]نکته:\f[R] .PP گذرواژه نباید در خط فرمان یا در اسکریپت مشخص شود مگر اینکه برای اهداف آزمایشی باشد، یا روی یک سیستم امن باشید. .RE .TP \f[V]-certchain\f[R] \f[I]file\f[R] زنجیره گواهی مورد استفاده را زمانی که زنجیره گواهی مرتبط با کلید خصوصی مدخل مخزن کلید آدرس‌دهی‌شده با نام مستعار کامل نیست، مشخص می‌کند. این حالت زمانی رخ می‌دهد که مخزن کلید روی یک توکن سخت‌افزاری قرار دارد و ظرفیت کافی برای نگهداری زنجیره گواهی کامل وجود ندارد. فایل می‌تواند دنباله‌ای از گواهی‌های الحاق‌شده X.509 یا یک بلوک داده با فرمت PKCS#7 باشد، خواه در قالب باینری یا قالب کدگذاری قابل چاپ (Base64) طبق تعریف \f[B]Internet RFC 1421 Certificate Encoding Standard\f[R] [http://tools.ietf.org/html/rfc1421]. .TP \f[V]-sigfile\f[R] \f[I]file\f[R] نام فایل پایه مورد استفاده برای فایل‌های \f[V].SF\f[R] و بلوک امضای تولیدشده را تعیین می‌کند. به عنوان مثال، اگر فایل \f[V]DUKESIGN\f[R] باشد، فایل‌های \f[V].SF\f[R] و بلوک امضای تولیدشده \f[V]DUKESIGN.SF\f[R] و \f[V]DUKESIGN.RSA\f[R] نام‌گذاری می‌شوند و در دایرکتوری \f[V]META-INF\f[R] فایل JAR امضاشده قرار می‌گیرند. .RS .PP کاراکترهای موجود در فایل باید از مجموعه \f[V]a-zA-Z0-9_-\f[R] باشند. فقط حروف، اعداد، خط زیر و خط تیره مجاز هستند. تمام حروف کوچک برای نام فایل‌های \f[V].SF\f[R] و بلوک امضا به حروف بزرگ تبدیل می‌شوند. .PP اگر گزینه \f[V]-sigfile\f[R] در خط فرمان ظاهر نشود، نام پایه فایل برای فایل‌های \f[V].SF\f[R] و بلوک امضا، ۸ کاراکتر اول نام مستعار مشخص‌شده در خط فرمان خواهد بود که همگی به حروف بزرگ تبدیل شده‌اند. اگر نام مستعار کمتر از ۸ کاراکتر داشته باشد، از کل نام مستعار استفاده می‌شود. اگر نام مستعار شامل کاراکترهایی باشد که در نام فایل امضا معتبر نیستند، هر یک از این کاراکترها به یک خط زیر (_) تبدیل می‌شوند. .RE .TP \f[V]-signedjar\f[R] \f[I]file\f[R] نام فایل JAR امضاشده خروجی را مشخص می‌کند. .TP \f[V]-digestalg\f[R] \f[I]algorithm\f[R] نام الگوریتم چکیده پیام را برای استفاده هنگام ایجاد چکیده مدخل‌های فایل JAR مشخص می‌کند. .RS .PP برای مشاهده فهرستی از نام‌های استاندارد الگوریتم‌های چکیده پیام، بخش Java Security Standard Algorithm Names را ببینید. .PP اگر این گزینه مشخص نشود، از \f[V]SHA-384\f[R] استفاده می‌شود. باید یک ارائه‌دهنده به صورت ایستا نصب شده باشد که پیاده‌سازی الگوریتم مشخص‌شده را ارائه دهد، یا کاربر باید با گزینه‌های \f[V]-addprovider\f[R] یا \f[V]-providerClass\f[R] یکی را مشخص کند؛ در غیر این صورت دستور با شکست مواجه می‌شود. .RE .TP \f[V]-sigalg\f[R] \f[I]algorithm\f[R] نام الگوریتم امضا را برای امضای فایل JAR مشخص می‌کند. .RS .PP این الگوریتم باید با کلید خصوصی استفاده‌شده برای امضای فایل JAR سازگار باشد. اگر این گزینه مشخص نشود، از الگوریتم پیش‌فرض متناسب با کلید خصوصی مطابق با بخش \f[B]الگوریتم‌های پشتیبانی‌شده\f[R] استفاده می‌شود. باید یک ارائه‌دهنده نصب‌شده به صورت ایستا وجود داشته باشد که پیاده‌سازی الگوریتم مشخص‌شده را ارائه دهد یا شما باید با گزینه \f[V]-addprovider\f[R] یا \f[V]-providerClass\f[R] آن را مشخص کنید؛ در غیر این صورت دستور موفق نخواهد بود. .PP برای فهرستی از نام‌های استاندارد الگوریتم‌های چکیده پیام، بخش Java Security Standard Algorithm Names را ببینید. .RE .TP \f[V]-verify\f[R] یک فایل JAR امضاشده را اعتبارسنجی می‌کند. .TP \f[V]-verbose\f[R][\f[V]:\f[R]\f[I]suboptions\f[R]] هنگامی که گزینه \f[V]-verbose\f[R] در خط فرمان ظاهر می‌شود، نشان می‌دهد که \f[V]jarsigner\f[R] هنگام امضا یا اعتبارسنجی از حالت پرحرف (verbose) استفاده کند که در آن زیرگزینه‌ها میزان اطلاعات نمایشی را تعیین می‌کنند. این امر باعث می‌شود \f[V]jarsigner\f[R] اطلاعات بیشتری درباره پیشرفت امضا یا اعتبارسنجی JAR خروجی دهد. مقادیر \f[I]suboptions\f[R] می‌توانند \f[V]all\f[R]، \f[V]grouped\f[R] یا \f[V]summary\f[R] باشند. .RS .PP اگر گزینه \f[V]-certs\f[R] نیز مشخص شده باشد، حالت پیش‌فرض (یا زیرگزینه \f[V]all\f[R]) هر مدخل را در حین پردازش نمایش می‌دهد و پس از آن، اطلاعات گواهی برای هر امضاکننده فایل JAR را نمایش می‌دهد. .PP اگر گزینه \f[V]-certs\f[R] و زیرگزینه \f[V]-verbose:grouped\f[R] مشخص شده باشند، مدخل‌های دارای اطلاعات امضاکننده یکسان گروه‌بندی شده و همراه با اطلاعات گواهی آن‌ها نمایش داده می‌شوند. .PP اگر گزینه \f[V]-certs\f[R] و زیرگزینه \f[V]-verbose:summary\f[R] مشخص شده باشند، مدخل‌های دارای اطلاعات امضاکننده یکسان گروه‌بندی شده و همراه با اطلاعات گواهی آن‌ها نمایش داده می‌شوند. .PP جزئیات هر مدخل خلاصه‌سازی شده و به صورت \f[I]one entry (and more)\f[R] نمایش داده می‌شود. بخش‌های \f[B]مثال اعتبارسنجی فایل JAR امضاشده\f[R] و \f[B]مثال اعتبارسنجی همراه با اطلاعات گواهی\f[R] را ببینید. .RE .TP \f[V]-certs\f[R] اگر گزینه \f[V]-certs\f[R] همراه با گزینه‌های \f[V]-verify\f[R] و \f[V]-verbose\f[R] در خط فرمان ظاهر شود، خروجی شامل اطلاعات گواهی برای هر امضاکننده فایل JAR خواهد بود. این اطلاعات شامل نام نوع گواهی (ذخیره‌شده در فایل بلوک امضا) است که کلید عمومی امضاکننده را تأیید می‌کند، و اگر گواهی یک گواهی X.509 باشد (نمونه‌ای از \f[V]java.security.cert.X509Certificate\f[R])، شامل نام متمایز (distinguished name) امضاکننده خواهد بود. .RS .PP مخزن کلید نیز بررسی می‌شود. اگر هیچ مقدار مخزن کلیدی در خط فرمان مشخص نشده باشد، فایل مخزن کلید پیش‌فرض (در صورت وجود) بررسی می‌شود. اگر گواهی کلید عمومی برای یک امضاکننده با مدخلی در مخزن کلید مطابقت داشته باشد، نام مستعار مدخل مخزن کلید برای آن امضاکننده در داخل پرانتز نمایش داده می‌شود. .RE .TP \f[V]-revCheck\f[R] این گزینه بررسی وضعیت ابطال گواهی‌ها را هنگام امضا یا اعتبارسنجی فایل JAR فعال می‌کند. در صورت مشخص شدن گزینه \f[V]-revCheck\f[R] در خط فرمان، دستور \f[V]jarsigner\f[R] تلاش می‌کند اتصالات شبکه‌ای برای واکشی پاسخ‌های OCSP و لیست‌های ابطال گواهی (CRL) برقرار کند. توجه داشته باشید که بررسی‌های ابطال فعال نمی‌شوند مگر اینکه این گزینه صریحاً مشخص شده باشد. .TP \f[V]-tsa\f[R] \f[I]url\f[R] اگر \f[V]-tsa http://example.tsa.url\f[R] هنگام امضای فایل JAR در خط فرمان مشخص شود، یک برچسب زمانی برای امضا تولید می‌گردد. آدرس URL، مکان مرجع برچسب‌گذاری زمانی (TSA) را مشخص کرده و هرگونه URL یافت‌شده با گزینه \f[V]-tsacert\f[R] را بازنویسی می‌کند. گزینه \f[V]-tsa\f[R] نیازی به وجود گواهی کلید عمومی TSA در مخزن کلید ندارد. .RS .PP برای تولید برچسب زمانی، \f[V]jarsigner\f[R] با پروتکل برچسب زمانی (TSP) تعریف‌شده در RFC 3161 با TSA ارتباط برقرار می‌کند. در صورت موفقیت، توکن برچسب زمانی بازگردانده‌شده توسط TSA به همراه امضا در فایل بلوک امضا ذخیره می‌شود. .RE .TP \f[V]-tsacert\f[R] \f[I]alias\f[R] هنگامی که \f[V]-tsacert\f[R] \f[I]alias\f[R] در حین امضای فایل JAR در خط فرمان مشخص شود، یک برچسب زمانی برای امضا تولید می‌شود. نام مستعار، گواهی کلید عمومی TSA را در مخزن کلید فعال مشخص می‌کند. گواهی این مدخل برای افزونه Subject Information Access که حاوی یک URL نشان‌دهنده مکان TSA است بررسی می‌شود. .RS .PP هنگام استفاده از گزینه \f[V]-tsacert\f[R]، گواهی کلید عمومی TSA باید در مخزن کلید موجود باشد. .RE .TP \f[V]-tsapolicyid\f[R] \f[I]policyid\f[R] شناسه شیء (OID) را که خط‌مشی ارسالی به سرور TSA را مشخص می‌کند تعیین می‌نماید. اگر این گزینه مشخص نشود، هیچ شناسه خط‌مشی ارسال نمی‌شود و سرور TSA یک خط‌مشی پیش‌فرض را انتخاب خواهد کرد. .RS .PP شناسه‌های شیء توسط X.696 که استاندارد بخش استانداردسازی مخابرات ITU (ITU-T) است تعریف می‌شوند. این شناسه‌ها معمولاً مجموعه‌ای از ارقام نامنفی جداشده با نقطه هستند، مانند \f[V]1.2.3.4\f[R]. .RE .TP \f[V]-tsadigestalg\f[R] \f[I]algorithm\f[R] الگوریتم چکیده پیامی را که برای تولید نقش پیام (message imprint) ارسالی به سرور TSA استفاده می‌شود مشخص می‌کند. اگر این گزینه مشخص نشود، از SHA-384 استفاده خواهد شد. .RS .PP بخش \f[B]الگوریتم‌های پشتیبانی‌شده\f[R] را ببینید. .PP برای فهرستی از نام‌های استاندارد الگوریتم‌های چکیده پیام، بخش Java Security Standard Algorithm Names را ببینید. .RE .TP \f[V]-internalsf\f[R] در گذشته، فایل بلوک امضای تولیدشده هنگام امضای فایل JAR شامل یک نسخه کامل و کدگذاری‌شده از فایل \f[V].SF\f[R] (فایل امضا) بود. این رفتار تغییر کرده است. برای کاهش اندازه کلی فایل JAR خروجی، فایل بلوک امضا به طور پیش‌فرض دیگر حاوی کپی فایل \f[V].SF\f[R] نیست. اگر \f[V]-internalsf\f[R] در خط فرمان ظاهر شود، از رفتار قدیمی استفاده می‌شود. این گزینه برای آزمایش مفید است. در عمل از گزینه \f[V]-internalsf\f[R] استفاده نکنید زیرا سربار بالاتری ایجاد می‌کند. .TP \f[V]-sectionsonly\f[R] اگر گزینه \f[V]-sectionsonly\f[R] در خط فرمان ظاهر شود، فایل \f[V].SF\f[R] (فایل امضا) تولیدشده هنگام امضای فایل JAR شامل هدر حاوی هش کل فایل مانیفست نخواهد بود. این فایل فقط حاوی اطلاعات و هش‌های مربوط به هر فایل منبع منفرد گنجانده‌شده در فایل JAR است. بخش فایل امضا را ببینید. .RS .PP به طور پیش‌فرض، این هدر به عنوان یک بهینه‌سازی اضافه می‌شود. هنگامی که این هدر وجود دارد، هر زمان که فایل JAR اعتبارسنجی می‌شود، اعتبارسنجی ابتدا بررسی می‌کند که آیا هش موجود در هدر با هش کل فایل مانیفست مطابقت دارد یا خیر. در صورت وجود تطابق، اعتبارسنجی به مرحله بعد می‌رود. در صورت عدم تطابق، لازم است اعتبارسنجی با بهینه‌سازی کمتری انجام شود تا اطمینان حاصل گردد که هش موجود در هر بخش اطلاعات فایل منبع در فایل \f[V].SF\f[R] با هش بخش متناظر آن در فایل مانیفست برابر است. بخش \f[B]اعتبارسنجی فایل JAR\f[R] را ببینید. .PP گزینه \f[V]-sectionsonly\f[R] در درجه اول برای آزمایش استفاده می‌شود. نباید به غیر از مقاصد آزمایشی استفاده شود زیرا استفاده از آن سربار بالاتری ایجاد می‌کند. .RE .TP \f[V]-protected\f[R] مقادیر می‌توانند \f[V]true\f[R] یا \f[V]false\f[R] باشند. هنگامی که گذرواژه باید از طریق یک مسیر احراز هویت محافظت‌شده مانند یک دستگاه کارت‌خوان PIN اختصاصی مشخص شود، مقدار \f[V]true\f[R] را تعیین کنید. .TP \f[V]-providerName\f[R] \f[I]providerName\f[R] اگر بیش از یک ارائه‌دهنده در فایل ویژگی‌های امنیتی \f[V]java.security\f[R] پیکربندی شده باشد، می‌توانید از گزینه \f[V]-providerName\f[R] برای هدف قرار دادن یک نمونه ارائه‌دهنده خاص استفاده کنید. آرگومان این گزینه نام ارائه‌دهنده است. .RS .PP برای ارائه‌دهنده Oracle PKCS #11، مقدار \f[I]providerName\f[R] به صورت \f[V]SunPKCS11-\f[R]\f[I]TokenName\f[R] است که در آن \f[I]TokenName\f[R] پسوند نامی است که نمونه ارائه‌دهنده با آن پیکربندی شده است. به عنوان مثال، دستور زیر محتویات نمونه ارائه‌دهنده مخزن کلید \f[V]PKCS #11\f[R] را با پسوند نام \f[V]SmartCard\f[R] فهرست می‌کند: .RS .PP \f[V]jarsigner -keystore NONE -storetype PKCS11 -providerName SunPKCS11-SmartCard -list\f[R] .RE .RE .TP \f[V]-addprovider\f[R] \f[I]name\f[R] [\f[V]-providerArg\f[R] \f[I]arg\f[R]] یک ارائه‌دهنده امنیتی را با نام (مانند SunPKCS11) و یک آرگومان پیکربندی اختیاری اضافه می‌کند. مقدار ارائه‌دهنده امنیتی، نام یک ارائه‌دهنده امنیتی است که در یک ماژول تعریف شده است. .RS .PP ابزارهای \f[V]keytool\f[R] و \f[V]jarsigner\f[R] همراه با گزینه \f[V]-providerArg ConfigFilePath\f[R]، ارائه‌دهنده را به صورت پویا نصب می‌کنند و از \f[V]ConfigFilePath\f[R] برای مسیر فایل پیکربندی توکن استفاده می‌نمایند. مثال زیر دستوری را برای فهرست کردن مخزن کلید \f[V]PKCS #11\f[R] نشان می‌دهد در حالی که ارائه‌دهنده Oracle PKCS #11 در فایل ویژگی‌های امنیتی پیکربندی نشده است: .RS .PP \f[V]jarsigner -keystore NONE -storetype PKCS11 -addprovider SunPKCS11 -providerArg /mydir1/mydir2/token.config\f[R] .RE .RE .TP \f[V]-providerClass\f[R] \f[I]provider-class-name\f[R] [\f[V]-providerArg\f[R] \f[I]arg\f[R]] برای تعیین نام فایل کلاس اصلی ارائه‌دهنده خدمات رمزنگاری زمانی که ارائه‌دهنده خدمات در فایل ویژگی‌های امنیتی \f[V]java.security\f[R] فهرست نشده است استفاده می‌شود. یک ارائه‌دهنده امنیتی را با نام کلاس کاملاً واجد شرایط و یک آرگومان پیکربندی اختیاری اضافه می‌کند. .RS .PP \f[B]نکته:\f[R] .PP روش ترجیحی برای بارگذاری PKCS11 استفاده از ماژول‌ها است. گزینه \f[V]-addprovider\f[R] را ببینید. .RE .TP \f[V]-providerPath\f[R] \f[I]classpath\f[R] برای تعیین مسیر کلاس (classpath) برای ارائه‌دهندگان مشخص‌شده توسط گزینه \f[V]-providerClass\f[R] استفاده می‌شود. مسیرهای متعدد باید با کاراکتر جداکننده مسیر وابسته به سیستم جدا شوند. .TP \f[V]-J\f[R]\f[I]javaoption\f[R] رشته \f[I]javaoption\f[R] مشخص‌شده را مستقیماً به مفسر جاوا ارسال می‌کند. دستور \f[V]jarsigner\f[R] پوششی پیرامون مفسر است. این گزینه نباید شامل هیچ فاصله‌ای باشد. این گزینه برای تنظیم محیط اجرا یا میزان استفاده از حافظه مفید است. برای مشاهده فهرستی از گزینه‌های ممکن مفسر، عبارت \f[V]java -h\f[R] یا \f[V]java -X\f[R] را در خط فرمان وارد کنید. .TP \f[V]-strict\f[R] در طول فرآیند امضا یا اعتبارسنجی، دستور ممکن است پیام‌های هشدار صادر کند. اگر این گزینه را مشخص کنید، کد خروج ابزار منعکس‌کننده پیام‌های هشدار شدیدی خواهد بود که دستور یافته است. بخش \f[B]خطاها و هشدارها\f[R] را ببینید. .TP \f[V]-conf\f[R] \f[I]url\f[R] یک فایل گزینه‌های از پیش پیکربندی‌شده را مشخص می‌کند. برای جزئیات بیشتر، \f[B]مستندات keytool\f[R] را بخوانید. کلیدهای ویژگی پشتیبانی‌شده عبارتند از \[dq]jarsigner.all\[dq] برای همه اقدامات، \[dq]jarsigner.sign\[dq] برای امضا و \[dq]jarsigner.verify\[dq] برای اعتبارسنجی. آرگومان‌های \f[V]jarsigner\f[R] از جمله نام فایل JAR و نام(های) مستعار را نمی‌توان در این فایل تنظیم کرد. .TP \f[V]-version\f[R] نسخه برنامه را چاپ می‌کند. .SH "خطاها و هشدارها (ERRORS AND WARNINGS)" .PP در طول فرآیند امضا یا اعتبارسنجی، دستور \f[V]jarsigner\f[R] ممکن است خطاها یا هشدارهای مختلفی صادر کند. .PP در صورت بروز شکست، دستور \f[V]jarsigner\f[R] با کد ۱ خارج می‌شود. اگر شکستی رخ ندهد اما یک یا چند هشدار شدید وجود داشته باشد، در صورتی که گزینه \f[V]-strict\f[R] مشخص \f[B]نشده\f[R] باشد دستور \f[V]jarsigner\f[R] با کد ۰ خارج می‌شود، یا در صورت مشخص شدن گزینه \f[V]-strict\f[R]، با مقدار بیتی OR حاصل از کدهای هشدار خارج می‌شود. اگر فقط هشدارهای اطلاع‌رسانی وجود داشته باشد یا اصلاً هشداری وجود نداشته باشد، دستور همیشه با کد ۰ خارج می‌شود. .PP به عنوان مثال، اگر گواهی استفاده‌شده برای امضای یک مدخل منقضی شده باشد و دارای افزونه KeyUsage باشد که اجازه امضای فایل را به آن نمی‌دهد، دستور \f[V]jarsigner\f[R] در صورت تعیین گزینه \f[V]-strict\f[R] با کد ۱۲ (=۴+۸) خارج می‌شود. .PP \f[B]نکته:\f[R] کدهای خروج مجدداً استفاده می‌شوند زیرا تنها مقادیر ۰ تا ۲۵۵ در لینوکس و macOS مجاز هستند. .PP بخش‌های زیر نام‌ها، کدها و توضیحات مربوط به خطاها و هشدارهایی را که دستور \f[V]jarsigner\f[R] می‌تواند صادر کند، شرح می‌دهند. .SH "شکست (FAILURE)" .PP دلایل شکست دستور \f[V]jarsigner\f[R] شامل (اما نه محدود به) خطای تجزیه خط فرمان، ناتوانی در یافتن جفت‌کلید برای امضای فایل JAR، یا شکست اعتبارسنجی یک فایل JAR امضاشده است. .TP failure کد ۱. امضا یا اعتبارسنجی با شکست مواجه شد. .SH "هشدارهای شدید (SEVERE WARNINGS)" .PP \f[B]نکته:\f[R] .PP اگر گزینه \f[V]-strict\f[R] را مشخص کنید، هشدارهای شدید به عنوان خطا گزارش می‌شوند. .PP دلایلی که باعث می‌شود دستور \f[V]jarsigner\f[R] یک هشدار شدید صادر کند شامل وجود خطا در گواهی استفاده‌شده برای امضای فایل JAR یا وجود مشکلات دیگر در فایل JAR امضاشده است. .TP hasExpiredCert کد ۴. این JAR حاوی مدخل‌هایی است که گواهی امضاکننده آن‌ها منقضی شده است. .TP hasExpiredTsaCert کد ۴. برچسب زمانی منقضی شده است. .TP notYetValidCert کد ۴. این JAR حاوی مدخل‌هایی است که گواهی امضاکننده آن‌ها هنوز معتبر نشده است. .TP chainNotValidated کد ۴. این JAR حاوی مدخل‌هایی است که زنجیره گواهی آن‌ها اعتبارسنجی نشده است. .TP tsaChainNotValidated کد ۶۴. برچسب زمانی نامعتبر است. .TP signerSelfSigned کد ۴. این JAR حاوی مدخل‌هایی است که گواهی امضاکننده آن‌ها خودامضاشده (self-signed) است. .TP disabledAlg کد ۴. یک الگوریتم استفاده‌شده ریسک امنیتی در نظر گرفته شده و غیرفعال است. .TP badKeyUsage کد ۸. این JAR حاوی مدخل‌هایی است که افزونه KeyUsage در گواهی امضاکننده آن‌ها اجازه امضای کد را نمی‌دهد. .TP badExtendedKeyUsage کد ۸. این JAR حاوی مدخل‌هایی است که افزونه ExtendedKeyUsage در گواهی امضاکننده آن‌ها اجازه امضای کد را نمی‌دهد. .TP badNetscapeCertType کد ۸. این JAR حاوی مدخل‌هایی است که افزونه NetscapeCertType در گواهی امضاکننده آن‌ها اجازه امضای کد را نمی‌دهد. .TP hasUnsignedEntry کد ۱۶. این JAR حاوی مدخل‌های امضانشده‌ای است که یکپارچگی آن‌ها بررسی نشده است. .TP notSignedByAlias کد ۳۲. این JAR حاوی مدخل‌های امضاشده‌ای است که توسط نام(های) مستعار مشخص‌شده امضا نشده‌اند. .TP aliasNotInStore کد ۳۲. این JAR حاوی مدخل‌های امضاشده‌ای است که توسط نام مستعار موجود در این مخزن کلید امضا نشده‌اند. .TP tsaChainNotValidated کد ۶۴. این JAR حاوی مدخل‌هایی است که زنجیره گواهی TSA آن‌ها نامعتبر است. .SH "هشدارهای اطلاع‌رسانی (INFORMATIONAL WARNINGS)" .PP هشدارهای اطلاع‌رسانی شامل مواردی هستند که خطا محسوب نمی‌شوند اما به عنوان رویکرد نامناسب تلقی می‌گردند. این موارد کدی ندارند. .TP extraAttributesDetected مجوزهای فایل POSIX و/یا ویژگی‌های پیوند نمادین در حین امضا یا اعتبارسنجی فایل JAR شناسایی شده‌اند. ابزار \f[V]jarsigner\f[R] این ویژگی‌ها را در فایل تازه امضاشده حفظ می‌کند اما هشدار می‌دهد که این ویژگی‌ها امضا نشده‌اند و توسط امضا محافظت نمی‌شوند. .TP hasExpiringCert این JAR حاوی مدخل‌هایی است که گواهی امضاکننده آن‌ها ظرف شش ماه آینده منقضی می‌شود. .TP hasExpiringTsaCert برچسب زمانی ظرف یک سال در تاریخ \f[V]YYYY-MM-DD\f[R] منقضی خواهد شد. .TP internalInconsistenciesDetected این JAR حاوی ناسازگاری‌های داخلی شناسایی‌شده در حین اعتبارسنجی است که ممکن است هنگام خواندن از طریق JarFile و JarInputStream منجر به محتویات متفاوتی شود. .TP legacyAlg یک الگوریتم استفاده‌شده ریسک امنیتی در نظر گرفته می‌شود اما غیرفعال نشده است. .TP noTimestamp این JAR حاوی امضاهایی است که شامل برچسب زمانی نیستند. بدون برچسب زمانی، ممکن است کاربران نتوانند پس از تاریخ انقضای گواهی امضاکننده (\f[V]YYYY-MM-DD\f[R]) یا پس از هر تاریخ ابطال در آینده، این فایل JAR را اعتبارسنجی کنند. .SH "مثال امضای فایل JAR (EXAMPLE OF SIGNING A JAR FILE)" .PP برای امضای \f[V]bundle.jar\f[R] با کلید خصوصی کاربری که نام مستعار آن در مخزن کلید \f[V]jane\f[R] است در مخزن کلیدی به نام \f[V]mystore\f[R] در دایرکتوری \f[V]working\f[R] و نام‌گذاری فایل JAR امضاشده به \f[V]sbundle.jar\f[R]، از دستور زیر استفاده کنید: .RS .PP \f[V]jarsigner -keystore /working/mystore -storepass\f[R] \f[I]keystore_password\f[R] \f[V]-keypass\f[R] \f[I]private_key_password\f[R] \f[V]-signedjar sbundle.jar bundle.jar jane\f[R] .RE .PP در دستور قبلی گزینه \f[V]-sigfile\f[R] مشخص نشده است، بنابراین فایل‌های \f[V].SF\f[R] و بلوک امضای تولیدشده برای قرارگیری در فایل JAR امضاشده، نام‌های پیش‌فرضی بر اساس نام مستعار خواهند داشت. نام آن‌ها \f[V]JANE.SF\f[R] و \f[V]JANE.RSA\f[R] خواهد بود. .PP اگر می‌خواهید گذرواژه مخزن و گذرواژه کلید خصوصی از شما درخواست شود، می‌توانید دستور قبلی را به صورت زیر کوتاه کنید: .RS .PP \f[V]jarsigner -keystore /working/mystore -signedjar sbundle.jar bundle.jar jane\f[R] .RE .PP اگر \f[V]keystore\f[R] مخزن کلید پیش‌فرض باشد (\f[V].keystore\f[R] در دایرکتوری خانگی شما)، نیازی به تعیین \f[V]keystore\f[R] ندارید، به صورت زیر: .RS .PP \f[V]jarsigner -signedjar sbundle.jar bundle.jar jane\f[R] .RE .PP اگر می‌خواهید فایل JAR امضاشده جایگزین فایل JAR ورودی (\f[V]bundle.jar\f[R]) شود، نیازی به تعیین گزینه \f[V]-signedjar\f[R] ندارید، به صورت زیر: .RS .PP \f[V]jarsigner bundle.jar jane\f[R] .RE .SH "مثال اعتبارسنجی فایل JAR امضاشده (EXAMPLE OF VERIFYING A SIGNED JAR FILE)" .PP برای اعتبارسنجی یک فایل JAR امضاشده به منظور اطمینان از معتبر بودن امضا و عدم دستکاری فایل JAR، از دستوری مانند زیر استفاده کنید: .RS .PP \f[V]jarsigner -verify ButtonDemo.jar\f[R] .RE .PP هنگامی که اعتبارسنجی موفقیت‌آمیز باشد، عبارت \f[V]jar verified\f[R] نمایش داده می‌شود. در غیر این صورت یک پیام خطا نمایش داده می‌شود. هنگامی که از گزینه \f[V]-verbose\f[R] استفاده کنید می‌توانید اطلاعات بیشتری دریافت کنید. نمونه‌ای از استفاده از \f[V]jarsigner\f[R] با گزینه \f[V]-verbose\f[R] به شرح زیر است: .IP .nf \f[CB] jarsigner -verify -verbose ButtonDemo.jar s 866 Tue Sep 12 20:08:48 EDT 2017 META-INF/MANIFEST.MF 825 Tue Sep 12 20:08:48 EDT 2017 META-INF/ORACLE_C.SF 7475 Tue Sep 12 20:08:48 EDT 2017 META-INF/ORACLE_C.RSA 0 Tue Sep 12 20:07:54 EDT 2017 META-INF/ 0 Tue Sep 12 20:07:16 EDT 2017 components/ 0 Tue Sep 12 20:07:16 EDT 2017 components/images/ sm 523 Tue Sep 12 20:07:16 EDT 2017 components/ButtonDemo$1.class sm 3440 Tue Sep 12 20:07:16 EDT 2017 components/ButtonDemo.class sm 2346 Tue Sep 12 20:07:16 EDT 2017 components/ButtonDemo.jnlp sm 172 Tue Sep 12 20:07:16 EDT 2017 components/images/left.gif sm 235 Tue Sep 12 20:07:16 EDT 2017 components/images/middle.gif sm 172 Tue Sep 12 20:07:16 EDT 2017 components/images/right.gif s = signature was verified m = entry is listed in manifest k = at least one certificate was found in keystore - Signed by \[dq]CN=\[dq]Oracle America, Inc.\[dq], OU=Software Engineering, O=\[dq]Oracle America, Inc.\[dq], L=Redwood City, ST=California, C=US\[dq] Digest algorithm: SHA-256 Signature algorithm: SHA256withRSA, 2048-bit key Timestamped by \[dq]CN=Symantec Time Stamping Services Signer - G4, O=Symantec Corporation, C=US\[dq] on Tue Sep 12 20:08:49 UTC 2017 Timestamp digest algorithm: SHA-1 Timestamp signature algorithm: SHA1withRSA, 2048-bit key jar verified. The signer certificate expired on 2018-02-01. However, the JAR will be valid until the timestamp expires on 2020-12-29. \f[R] .fi .SH "مثال اعتبارسنجی همراه با اطلاعات گواهی (EXAMPLE OF VERIFICATION WITH CERTIFICATE INFORMATION)" .PP اگر گزینه \f[V]-certs\f[R] را همراه با گزینه‌های \f[V]-verify\f[R] و \f[V]-verbose\f[R] مشخص کنید، خروجی شامل اطلاعات گواهی برای هر امضاکننده فایل JAR خواهد بود. این اطلاعات شامل نوع گواهی، اطلاعات نام متمایز امضاکننده (زمانی که گواهی X.509 است)، و در صورت تطابق گواهی کلید عمومی موجود در فایل JAR با مدخلی در مخزن کلید، نام مستعار مخزن کلید برای امضاکننده در داخل پرانتز خواهد بود، به عنوان مثال: .IP .nf \f[CB] jarsigner -keystore $JAVA_HOME/lib/security/cacerts -verify -verbose -certs ButtonDemo.jar s k 866 Tue Sep 12 20:08:48 EDT 2017 META-INF/MANIFEST.MF >>> Signer X.509, CN=\[dq]Oracle America, Inc.\[dq], OU=Software Engineering, O=\[dq]Oracle America, Inc.\[dq], L=Redwood City, ST=California, C=US [certificate is valid from 2017-01-30, 7:00 PM to 2018-02-01, 6:59 PM] X.509, CN=Symantec Class 3 SHA256 Code Signing CA, OU=Symantec Trust Network, O=Symantec Corporation, C=US [certificate is valid from 2013-12-09, 7:00 PM to 2023-12-09, 6:59 PM] X.509, CN=VeriSign Class 3 Public Primary Certification Authority - G5, OU=\[dq](c) 2006 VeriSign, Inc. - For authorized use only\[dq], OU=VeriSign Trust Network, O=\[dq]VeriSign, Inc.\[dq], C=US (verisignclass3g5ca [jdk]) [trusted certificate] >>> TSA X.509, CN=Symantec Time Stamping Services Signer - G4, O=Symantec Corporation, C=US [certificate is valid from 2012-10-17, 8:00 PM to 2020-12-29, 6:59 PM] X.509, CN=Symantec Time Stamping Services CA - G2, O=Symantec Corporation, C=US [certificate is valid from 2012-12-20, 7:00 PM to 2020-12-30, 6:59 PM] 825 Tue Sep 12 20:08:48 EDT 2017 META-INF/ORACLE_C.SF 7475 Tue Sep 12 20:08:48 EDT 2017 META-INF/ORACLE_C.RSA 0 Tue Sep 12 20:07:54 EDT 2017 META-INF/ 0 Tue Sep 12 20:07:16 EDT 2017 components/ 0 Tue Sep 12 20:07:16 EDT 2017 components/images/ smk 523 Tue Sep 12 20:07:16 EDT 2017 components/ButtonDemo$1.class [entry was signed on 2017-09-12, 4:08 PM] >>> Signer X.509, CN=\[dq]Oracle America, Inc.\[dq], OU=Software Engineering, O=\[dq]Oracle America, Inc.\[dq], L=Redwood City, ST=California, C=US [certificate is valid from 2017-01-30, 7:00 PM to 2018-02-01, 6:59 PM] X.509, CN=Symantec Class 3 SHA256 Code Signing CA, OU=Symantec Trust Network, O=Symantec Corporation, C=US [certificate is valid from 2013-12-09, 7:00 PM to 2023-12-09, 6:59 PM] X.509, CN=VeriSign Class 3 Public Primary Certification Authority - G5, OU=\[dq](c) 2006 VeriSign, Inc. - For authorized use only\[dq], OU=VeriSign Trust Network, O=\[dq]VeriSign, Inc.\[dq], C=US (verisignclass3g5ca [jdk]) [trusted certificate] >>> TSA X.509, CN=Symantec Time Stamping Services Signer - G4, O=Symantec Corporation, C=US [certificate is valid from 2012-10-17, 8:00 PM to 2020-12-29, 6:59 PM] X.509, CN=Symantec Time Stamping Services CA - G2, O=Symantec Corporation, C=US [certificate is valid from 2012-12-20, 7:00 PM to 2020-12-30, 6:59 PM] smk 3440 Tue Sep 12 20:08:48 EDT 2017 components/ButtonDemo.class \&... smk 2346 Tue Sep 12 20:08:48 EDT 2017 components/ButtonDemo.jnlp \&... smk 172 Tue Sep 12 20:08:48 EDT 2017 components/images/left.gif \&... smk 235 Tue Sep 12 20:08:48 EDT 2017 components/images/middle.gif \&... smk 172 Tue Sep 12 20:08:48 EDT 2017 components/images/right.gif \&... s = signature was verified m = entry is listed in manifest k = at least one certificate was found in keystore - Signed by \[dq]CN=\[dq]Oracle America, Inc.\[dq], OU=Software Engineering, O=\[dq]Oracle America, Inc.\[dq], L=Redwood City, ST=California, C=US\[dq] Digest algorithm: SHA-256 Signature algorithm: SHA256withRSA, 2048-bit key Timestamped by \[dq]CN=Symantec Time Stamping Services Signer - G4, O=Symantec Corporation, C=US\[dq] on Tue Sep 12 20:08:49 UTC 2017 Timestamp digest algorithm: SHA-1 Timestamp signature algorithm: SHA1withRSA, 2048-bit key jar verified. The signer certificate expired on 2018-02-01. However, the JAR will be valid until the timestamp expires on 2020-12-29. \f[R] .fi .PP اگر گواهی یک امضاکننده یک گواهی X.509 نباشد، هیچ اطلاعات نام متمایزی وجود نخواهد داشت. در این صورت، فقط نوع گواهی و نام مستعار نمایش داده می‌شوند. به عنوان مثال، اگر گواهی یک گواهی PGP باشد و نام مستعار \f[V]bob\f[R] باشد، عبارت \f[V]PGP, (bob)\f[R] را دریافت خواهید کرد.