PK12UTIL(1) NSS Security Tools PK12UTIL(1)

pk12util - وارد کردن و استخراج گواهی‌ها و کلیدها با فرمت PKCS #12 در NSS

pk12util [-i p12File|-l p12File|-o p12File] [-c keyCipher] [-C certCipher] [-d directory] [-h tokenname] [-m | --key-len keyLength] [-M hashAlg] [-n certname] [-P dbprefix] [-r] [-v] [--cert-key-len certKeyLength] [-k slotPasswordFile|-K slotPassword] [-w p12filePasswordFile|-W p12filePassword]

این مستندات هنوز در حال تکمیل است. لطفاً در بازبینی اولیه در Mozilla NSS bug 836477[1] مشارکت کنید.

ابزار PKCS #12، pk12util، امکان اشتراک‌گذاری گواهی‌ها را میان هر کارسازی که از PKCS #12 پشتیبانی می‌کند فراهم می‌سازد. این ابزار می‌تواند گواهی‌ها و کلیدها را از فایل‌های PKCS #12 به پایگاه‌های داده امنیتی وارد کند، گواهی‌ها را استخراج نماید و گواهی‌ها و کلیدها را فهرست کند.

گزینه‌ها

-i p12file

وارد کردن کلیدها و گواهی‌ها از یک فایل PKCS #12 به پایگاه‌داده امنیتی.

-l p12file

فهرست کردن کلیدها و گواهی‌ها در فایل PKCS #12.

-o p12file

استخراج کلیدها و گواهی‌ها از پایگاه‌داده امنیتی به یک فایل PKCS #12.

آرگومان‌ها

-c keyCipher

الگوریتم رمزنگاری کلید را مشخص می‌کند.

-C certCipher

الگوریتم رمزنگاری گواهی را مشخص می‌کند.

-d directory

دایرکتوری پایگاه‌داده‌ای را که باید گواهی‌ها و کلیدها به آن وارد یا از آن استخراج شوند مشخص می‌کند.

pk12util از دو نوع پایگاه‌داده پشتیبانی می‌کند: پایگاه‌های داده امنیتی قدیمی (cert8.db ،key3.db و secmod.db) و پایگاه‌های داده جدید SQLite (شامل cert9.db ،key4.db و pkcs11.txt). اگر پیشوند dbm: استفاده نشود، ابزار فرض می‌کند که پایگاه‌های داده داده‌شده در قالب SQLite هستند.

-h tokenname

نام توکن را برای وارد کردن به آن یا استخراج از آن مشخص می‌کند.

-k slotPasswordFile

فایل متنی حاوی گذرواژه اسلات (slot) را مشخص می‌کند.

-K slotPassword

گذرواژه اسلات را مشخص می‌کند.

-m | --key-len keyLength

طول مورد نظر کلید متقارن را برای استفاده در رمزگذاری کلید خصوصی مشخص می‌کند.

-M hashAlg

الگوریتم درهم‌سازی (هش) مورد استفاده در MAC مربوط به PKCS #12 را مشخص می‌کند. این الگوریتم همچنین HMAC مورد استفاده در PRF را هنگام استفاده از PKCS #5 v2 تعیین می‌نماید.

--cert-key-len certKeyLength

طول مورد نظر کلید متقارن را برای استفاده در رمزگذاری گواهی‌ها و سایر فراداده‌ها مشخص می‌کند.

-n certname

نام مستعار (nickname) گواهی و کلید خصوصی را برای استخراج مشخص می‌کند.

نام مستعار می‌تواند یک PKCS #11 URI نیز باشد. برای نمونه، اگر گواهی با نام "my-server-cert" در مخزن گواهی داخلی دارید، می‌تواند به‌طور صریح به‌صورت "pkcs11:token=NSS%20Certificate%20DB;object=my-server-cert" مشخص شود. برای جزئیات بیشتر درباره این قالب، به RFC 7512 مراجعه کنید.

-P prefix

پیشوند مورد استفاده در پایگاه‌های داده گواهی و کلید را مشخص می‌کند. این گزینه به عنوان یک مورد خاص ارائه شده است. تغییر نام‌های پایگاه‌های داده گواهی و کلید توصیه نمی‌شود.

