همان نام فایل ca.crt، گواهی متفاوت: چه چیزی را مقایسه کنیم
دو پروفایل میتوانند ca.crt با محتوای متفاوت داشته باشند. اثر انگشت آنچه فرایند بارگذاری میکند را بگیرید، سپس بررسی کنید که همان لنگر اعتماد مورد نظر است یا نه.
دو پروفایل هر دو فایلی به نام ca.crt همراه دارند، یک تونل بالا میآید و دیگری با خطای زنجیره شکست میخورد. باز کردن دو فایل کنار هم بهندرت آن را حل میکند، و خاموش کردن تأیید آن را در جهت اشتباه حل میکند. پرسشی که خطا در واقع میپرسد باریکتر است: هر فرایند کدام گواهی را بهعنوان لنگر اعتماد خود بارگذاری میکند، و آیا آن دو همان شیء هستند؟ اول به آن پاسخ دهید تا بقیه عیبیابی جهت پیدا کند. نام فایل یک برچسب بستهبندی است، و مسیری که در پروفایل نوشته شده هم معتبر نیست، پس همه چیز به آنچه فرایند واقعاً میخواند بستگی دارد.
گواهیای را پیدا کنید که کلاینت واقعاً بارگذاری میکند
OpenVPN مرجع را به دو شکل میپذیرد، و شکل تعیین میکند کدام بایتها اهمیت دارند. یک پروفایل میتواند با ca به فایل بیرونی اشاره کند، یا گواهی را داخل بلوک <ca> در خود پروفایل جای دهد. وقتی هر دو وجود دارند، بلوک جاسازیشده برنده میشود و فایل کنار پروفایل هرگز باز نمیشود.
پروفایلی را که شکست میخورد بخوانید و پیش از مقایسه هر چیزی بفهمید کدام شکل را به کار میبرد. نسخهای که از پوشه مجاور یا از بستهای که پروفایل دیگر از آن آمده برداشته شده باشد، چیزی درباره اینکه این فرایند به چه چیزی اعتماد دارد نمیگوید. همین برای مسیر در پیکربندی هم صادق است: نسبت به جایی حل میشود که کلاینت شروع شده، که همیشه پوشهای که به آن نگاه میکنید نیست. پروفایل را بخوانید، نه پوشه را.
گواهیها با محتوایشان شناسایی میشوند: کلید عمومی، موضوع و صادرکننده، بازه اعتبار و امضایی روی همه اینها. دو فایلی که بایتهای یکسان دارند همان گواهی هستند هر نامی که داشته باشند، و دو فایل با نام یکسان میتوانند مراجع بیارتباط باشند. نام یک برچسب بستهبندی است، نه هویت.
اثر انگشت هر دو نسخه را با openssl بگیرید
اثر انگشت یک هش روی کدگذاری DER گواهی است، همان شکلی که امضا پوشش میدهد، پس پایان خطوط و متن سرصفحه نمیتوانند بر آن اثر بگذارند. آن را برای هر فایل حساب کنید و دو رشته هگزادسیمال جداشده با دونقطه دارید که یا مطابقت دارند یا نه. برای پاسخ به پرسش مقایسه نیازی به خواندن چیز دیگری در گواهی نیست.
openssl x509 -in /etc/openvpn/office/ca.crt -noout -fingerprint -sha256
openssl x509 -in ~/profiles/lab-ca.pem -noout -fingerprint -sha256
وسوسهانگیز است که openssl را به خود پروفایل اشاره دهید، اما این ابزار اولین بلوک گواهیای را که در فایل میآید میخواند، و پروفایل معمولاً <cert> را پیش از <ca> دارد. بلوک مرجع را بیرون بکشید، سپس از فایل استخراجشده اثر انگشت بگیرید، چون همان نسخهای است که کلاینت واقعاً استفاده میکند.
sed -n '/^<ca>$/,/^<\/ca>$/p' office.ovpn | sed '1d;$d' > /tmp/office-ca.pem
openssl x509 -in /tmp/office-ca.pem -noout -fingerprint -sha256
اثر انگشتهای یکسان یعنی مواد اعتماد یکسان است و خطای زنجیره علت دیگری دارد، که تحقیقی متفاوت است. اثر انگشتهای متفاوت یعنی گواهیهای متفاوت، و بخش بعدی از همانجا شروع میشود.
ناسازگاری را پیش از فرض حمله بخوانید
اثر انگشتهای متفاوت یعنی گواهیهای متفاوت و نه چیزی بیشتر. صدور دوباره، چرخش، مرجع تغییرنامیافته یا بسته کهنه همه فایلهای متفاوت با پیشینههای کاملاً مشروع تولید میکنند. اینکه کدام به استقرار تعلق دارد پرسشی برای اپراتور یا سابقه استقرار است، نه برای زمان تغییر فایل. بایگانیها مهرهای زمانی را کپی میکنند، پس فایل تازهتر بهطور خودکار لنگر درست نیست.
ریشهای که خودش را امضا میکند عادی است، پس پیدا کردن یکی دلیل بر مشکل نیست. کار بازبین ساختن مسیری از گواهی سرور تا لنگر دادهشده است، و خطای زنجیره معمولاً یعنی آن مسیر کامل نشده.
بررسی کنید لنگر پروفایل شکستخورده مرجعی است که استقرار هنوز از آن صادر میکند. اگر اثر انگشت با چیزی در سابقه استقرار مطابقت ندارد، پروفایل صرفاً کهنه است، و هیچ تنظیمی در سمت کلاینت آن را درست نمیکند.
اعتماد را بدون خاموش کردن تأیید ترمیم کنید
راهحل کوتاهمدت خاموش کردن تأیید یا افزودن هر گواهی زنجیره بهعنوان لنگر است. هر دو پیام را محو میکنند، و هر دو تغییر میدهند که کلاینت از آن پس کدام سرورها را بپذیرد. تأیید را دوباره روشن کنید، لنگر مورد نظر را نصب کنید و دوباره آزمایش کنید.
اگر زنجیره اکنون ساخته میشود اما خطای دیگری ظاهر میشود، این پیشرفت است: تأیید نام، تاریخهای اعتبار و ابطال بررسیهای جداگانه با پیامهای جداگانهاند. جفت اثر انگشت و متن اصلی خطا را کنار هم در تیکت نگه دارید تا نفر بعد ببیند کدام لنگر بارگذاری شده و کدام انتظار میرفت. یک جفت اثر انگشت آنقدر کوچک است که در یادداشت تحویل جای بگیرد، و رخداد بعدی آنگاه پنج دقیقه طول میکشد نه یک بعدازظهر.
مرجع درست را از همان کانال احرازشدهای بگیرید که پروفایل را تحویل داد. کشیدن گواهی از سرور چون موضوعش آشنا به نظر میرسد اقدامی متفاوت است، و بیصدا دامنه اعتماد کلاینت را گسترده میکند.