AES-256-GCM پیدا نشد: توانایی کلاینت یا مذاکره؟
دو خطای OpenVPN شبیه هم به نظر میرسند: نسخهای بدون الگوریتم و همتایانی بدون رمز مشترک. پیش از ویرایش پروفایل، --show-ciphers و data-ciphers را بخوانید.
پروفایل OpenVPN که جای دیگری کار میکند گزارش میدهد که AES-256-GCM یافت نمیشود یا همتایان رمز مشترکی ندارند، و نخستین واکنش ویرایش پروفایل است. این دو پیام شکستهای متفاوتی را توصیف میکنند. یکی میگوید برنامه محلی چنین الگوریتمی ندارد؛ دیگری میگوید هر دو طرف الگوریتم دارند اما انتخاب مشترکی ندارند. ویرایش پروفایل تا زمانی که ندانید کدام را دارید هیچیک را درست نمیکند.
متن دقیق خطا و برنامهای را که آن را ساخته بخوانید.
مشخص کنید کدام خطا را دارید
پیام درباره رمزی که یافت نمیشود از تحلیل گزینهها روی ماشین محلی میآید، پیش از آنکه بستهای فرستاده شود. یعنی فایل اجرایی پیش روی شما یا کتابخانهای که به آن پیوند دارد آن الگوریتم را عرضه نمیکند. پیام نبود رمز مشترک دیرتر و در هنگام مذاکره میرسد و یعنی هر دو طرف رمزها را پشتیبانی میکنند اما بر یکی توافق نمیکنند.
این تمایز مهم است زیرا یکی مشکل نسخه نرمافزار است و دیگری مشکل پیکربندی. اولی با شماره نسخه حل میشود. دومی با مقایسه دو فهرست حل میشود.
شکاف توانایی محلی
نسخههای قدیمی جامعه پیش از پیشفرضهای امروزی هستند، و یک برنامه رومیزی میتواند موتور خودش را همراه داشته باشد که با بسته خط فرمان نصبشده در کنارش تفاوت دارد. بررسیها را روی همان فایل اجرایی انجام دهید که واقعا اتصال را آغاز کرد، سپس نسخهای پشتیبانیشده برگزینید نه اینکه به برنامهای قدیمی الگوریتم تازه بیاموزید.
openvpn --version openvpn --show-ciphers | grep -i gcm openvpn --show-tls | head -5
اگر AES-256-GCM در آن فهرست نیامده باشد، هیچ سطر پروفایلی آن را اضافه نمیکند. راهحل کلاینت تازهتر یا نسخهای دیگر است، و محدودیتهای طرف قدیمیتر به پرسش طراحی جداگانه تبدیل میشود.
در کلاینتهای مبتنی بر OpenVPN 3 موتور و دستورهای پذیرفتهشده با خط 2.x جامعه تفاوت دارند، پس همان متن پروفایل میتواند به دلایلی شکست بخورد که هیچ ارتباطی با فهرست رمزها ندارد.
شکاف مذاکره
وقتی هر دو طرف الگوریتم را فهرست میکنند، پرسش باقیمانده این است که هر طرف کدام فهرست را عرضه میکند. OpenVPN جامعه نام دستور مذاکره را عوض کرد: ncp-ciphers در 2.4 به data-ciphers در 2.5 تبدیل شد، و در 2.6 سطر قدیمی cipher بیشتر به سازگاری و بازگشت خدمت میکند نه تعریف مجموعه مذاکرهشده.
به همین دلیل تغییر تنها یک سطر قدیمی cipher میتواند فهرست مذاکره را دستنخورده بگذارد. سطر قدیمی هنوز برای بازگشت مهم است و آن کاری جداست. اشتباه گرفتن این دو ویرایشهایی میسازد که هیچ چیز دیدنی را تغییر نمیدهد.
openvpn --version | head -2 grep -n -E '^(data-ciphers|ncp-ciphers|cipher|tls-cipher)' server.conf client.ovpn
فهرستهای دو انتها و پیام رد سرور را مقایسه کنید. اگر اشتراک خالی است، فهرستها را آگاهانه همتراز کنید نه اینکه مقداری را از نوشتهای برای نسخهای دیگر کپی کنید. فهرست بیش از حد سخاوتمندانه هر اتصال را بیصدا ضعیف میکند. فهرست بیش از حد تنگ همتایی را که میخواستید نگه دارید کنار میگذارد.
سازگاری را صریح نگه دارید
بازگشت برای یک همتای قدیمی تصمیمی با هزینه است: کل استقرار گزینهای ضعیفتر را میپذیرد تا یک دستگاه وصل شود. آن را همینگونه بنویسید و به همان همتایی محدود کنید که به آن نیاز دارد.
دو شرط نتیجه را تعیین میکند. اگر خطا محلی است، نسخه را عوض کنید. اگر خطا مذاکرهای است، فهرستها را در دو انتها همتراز کنید و بنویسید کدام نسخهها را پشتیبانی میکنید.
سپس خطای دقیق را همراه با خروجی نسخه و توانایی گزارش کنید. این جفت، الگوریتم غایب را از اختلاف جدا میکند و دور بعدی ویرایشهای حدسی را پیش از آغاز متوقف میکند.