-r

تمام داده‌ها را به شکل خام (باینری) تخلیه می‌کند. این خروجی باید به عنوان یک فایل DER ذخیره شود. حالت پیش‌فرض، بازگرداندن اطلاعات در یک قالب خوانا و آراسته ASCII (pretty-print) است که اطلاعات مربوط به گواهی‌ها و کلیدهای عمومی موجود در فایل p12 را نمایش می‌دهد.

-v

فعال‌سازی ثبت پیام‌های اشکال‌زدایی (debug logging) هنگام وارد کردن.

-w p12filePasswordFile

فایل متنی حاوی گذرواژه فایل PKCS #12 را مشخص می‌کند.

-W p12filePassword

گذرواژه فایل PKCS #12 را مشخص می‌کند.

•0 - بدون خطا
•1 - لغو توسط کاربر
•2 - خطای نحوه استفاده
•6 - خطای مقداردهی اولیه NLS
•8 - خطای باز کردن پایگاه‌داده گواهی
•9 - خطای باز کردن پایگاه‌داده کلید
•10 - خطای مقداردهی اولیه فایل
•11 - خطای تبدیل یونیکد
•12 - خطای ایجاد فایل موقت
•13 - خطای دریافت اسلات PKCS11
•14 - خطای شروع رمزگشای PKCS12
•15 - خطای خواندن از فایل ورودی
•16 - خطای رمزگشایی PKCS12
•17 - خطای تایید رمزگشای PKCS12
•18 - خطای اعتبارسنجی بسته‌های (bags) رمزگشای PKCS12
•19 - خطای وارد کردن بسته‌های رمزگشای PKCS12
•20 - خطای تبدیل پایگاه‌داده کلید از نسخه ۳ به نسخه ۲
•21 - خطای تبدیل پایگاه‌داده گواهی از نسخه ۷ به نسخه ۵
•22 - خطای وصله پایگاه‌های داده گواهی و کلید
•23 - خطای دریافت پایگاه‌داده پیش‌فرض گواهی
•24 - خطای یافتن گواهی با نام مستعار
•25 - خطای ایجاد زمینه استخراج
•26 - خطای افزودن یکپارچگی گذرواژه PKCS12
•27 - خطای ایجاد گاوصندوق‌های (Safes) گواهی و کلید
•28 - خطای افزودن گواهی و کلید PKCS12
•29 - خطای کدگذاری PKCS12

وارد کردن کلیدها و گواهی‌ها

ابتدایی‌ترین حالت استفاده از pk12util برای وارد کردن یک گواهی یا کلید، تعیین فایل ورودی PKCS #12 (-i) و روشی برای مشخص کردن پایگاه‌داده امنیتی مورد دسترسی است (یا -d برای یک دایرکتوری یا -h برای یک توکن).

pk12util -i p12File [-h tokenname] [-v] [-d directory] [-P dbprefix] [-k slotPasswordFile|-K slotPassword] [-w p12filePasswordFile|-W p12filePassword]

برای مثال:

# pk12util -i /tmp/cert-files/users.p12 -d /home/my/sharednssdb
Enter a password which will be used to encrypt your keys.
The password should be at least 8 characters long,
and should contain at least one non-alphabetic character.
Enter new password:
Re-enter password:
Enter password for PKCS12 file:
pk12util: PKCS12 IMPORT SUCCESSFUL

استخراج کلیدها و گواهی‌ها

استفاده از دستور pk12util برای استخراج گواهی‌ها و کلیدها هم نیازمند نام گواهی جهت استخراج از پایگاه‌داده (-n) و هم فایل خروجی با فرمت PKCS #12 جهت نوشتن در آن است. پارامترهای اختیاری نیز وجود دارند که می‌توانند برای رمزگذاری فایل جهت محافظت از محتوای گواهی استفاده شوند.

pk12util -o p12File -n certname [-c keyCipher] [-C certCipher] [-m|--key_len keyLen] [-n|--cert_key_len certKeyLen] [-d directory] [-P dbprefix] [-k slotPasswordFile|-K slotPassword] [-w p12filePasswordFile|-W p12filePassword]

