جای n، e، d، p و q در RSA کجای پرونده کلید VPN است
n، e، d، p و q درون یک ساختار هستند، نه در نام پروندهها. کلید RSA یک VPN را با OpenSSL بخوانید و بدون چاپ رازها آن را با گواهیاش جفت کنید.
حروف در توضیح RSA نام میدانهایی درون یک شیء را میگویند، نه پروندههایی را که ابزار PKI تحویل میدهد. پرونده کلید خصوصی ساختاری دارد که میدانهای آغازینش عمومیاند و میدانهای بعدیاش هرگز نباید از ماشینی که تونل را پایان میدهد بیرون بروند. میان این دو واقعیت بیشتر پرسشهای کاربردی درباره اینکه کدام پرونده به کدام پرسش پاسخ میدهد جای دارد. این راهنما نخست ساختار را میخواند و سپس فرمانهایی را که آن را بیآنکه بریزند بررسی میکنند.
پیش از جستجوی اعداد اول مطمئن شوید کلید RSA است
گواهی اثبات میکند که کلیدی وجود دارد و امضا شده است؛ اثبات نمیکند که کلید RSA است. سامانهها را میتوان بر منحنیهای بیضوی یا Ed25519 ساخت و همان چیدمان پوشهها به همه آنها خدمت میکند. پیش از آغاز جستجوی عاملهای اولی که هرگز نبودهاند الگوریتم را بررسی کنید.
این سه فرمان فقطخواندنی به پرسش پاسخ میدهند و نسخه ابزار را ثبت میکنند.
openssl version
openssl x509 -in vpn-client.crt -noout -text
openssl pkey -in vpn-client.key -noout -text
نسخه اهمیت دارد چون نام گزینهها میان انتشارهای اصلی جابهجا شده است. در خروجی گواهی خط الگوریتم کلید عمومی و اندازه کلید را بیابید؛ در خروجی کلید، کلید RSA یک پیمانه و یک نماگر عمومی چاپ میکند. کلید منحنی بیضوی در عوض یک منحنی نامدار چاپ میکند و هیچ جستجویی n یا q از آن بیرون نمیآورد.
ساختار را بهجای base64 بخوانید
PEM همان base64 پیچیده در خطوط سرصفحه است و رمزگشایی آن DER میدهد، یعنی ساختاری سریالشده نه یک عدد صحیح غولآسا. کلیدهای خصوصی RSA در دو ظرف رایج، PKCS#1 و PKCS#8، سفر میکنند و هر دو به همان مجموعه اعداد میرسند.
در حالت دو عدد اول ساختار خصوصی نُه میدان دارد: یک نسخه، پیمانه n، نماگر عمومی e، نماگر خصوصی d، اعداد اول p و q، دو نماگر CRT و یک ضریب CRT. بخش A.1 از RFC 8017 این اجزا و چیدمان ASN.1 را تعریف میکند و بیش از دو عدد اول را نیز مجاز میداند، از همین رو یک تجزیهگر عمومی میتواند مدخلهای اول اضافی چاپ کند. به ترتیب توجه کنید، چون خطای رایجی را توضیح میدهد: نیمه عمومی درون پرونده خصوصی ذخیره میشود، پس وجود یک میدان عمومی آن پرونده را برای همرسانی ایمن نمیکند. هر چه پس از آن میآید موادی است که باید روی میزبان بماند.
رمزگذاری لایهای میافزاید که آسان با محتوا اشتباه میشود. openssl asn1parse ساختار را همچون درختی میکشد تا ترتیب میدانها دیدنی شود، و نه چیزی را رمزگشایی میکند نه میگوید کلید سودمند است.
گواهی را بدون چاپ کلید با کلید جفت کنید
پرسشی که پس از آن میآید معمولاً این است که آیا گواهی و کلید به هم تعلق دارند. مقایسه پیمانهها به آن پاسخ میدهد، ولی مواد نزدیک به خصوصی را نیز به رونوشت ترمینالی میریزد که ممکن است در تیکت بیفتد. مقایسه نیمههای عمومی به همان پرسش پاسخ میدهد بیآنکه چیز حساسی روی صفحه باشد.
openssl pkey -in vpn-client.key -pubout -out /tmp/key.pub
openssl x509 -in vpn-client.crt -pubkey -noout > /tmp/cert.pub
cmp /tmp/key.pub /tmp/cert.pub && echo MATCH
پروندههای یکسان یعنی گواهی نیمه عمومی آن کلید را دارد، و تفاوت یعنی جفت اشتباهی در دست دارید. همین ناهمخوانی شایعترین علت تونلی است که شادمانه مذاکره میکند و سپس احراز هویت را رد میکند. سپس دو پرونده موقت را بردارید؛ چیز پنهانی ندارند، اما پوشه کاری پاک در میانه یک رخداد آسانتر استدلال میشود.
بدانید پروندههای همسایه چه نیستند
گواهی یک کلید عمومی رمزشده نیست که همتا با گواهی CA آن را بگشاید؛ پیوندی امضاشده میان یک کلید عمومی و دادههای هویت است. کلید امضای خصوصی CA جدا از گواهی خودش و از هر کلید کارخواه میماند. درخواست هم گواهی نیست: اطلاعات درخواستی و کلید عمومی را با امضایی بر درخواست دارد، که آن را ورودی ثبتنام میکند نه اثبات حق.
| File | Answers | Does not prove |
|---|---|---|
| vpn-client.key | Possession of the private key | That the identity is enrolled |
| vpn-client.crt | A signed binding of public key to identity | That the client holds the matching key |
| vpn-client.csr | The requested binding and public key | That access was granted |
| dh2048.pem | Group parameters for key exchange | Any RSA component |
| crl.pem | Revocation status for certificates | Anything about a private key |
دو تا از این مدخلها بهقدر کافی با پارامترهای RSA اشتباه میشوند که دو بار نام برده شوند. پرونده پارامترهای Diffie-Hellman پارامترهای گروه برای برپایی کلید دارد و هیچ عدد اول RSA ندارد، هرچند آن هم بهصورت یک عدد اول بزرگ چاپ میشود. فهرست ابطال وضعیت گواهیها را منتشر میکند و جایی نیست که یک نماگر خصوصی در آن پنهان شود.
پس هر سطر سیاهه باید چهار چیز را ثبت کند: نوع شیء، مالک، هدف و اینکه مواد خصوصی گنجانده شده است یا نه. ستون آخر تعیین میکند پرونده را کجا میتوان رونوشت کرد، و همان ستونی است که مردم از آن میگذرند.
جفتشدن را ثبت کنید و سپس دستدادن را بررسی کنید
پیش از تغییر هر چیز، خروجی بررسی را با تاریخ و نسخه OpenSSL ذخیره کنید. آنگاه چرخش بعدی را میتوان با شواهد سنجید نه با حافظه.
openssl verify -CAfile ca.crt vpn-client.crt
openssl x509 -in vpn-client.crt -noout -subject -issuer -dates
پس از مقایسه کلید عمومی، مسیری را که جفت را مصرف میکند بیازمایید: تونل را بالا بیاورید، تأیید کنید گواهی ارائه و پذیرفته میشود، و بررسی کنید دروازه کدام هویت را ثبت کرده است. اگر کلید و گواهی میخوانند و احراز هویت هنوز شکست میخورد، نقص در اعتماد، نقشهبرداری هویت یا سیاست دسترسی است نه در جفت.
برای بازگردانی، کلید و گواهی پیشین را در پوشهای تاریخدار نگه دارید و هر دو را با هم بازگردانید، هرگز یکی از آن دو را. کلید بدون گواهیاش و گواهی بدون کلیدش از بیرون یکسان شکست میخورند، که جفتهای نیمهبازگردانده را در ساعت دو بامداد گرانقیمت میکند.