خطای اعتماد IKEv2 در اندروید: CA میانی را بفرستید، نه ریشه
گوشی دروازه را رد میکند چون زنجیره دریافتی زود تمام میشود. تصمیم بگیرید: میانی را بفرستید، هویت را اصلاح کنید یا نوع کلید را عوض کنید.
گوشی از اتصال امتناع میکند و No trusted RSA public key found for vpn.example.net را چاپ میکند، در حالی که همان گواهی دروازه از یک لپتاپ در همان شبکه کار میکند. اقدام وسوسهانگیز، صدور دوباره گواهی است. پیش از آن مشخص کنید کدام یک از سه خرابی را دارید، چون فقط یکی از آنها به محتوای گواهی مربوط است.
سه خرابی پشت یک پیام
اندروید زنجیرهای از گواهی دروازه تا CA انتخابشده در پروفایل VPN میسازد، سپس نام سرور را با پروفایل مقایسه میکند. اعلان نتیجه را گزارش میکند، نه مرحله را. خرابی اعتماد یعنی زنجیره با گواهیهای تحویلشده در تبادل کامل نشد؛ خرابی هویت یعنی زنجیره معتبر است اما نام نمیخواند؛ خرابی الگوریتم یعنی دستگاه یا پروفایل نوع کلید یا امضا را نمیپذیرد.
| What you see | What it points to | First move |
|---|---|---|
| Chain stops after the leaf in the daemon log | intermediate not loaded or not sent | load the intermediate as CA material |
| Chain validates, name differs from the profile | identity mismatch | fix the profile name or the certificate SAN |
| Chain validates, handshake still fails | key or signature not accepted | compare key type against the device |
با شواهد تصمیم بگیرید، نه با آزمودن تعمیرها به ترتیب. یک تلاش در سطح گزارش 2 روی سرویس میگوید در کدام ردیف هستید و از صدور دوباره گواهیای که هرگز غلط نبوده کمهزینهتر است.
اول تصمیم بگیرید: آیا زنجیره کامل رسید؟
strongSwan گواهی تنظیمشده برای آن اتصال را میفرستد و گواهیهای میانی اعتبارنامههای جداگانهاند. باید پیش از آنکه سرویس آنها را در بار بگذارد بهعنوان گواهی CA بارگذاری شوند، پس چیدمانی که گواهی سرور با میانی امضا شده، ریشه لنگر اعتماد است و میانی فقط در پوشه ساخت CA زندگی میکند، دقیقاً همین خرابی را میدهد: فقط برگ روی سیم و زنجیرهای که زود در گوشی تمام میشود.
بررسی کنید سرویس چه دارد با swanctl --list-certs در استقرار swanctl، یا ipsec listcerts با استارتر قدیمی. میانی باید بهعنوان گواهی CA با ریشه بالای آن دیده شود. اگر نیست، هیچ گزینهای در سرویسگیرنده کمکی نمیکند؛ اگر هست، به پرسش بعدی بروید.
سپس بررسی کنید آیا فرستاده میشود. مرجع swanctl.conf گزینه send_cert را مستند میکند که پیشفرض آن ifasked گواهیها را فقط وقتی همتا درخواست کرده میفرستد، در حالی که always همیشه میفرستد. معادل قدیمی leftsendcert=always در ipsec.conf است. این تنظیم ارسال را کنترل میکند نه دسترسپذیری، پس نمیتواند میانیای را که سرویس هرگز بار نکرده جبران کند.
اگر زنجیره کوتاه است، میانی را همانجا که سرویس میگردد بار کنید
میانی را در پوشه CA بگذارید نه کنار برگ: /etc/ipsec.d/cacerts برای چیدمانی با ipsec.conf، /etc/swanctl/x509ca برای swanctl، یا مسیری که بسته شما جایگزین میکند. پیکربندی را دوباره بار کنید و گواهیها را دوباره فهرست کنید. برخی نسخهها بستهای هم میفرستند که زنجیره را در فایل برگ دارد، اما پوشه CA چیدمان قابلحمل میان نسخهها و بستههاست.
از سمت سرویسگیرنده هم بررسی کنید. گوشی فقط آنچه تبادل حمل کرده را میبیند، پس گزارش سرویس در سطح 2 باید میانی را میان گواهیهای ارسالی نشان دهد. اگر گزارش نشان میدهد و گوشی باز هم شکست میخورد، در ردیف دیگری از جدول هستید و تغییر فایلهای CA نتیجه را عوض نمیکند.
اگر زنجیره کامل است، ویرایش گواهیها را متوقف کنید
خرابی هویت ناسازگاری میان نام در پروفایل VPN و نام در گواهی است. اندروید هویت سروری که تنظیم کردهاید را با گواهیای که اعتبارسنجی کرده مقایسه میکند، پس پروفایلی که به نشانی اشاره میکند در حالی که گواهی نام میزبان میگوید، یا پروفایلی با نام میزبانی که گواهی پوشش نمیدهد، پس از اعتبارسنجی موفق زنجیره شکست میخورد. سمت غلط را اصلاح کنید و پروفایل و گواهی را همراستا نگه دارید.
خرابی الگوریتم با زنجیره معتبر و نام منطبق ظاهر میشود. نسخههای اندروید در نوع کلیدها و طرحهای امضایی که میپذیرند متفاوتاند، و خود نوع پروفایل گزینهها را محدود میکند. اگر دروازه ترکیب قدیمیتر یا نامعمولی دارد، پیش از فرض خرابی گواهی آن را با پشتیبانی دستگاه بسنجید. گزارش نشان میدهد دستدهی جلوتر از حالت اعتماد میرود، یعنی زنجیره دیگر مشکل نیست.
میانی را بهعنوان ریشه کاربر روی گوشی نصب نکنید
نصب میانی گمشده بهعنوان گواهی کاربر روی گوشی هشدار را محو میکند و مدل اعتماد گوشی را برای هر برنامهای که ریشههای نصبشده کاربر را میپذیرد تغییر میدهد. همچنین نقص تحویلی را پنهان میکند که سرویسگیرنده بعدی را میزند و دروازه را وامیدارد به هر دستگاه آینده زنجیره ناقص بفرستد. تعمیر پایدار در سرور است، یک بار، برای همه.
سه تصمیم را در سابقه تغییر جدا نگه دارید: کدام گواهیها منتقل شد، کدام هویت مقایسه شد و کدام الگوریتم توافق شد. دروازهای که همیشه زنجیره کامل میفرستد، پروفایلی که گواهی را درست نام میبرد و نوع کلیدی که ناوگان پشتیبانی میکند سه واقعیت کوچکاند و همان کل این خرابیاند.