برای مثال:

# pk12util -o certs.p12 -n Server-Cert -d /home/my/sharednssdb
Enter password for PKCS12 file:
Re-enter password:

فهرست کردن کلیدها و گواهی‌ها

اطلاعات موجود در یک فایل .p12 برای انسان خوانا نیست. گواهی‌ها و کلیدهای موجود در فایل می‌توانند در قالب خوانا و آراسته (pretty-print) چاپ (فهرست) شوند که اطلاعات مربوط به هر گواهی و هرگونه کلید عمومی موجود در فایل .p12 را نمایش می‌دهد.

pk12util -l p12File [-h tokenname] [-r] [-d directory] [-P dbprefix] [-k slotPasswordFile|-K slotPassword] [-w p12filePasswordFile|-W p12filePassword]

برای مثال، این دستور خروجی پیش‌فرض ASCII را چاپ می‌کند:

# pk12util -l certs.p12
Enter password for PKCS12 file:
Key(shrouded):
    Friendly Name: Thawte Freemail Member's Thawte Consulting (Pty) Ltd. ID
    Encryption algorithm: PKCS #12 V2 PBE With SHA-1 And 3KEY Triple DES-CBC
        Parameters:
            Salt:
                45:2e:6a:a0:03:4d:7b:a1:63:3c:15:ea:67:37:62:1f
            Iteration Count: 1 (0x1)
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 13 (0xd)
        Signature Algorithm: PKCS #1 SHA-1 With RSA Encryption
        Issuer: "E=personal-freemail@thawte.com,CN=Thawte Personal Freemail C
            A,OU=Certification Services Division,O=Thawte Consulting,L=Cape T
            own,ST=Western Cape,C=ZA"

همچنین، گزینه -r گواهی‌ها را چاپ کرده و سپس آن‌ها را در فایل‌های باینری DER جداگانه استخراج می‌کند. این کار اجازه می‌دهد تا گواهی‌ها به برنامه دیگری که از فایل‌های .p12 پشتیبانی می‌کند داده شوند. هر گواهی در فایلی با شماره‌گذاری ترتیبی، با شروع از file0001.der تا file000N.der، با افزایش شماره برای هر گواهی نوشته می‌شود:

pk12util -l test.p12 -r
Enter password for PKCS12 file:
Key(shrouded):
    Friendly Name: Thawte Freemail Member's Thawte Consulting (Pty) Ltd. ID
    Encryption algorithm: PKCS #12 V2 PBE With SHA-1 And 3KEY Triple DES-CBC
        Parameters:
            Salt:
                45:2e:6a:a0:03:4d:7b:a1:63:3c:15:ea:67:37:62:1f
            Iteration Count: 1 (0x1)
Certificate    Friendly Name: Thawte Personal Freemail Issuing CA - Thawte Consulting
Certificate    Friendly Name: Thawte Freemail Member's Thawte Consulting (Pty) Ltd. ID

استاندارد PKCS #12 نه تنها برای محافظت از کلیدهای خصوصی بلکه برای محافظت از گواهی‌ها و فراداده‌های مرتبط با کلیدها نیز سازوکار ارائه می‌دهد. رمزگذاری مبتنی بر گذرواژه برای محافظت از کلیدهای خصوصی در هنگام استخراج به فایل PKCS #12 و در صورت تمایل، گواهی‌های مرتبط استفاده می‌شود. اگر هیچ الگوریتمی مشخص نشود، این ابزار به‌طور پیش‌فرض از PKCS #12 SHA-1 و DES سه‌گانه سه‌کلیدی برای رمزگذاری کلید خصوصی استفاده می‌کند. در صورتی که در حالت FIPS نباشد، از PKCS #12 SHA-1 و RC4 چهل‌بیتی برای رمزگذاری گواهی استفاده می‌شود. در حالت FIPS، هیچ رمزگذاری روی گواهی انجام نمی‌گیرد. اگر رمزگذاری گواهی مورد نظر نباشد، مقدار "NONE" را به عنوان آرگومان گزینه -C مشخص کنید.

