swtpm-create-tpmca(8) دستورات مدیریت سیستم swtpm-create-tpmca(8)

swtpm-create-tpmca - ابزاری برای ایجاد یک مرجع صدور گواهی (CA) محلی برای swtpm_localca

swtpm-create-tpmca [OPTIONS]

دستور swtpm-create-tpmca ابزاری برای ایجاد یک مرجع صدور گواهی (CA) مبتنی بر TPM 1.2 یا TPM 2 است که می‌تواند توسط swtpm_localca برای امضای گواهی‌های پلتفرم و گواهی‌های EK (کلید تأیید یا Endorsement Key) استفاده شود. این CA از یک کلید GnuTLS برای امضای گواهی‌ها بهره می‌برد. در صورت استفاده از TPM 1.2، کتابخانه GnuTLS با استفاده از دیمن tcsd (پروژه TrouSerS) با TPM 1.2 ارتباط برقرار می‌کند. در صورت استفاده از TPM 2، درایور pkcs11 اینتل و ابزارهای آن (tpm2_ptool) نیز مورد نیاز خواهند بود.

از آنجا که گواهی مرجع صدور گواهی TPM باید توسط یک CA امضا شود، یک مرجع صدور گواهی ریشه (Root CA) نیز ایجاد خواهد شد و این گواهی را امضا خواهد کرد. کلید خصوصی و گواهی Root CA در همان دایرکتوریِ کلید امضاکننده قرار خواهند گرفت و به ترتیب دارای نام‌های swtpm-localca-rootca-privkey.pem و swtpm-localca-rootca-cert.pem خواهند بود. متغیر محیطی SWTPM_ROOTCA_PASSWORD می‌تواند برای تعیین گذرواژه کلید خصوصی Root CA تنظیم شود.

نکته: این ابزار آزمایشی (experimental) است. بخش مشکلات شناخته‌شده را در ادامه ببینید.

گزینه‌های زیر پشتیبانی می‌شوند:

دایرکتوری که کلیدها در آن نوشته خواهند شد. یک Root CA موجود دارای فایل‌های swtpm-localca-rootca-privkey.pem و swtpm-localca-rootca-cert.pem در این دایرکتوری مجدداً استفاده خواهد شد. اگر هر یک از این دو فایل وجود نداشته باشد، یک Root CA جدید ایجاد می‌شود.
بازنویسی محتویات دایرکتوری خروجی.
ثبت کلید در TCSD. برای این‌که کلید جهت امضا در دسترس باشد، همان کاربری که مرجع صدور گواهی TPM را ایجاد کرده است باید بعداً ابزار swtpm_localca را اجرا کند. اگر این گزینه داده نشود، کلید خصوصی درون یک فایل نوشته می‌شود و سایر کاربران نیز می‌توانند از آن استفاده کنند.
کلید امضای جدید این گذرواژه را دریافت خواهد کرد.

نکته: به دلیل وجود یک اشکال (bug) در ابزار certtool مربوط به GnuTLS، ممکن است لازم باشد از همان گذرواژه‌ای که برای SRK تعیین شده است، برای کلید امضا نیز استفاده شود.

گذرواژه SRK مربوط به TPM.

نکته: از آنجا که ابزار tpmtool در GnuTLS از گذرواژه «شناخته‌شده» ('well known') متشکل از ۲۰ بایت صفر پشتیبانی نمی‌کند، گذرواژه SRK حتماً باید تنظیم شود.

نام فایلی که پیکربندی swtpm-localca.conf در آن نوشته می‌شود.
نام کاربری یا شناسه عددی مالک (uid) که مالک دایرکتوری و فایل خروجی (outfile) خواهد بود. این گزینه تنها زمانی اثر دارد که swtpm-create-tpmca توسط کاربر ریشه (root) اجرا شود.
نام گروه یا شناسه عددی گروه (gid) که مالک دایرکتوری و فایل خروجی (outfile) خواهد بود. این گزینه تنها زمانی اثر دارد که swtpm-create-tpmca توسط کاربر ریشه (root) اجرا شود.
نام میزبان (hostname) که tcsd روی آن در حال اجرا است. نام میزبان پیش‌فرض 'localhost' است.
پورت TCP که tcsd روی آن به پیام‌ها گوش فرا می‌دهد. پورت پیش‌فرض 30003 است.
تراشه TPM مورد استفاده برای امضای گواهی‌ها یک TPM 2 است و پشته TSS اینتل (tpm2-abrmd) باید همراه با ماژول PKCS11 آن در حال اجرا باشد. ماژول PKCS11 مربوط به TPM 2 باید با استفاده از tpm2_ptool مقداردهی اولیه شده باشد.

متغیرهای محیطی SWTPM_PKCS11_PIN و SWTPM_PKCS11_SO_PIN باید برای نگهداری پین‌کدها (PIN) تنظیم شوند. اگر SWTPM_PKCS11_PIN تنظیم نشده باشد، از پین پیش‌فرض 'swtpm-tpmca' استفاده خواهد شد. متغیر SWTPM_PKCS11_SO_PIN برای ایجاد توکن لازم است و باید به طور صریح به عنوان یک متغیر محیطی تنظیم شود.

