بررسی گواهی VPN بدون افشای کلید آن
فیلدهای عمومی، تاریخها و اثر انگشتها را بدون چاپ مواد کلید بخوانید. اینکه کدام فرمان ایمن است به محتوای فایل و دریافتکننده خروجی بستگی دارد.
خواندن فیلدهای عمومی یک گواهی هرگز به نمایش کلید خصوصی متناظر آن نیاز ندارد، و ابزار این کار همراه هر سیستمی که VPN را پایان میدهد ارائه میشود. خطر یک قدم پیشتر است: فایلی که به شما داده شده ممکن است اصلاً گواهی نباشد. گواهی PEM، بلوک DER، بستهٔ PKCS#12 و پروفایل OpenVPN میتوانند با یک نام برسند و مواد بسیار متفاوتی داشته باشند، پس پیش از انتخاب فرمان، نوع محفظه را مشخص کنید.
سه واقعیت تعیین میکند کدام فرمان ایمن است: اینکه فایل چه دارد، اینکه چه چیزی باید از آن بخوانید، و اینکه چه کسی خروجی را میبیند. در هر یک از آنها اشتباه کنید و خود بررسی به حادثه تبدیل میشود.
کدام یک از سه فایل به شما داده شده است
گواهی PEM متنی با نشانههای آشکار BEGIN و END است، فایل DER دودویی است و به پرچم قالب ورودی نیاز دارد، و بسته محفظهای است که ممکن است کلیدی در کنار گواهی نگه دارد. فرمان file server.crt در یک ثانیه متن را از دودویی جدا میکند، و نگاهی به خط اول، گواهی خالی را از پروفایلی که گواهی را در خود جای داده جدا میکند. حدس زدن در اینجا همان چیزی است که بررسی را به حادثه تبدیل میکند.
اگر فایل بهجای گواهی یک پروفایل است، تا زمانی که خلافش ثابت نشده با آن مانند یک اعتبارنامه رفتار کنید. این فرض هیچ هزینهای ندارد و شایعترین اشتباه در کل این کار را جلوگیری میکند.
خواندن فیلدهای عمومی یک گواهی PEM
برای گواهیای که مجاز به بررسی آن هستید، زیرفرمان x509 با -noout فقط فیلدهایی را که انتخاب میکنید چاپ میکند و هیچ چیز دیگر. سرکوب بدنه همان چیزی است که خروجی را در محدودهٔ فراداده نگه میدارد، و همین آن را برای چسباندن در تیکت ایمن میکند. انتخابگرهای زیر عمومی هستند، و مستندات openssl x509 بقیه را فهرست میکند.
openssl x509 -in server.crt -noout -subject -issuer -dates -fingerprint -sha256
روی یک گواهی آزمایشی که بهصورت محلی ساخته شده، آن فرمان یک خط موضوع و صادرکننده، جفت notBefore و notAfter، و یک اثر انگشت SHA-256 چاپ میکند. آن فیلدها شیء را شناسایی میکنند؛ آنها مسیر اعتماد معتبری برقرار نمیکنند، که کاری جداگانه برای تأیید با فرمان و پاسخ خودش است. فایل زنجیره نیز ممکن است تنها نخستین گواهی را چاپ کند مگر اینکه خودتان روی فایل پیمایش کنید. مقایسهٔ دو فایل به این روش یک فرمان هزینه دارد و روشن میکند که طرف مقابل واقعاً کدام را ارائه میدهد.
بستههایی که کلیدی در کنار گواهی نگه میدارند
فایل .p12 یا .pfx میتواند کلید خصوصی داشته باشد، و فرمان تجزیه آن را چاپ میکند مگر اینکه آن بخش از خروجی را سرکوب کنید. با -nokeys همان فرمان هنوز ساختار محفظه، از جمله کیسهٔ کلید پوشیده، را گزارش میکند بدون آنکه هیچ مواد کلیدی منتشر کند؛ اگر آن پرچم را بردارید، یک بلوک کلید در ترمینال و در تاریخچهٔ پوستهٔ شما ظاهر میشود.
openssl pkcs12 -in bundle.p12 -nokeys -info -passin env:P12PASS
پروفایل OpenVPN همان مواد را بهصورت متن در خود جای میدهد، پس اگر بدانید کجا را ببینید، مرز آشکار است. مواد عمومی میان BEGIN CERTIFICATE و END CERTIFICATE قرار دارد، در حالی که هر چیزی میان BEGIN PRIVATE KEY و خط END متناظرش کلید است و نباید میزبان را ترک کند. کپی کردن کل پروفایل هر دو را منتشر میکند.
گرفتن مقدار مرجع از جای دیگر
اثر انگشتی که از اتصالی خوانده شود که میخواهید تأییدش کنید هیچ چیز را ثابت نمیکند، چون طرفی که به آن بیاعتماد هستید آن را عرضه کرده است. این استدلالی علیه اثر انگشت نیست؛ استدلالی دربارهٔ منشأ است. مقدار را با مقداری مقایسه کنید که از کانالی به دست آمده که طرف مقابل نمیتواند در آن بنویسد، مانند گواهی منتشرشده در یک مخزن داخلی یا هشی که در یک سابقهٔ تغییر امضاشده چاپ شده است.
جایی که یک مخزن اعتماد تأیید را انجام میدهد، بگذارید انجام دهد و خطایی را که تولید میکند بخوانید، بهجای آنکه مقایسهٔ خودتان را جایگزین آن کنید. تمایز مهم این است که چه کسی مرجع را عرضه کرده، نه اینکه از کدام تابع هش استفاده شده است.
به اشتراک گذاشتن نتیجه، و کار پس از یک لغزش
خطای دقیق تأیید، تاریخهای مربوط و تنها جزئیات هویتی را که گیرنده لازم دارد بفرستید. نام میزبانهای داخلی و شناسههای حساب حتی وقتی کلیدی وجود ندارد حساس میمانند، و یک سرویس چسباندن عمومی مقصد اشتباهی برای هر یک از آنها است. در تیکت بچسبانید، نه در یک بافر موقت که کسی دیگر آن را به اشتراک میگذارد.
اگر مواد کلیدی روی صفحه یا در فایلی ظاهر شد، آن را در معرض افشا بدانید و بهجای امید به اینکه کسی نگاه نکرده، آن را بچرخانید. سپس بنویسید کدام فایل بررسی شد، کدام فرمان به کار رفت و خروجی کجا رفت، زیرا همان سابقه است که یک ترس را به یک رویه تبدیل میکند. چرخش در برابر هزینهٔ این فرض که کسی اسکرینشات نگه نداشته ارزان است، و همان سابقه به مهندس بعدی میگوید اصلاً به کدام فایلها دست زده شده است. هر دو کار را پیش از بسته شدن تیکت انجام دهید.