کلید خصوصی همیشه به‌طور پیش‌فرض با رمزگذاری قوی محافظت می‌شود.

چندین نوع رمزنگاری (ciphers) پشتیبانی می‌شوند.

رمزگذاری مبتنی بر گذرواژه PKCS #5

•طرح PBES2 با AES-CBC-Pad به عنوان الگوریتم رمزگذاری زیربنایی ("AES-128-CBC"، "AES-192-CBC" و "AES-256-CBC")

رمزگذاری مبتنی بر گذرواژه PKCS #12

•الگوریتم SHA-1 و RC4 صدوبیست‌وهشت‌بیتی ("PKCS #12 V2 PBE With SHA-1 And 128 Bit RC4" یا "RC4")
•الگوریتم SHA-1 و RC4 چهل‌بیتی ("PKCS #12 V2 PBE With SHA-1 And 40 Bit RC4") (استفاده‌شده به‌طور پیش‌فرض برای رمزگذاری گواهی در حالت غیر FIPS)
•الگوریتم SHA-1 و DES سه‌گانه سه‌کلیدی ("PKCS #12 V2 PBE With SHA-1 And 3KEY Triple DES-CBC" یا "DES-EDE3-CBC")
•الگوریتم SHA-1 و RC2 صدوبیست‌وهشت‌بیتی ("PKCS #12 V2 PBE With SHA-1 And 128 Bit RC2 CBC" یا "RC2-CBC")
•الگوریتم SHA-1 و RC2 چهل‌بیتی ("PKCS #12 V2 PBE With SHA-1 And 40 Bit RC2 CBC")

در PKCS #12، ارائه‌دهنده رمزنگاری می‌تواند ماژول توکن نرم‌افزاری یا یک ماژول سخت‌افزاری خارجی باشد. اگر ماژول رمزنگاری از الگوریتم درخواستی پشتیبانی نکند، مناسب‌ترین گزینه بعدی انتخاب خواهد شد (معمولاً حالت پیش‌فرض). اگر جایگزین مناسبی برای الگوریتم مورد نظر پیدا نشود، ابزار خطای no security module can perform the requested operation را بازمی‌گرداند.

سامانه NSS در ابتدا از پایگاه‌های داده BerkeleyDB برای ذخیره اطلاعات امنیتی استفاده می‌کرد. آخرین نسخه‌های این پایگاه‌های داده قدیمی (legacy) عبارتند از:

•فایل cert8.db برای گواهی‌ها
•فایل key3.db برای کلیدها
•فایل secmod.db برای اطلاعات ماژول PKCS #11

با این حال، پایگاه‌داده BerkeleyDB محدودیت‌های کارایی دارد که مانع از استفاده همزمان و آسان آن توسط چندین برنامه می‌شود. سامانه NSS دارای انعطاف‌پذیری‌هایی است که به برنامه‌ها اجازه می‌دهد ضمن حفظ یک پایگاه‌داده مشترک و دور زدن مشکلات دسترسی، از موتور پایگاه‌داده مستقل خود استفاده کنند. با این وجود، NSS برای ارائه یک پایگاه‌داده امنیتی واقعاً مشترک، به انعطاف‌پذیری بیشتری نیاز دارد.

در سال ۲۰۰۹، سامانه NSS مجموعه جدیدی از پایگاه‌های داده را معرفی کرد که به جای BerkeleyDB، از نوع پایگاه‌های داده SQLite هستند. این پایگاه‌های داده جدید دسترسی‌پذیری و کارایی بیشتری را فراهم می‌کنند:

•فایل cert9.db برای گواهی‌ها
•فایل key4.db برای کلیدها
•فایل pkcs11.txt، فهرستی از تمامی ماژول‌های PKCS #11، موجود در یک زیرشاخه جدید در دایرکتوری پایگاه‌های داده امنیتی

از آنجا که پایگاه‌های داده SQLite برای اشتراک‌گذاری طراحی شده‌اند، این پایگاه‌ها از نوع مشترک (shared) محسوب می‌شوند. استفاده از نوع پایگاه‌داده مشترک اولویت دارد؛ و قالب قدیمی صرفاً برای سازگاری با گذشته حفظ شده است.