شناسه شیء اصلی (primary object id) که tpm2_ptool هنگام اجرای 'init' برمی‌گرداند.
نمایش صفحه راهنما و خروج.

مثال زیر یک مرجع صدور گواهی واسط (intermediate TPM CA) ایجاد می‌کند و کلیدها را در /var/lib/swtpm-localca و پیکربندی swtpm_localca را در /etc/swtpm-localca.conf می‌نویسد. سپس می‌توان از آن برای امضای گواهی‌های swtpm TPMهای جدید ایجادشده استفاده کرد.

اگر TPM میزبان یک TPM 1.2 باشد، ابتدا باید tcsd را راه‌اندازی کنیم و سپس می‌توانیم کلید TPM و گواهی TPM CA را ایجاد کنیم:

#> sudo systemctl start tcsd
#> sudo /usr/share/swtpm/swtpm-create-tpmca \
               --dir /var/lib/swtpm-localca \
               --overwrite \
               --outfile /etc/swtpm-localca.conf \
               --srk-password password \
               --key-password password \
               --group tss
statedir = /var/lib/swtpm-localca
signingkey = tpmkey:file=/var/lib/swtpm-localca/swtpm-localca-tpmca-privkey.pem
issuercert = /var/lib/swtpm-localca/swtpm-localca-tpmca-cert.pem
certserial = /var/lib/swtpm-localca/certserial
TSS_TCSD_HOSTNAME = localhost
TSS_TCSD_PORT = 30003
signingkey_password = password
parentkey_password = password

در غیر این صورت، اگر TPM میزبان یک TPM 2 باشد و پشته TPM 2 اینتل نصب شده باشد، ابتدا باید tpm2-abrmd را راه‌اندازی کنیم و سپس می‌توانیم کلید TPM و گواهی TPM CA را ایجاد کنیم:

#> sudo systemctl start tpm2-abrmd     # may not be required with recent Intel TPM 2 tools
#> sudo tpm2_ptool init
action: Created
id: 1                   # this is the --pid parameter below
#> sudo SWTPM_PKCS11_PIN="mypin 123" SWTPM_PKCS11_SO_PIN=123 /usr/share/swtpm/swtpm-create-tpmca \
               --dir /var/lib/swtpm-localca \
               --overwrite \
               --outfile /etc/swtpm-localca.conf \
               --group tss \
               --tpm2 \
               --pid 1
statedir = /var/lib/swtpm-localca
signingkey = pkcs11:model=SW%20%20%20TPM\;manufacturer=IBM\;serial=0000000000000000\;token=swtpm-tpmca-1\;id=%31\;object=swtpm-tpmca-key\;type=private
issuercert = /var/lib/swtpm-localca/swtpm-localca-tpmca-cert.pem
certserial = /var/lib/swtpm-localca/certserial
SWTPM_PKCS11_PIN = mypin 123

نکته: این مورد برای کاربران غیرریشه نیز کار می‌کند؛ به این صورت که پارامترهای --dir و --outfile در اینجا و ادامه با تغییر دادن پارامتر --dir و افزودن پارامتر --config تنظیم شوند.

برای آزمودن هر یک از مراجع صدور گواهی TPM بالا، دستور زیر را اجرا کنید:

#> swtpm_localca \
       --type ek --ek x=11,y=13 \
       --dir /tmp --vmid test --tpm2 \
       --tpm-spec-family 2.0 --tpm-spec-revision 146 --tpm-spec-level 00 \
       --tpm-model swtpm --tpm-version 20170101 --tpm-manufacturer IBM

گزینه --tpm2 در این دستور نشان می‌دهد که TPM مورد نظر برای ایجاد گواهی، یک TPM 2 است.

تعامل certtool در GnuTLS با دیمن tcsd مربوط به TPM ممکن است باعث ایجاد خطاهای احراز هویت مکرر کلید TPM شود، تا حدی که TPM از پذیرش دستورات احراز هویت‌شده بعدی خودداری نماید تا زمانی که مالک TPM دستور TPM_ORD_ResetLockValue را برای آن ارسال کند. دلیل این امر آن است که certtool ابتدا تلاش می‌کند از ۲۰ بایت صفر برای گذرواژه SRK استفاده کند و تنها پس از آن، گذرواژه مورد نیاز SRK را درخواست و استفاده می‌نماید. ابزار tpmtool در GnuTLS از ۲۰ بایت صفر برای گذرواژه SRK پشتیبانی نمی‌کند، بنابراین استفاده از یک گذرواژه «واقعی» را اجباری می‌سازد.

اثر این خطاهای احراز هویت ممکن است این باشد که مرجع صدور گواهی TPM نتواند گواهی‌ها را امضا کند، زیرا TPM دستورات احراز هویت‌شده را نمی‌پذیرد.

swtpm_localca، swtpm-localca.conf، tcsd

گزارش اشکالات را به Stefan Berger <stefanb@linux.ibm.com> ارسال کنید.

2026-03-26 swtpm