به‌طور پیش‌فرض، ابزارها (مانند certutil، pk12util و modutil) فرض می‌کنند که پایگاه‌های داده امنیتی مشخص‌شده از نوع SQLite هستند. استفاده از پایگاه‌های داده قدیمی باید به‌صورت دستی با افزودن پیشوند dbm: به مسیر پوشه امنیتی مورد نظر مشخص شود. برای مثال:

# pk12util -i /tmp/cert-files/users.p12 -d dbm:/home/my/sharednssdb

برای تنظیم نوع پایگاه‌داده قدیمی به‌عنوان نوع پیش‌فرض ابزارها، متغیر محیطی NSS_DEFAULT_DB_TYPE را روی dbm تنظیم کنید:

export NSS_DEFAULT_DB_TYPE="dbm"

این خط را می‌توان به فایل ~/.bashrc اضافه کرد تا این تغییر دائمی شود.

برای مطالعه پیش‌نویس مهندسی درباره تغییرات اعمال‌شده در پایگاه‌های داده مشترک NSS، به ویکی پروژه NSS مراجعه فرمایید:

رفتار استخراج pk12util به مرور زمان تغییر کرده است، در حالی که وارد کردن فایل‌های استخراج‌شده با نسخه‌های قدیمی‌تر NSS همچنان پشتیبانی می‌شود.

تا قبل از انتشار نسخه ۳.۳۰، ابزار pk12util از کدگذاری UTF-16 برای طرح‌های رمزگذاری مبتنی بر گذرواژه PKCS #5 استفاده می‌کرد، در حالی که توصیه می‌شود در صورتی که طرح رمزگذاری استفاده‌شده خارج از استاندارد PKCS #12 تعریف شده است، گذرواژه‌ها به صورت UTF-8 کدگذاری شوند.

تا قبل از انتشار نسخه ۳.۳۱، حتی زمانی که "AES-128-CBC" یا "AES-192-CBC" از خط فرمان داده می‌شد، pk12util همیشه از AES دویست‌وپنجاه‌وشش‌بیتی (256-bit AES) به عنوان طرح رمزگذاری زیربنایی استفاده می‌کرد.

به دلایل تاریخی، pk12util طرح‌های رمزگذاری مبتنی بر گذرواژه‌ای را که در این سند ذکر نشده‌اند نیز می‌پذیرد. با این حال، این طرح‌ها رسماً پشتیبانی نمی‌شوند و ممکن است در سازگاری با سایر ابزارها با مشکل مواجه شوند.

certutil(1)

modutil(1)

ویکی NSS حاوی اطلاعاتی در مورد طراحی پایگاه‌داده جدید و نحوه پیکربندی برنامه‌ها برای استفاده از آن است.

برای کسب اطلاعات درباره NSS و سایر ابزارهای مرتبط با NSS (مانند JSS)، به ویکی پروژه NSS در نشانی http://www.mozilla.org/projects/security/pki/nss مراجعه فرمایید. وب‌سایت NSS مستقیماً به تغییرات کد و انتشار نسخه‌های NSS مرتبط است.

فهرست‌های پستی: https://lists.mozilla.org/listinfo/dev-tech-crypto

کانال IRC: سرور Freenode در #dogtag-pki

ابزارهای NSS توسط توسعه‌دهندگانی از Netscape، Red Hat، Sun، Oracle، Mozilla و Google نوشته شده و نگهداری می‌شوند.

نویسندگان: Elio Maldonado <emaldona@redhat.com>، Deon Lackey <dlackey@redhat.com>.

تحت مجوز عمومی موزیلا (Mozilla Public License)، نسخه ۲.۰ منتشر شده است. اگر نسخه‌ای از MPL همراه با این فایل توزیع نشده است، می‌توانید آن را از نشانی http://mozilla.org/MPL/2.0 دریافت کنید.

1.
گزارش اشکال شماره ۸۳۶۴۷۷ موزیلا NSS
19 May 2021 nss-tools