انقضای کوکی ConnMan OpenConnect، نه مشکل گواهی
دو خرابی در گزارش یکسان به نظر میرسند. اثر انگشت سنجاقشده را با کوکی نشست مقایسه کنید، فیلدی را که منقضی شده تازه کنید و سپس سرویس را دوباره راهاندازی کنید.
ConnMan یک بعدازظهر کار میکند و بعد امتناع میکند، و سطر گزارش به بررسی گواهی اشاره میکند. آن سطر مردم را به بستههای CA میفرستد که هرگز خراب نبودهاند. دو خرابی متفاوت تقریباً یک شکل شکست تولید میکنند: کوکی نشست منقضی میشود، یا گواهی سرور واقعاً عوض شده است. در حدود یک دقیقه میتوان آنها را از هم جدا کرد، و تنها یکی از آنها اصلاً به اثر انگشت مربوط است.
دو خرابی، یک سطر گزارش گیجکننده
با دو مشاهده از هم جدا میشوند و هیچکدام به خواندن دوباره نیاز ندارد. اولی این است که خرابی چه زمانی شروع شد: کوکی منقضی پس از ساعتها یا روزها کار میآید، و گواهی جایگزینشده درست پس از تغییر دروازه میرسد.
| Signal | Expired cookie | Changed certificate |
|---|---|---|
| When it started | after hours or days of working | right after a gateway change |
| Fingerprint from a fresh authenticate | unchanged | different value |
| Usual log tail | HTTP CONNECT 401 / unauthorized | signer not found / verify failed |
| Repair | replace the cookie, restart | re-pin deliberately, then restart |
آزمون یکدقیقهای همان اجرای authenticate در پایین است. اثر انگشت آن را با OpenConnect.ServerCert در فایل مقایسه کنید. اثر انگشت یکسان با COOKIE متفاوت یعنی فقط کوکی را عوض کنید. اثر انگشت متفاوت یعنی گواهی سرور واقعاً عوض شده است، پس آن را آگاهانه دوباره سنجاق کنید و ثبت کنید چه کسی آن را تأیید کرد.
ماده را تولید کنید، نه اینکه آن را تایپ کنید
ConnMan گام ورود برای نمایه OpenConnect ندارد، برخلاف NetworkManager. یک فایل تأمین میخواند که مقادیرش باید از پیش تولید شوند، و راه پشتیبانیشده برای تولید آنها حالت authenticate در OpenConnect است.
sudo openconnect --csd-wrapper=/home/user/.cisco/csd-wrapper.sh \
--authenticate --user myuser vpn.example.comخروجی چهار مقدار چاپ میکند: POST، COOKIE، HOST و FINGERPRINT. اثر انگشت، با پیشوند sha256:، سنجاق سرور است. کوکی آرتیفکت نشست با عمری است که دروازه تعیین میکند. آنها را دو نوع راز متفاوت بدانید: با زمانبندیهای متفاوت منقضی میشوند و تنها یکی از آنها انتظار میرود تغییر کند.
فایل هر دو را حمل میکند و آنها متفاوت پیر میشوند
فایل تأمین زیر /var/lib/connman-vpn/ قرار دارد و به ازای هر اتصال توسط سرویس VPN خوانده میشود، نه برنامه سینی سیستم. نام اتصال را در بخش عمومی و جزئیات پروتکل را در بخش ارائهدهنده نگه دارید.
[global]
Name = Company VPN
[provider_openconnect]
Type = OpenConnect
Name = Company Cisco VPN
Host = vpn.example.com
Domain = corp.example
OpenConnect.ServerCert = sha256:...
OpenConnect.Cookie = ...از نام میزبانی استفاده کنید که درگاه واقعاً سرویس میدهد. یک نشانی IP خالی میتواند بررسی گواهی را بگذراند و باز هم شکست بخورد، چون دستگاه بر اساس میزبان مجازی مسیریابی میکند و نام را انتظار دارد.
systemctl status connman-vpn --no-pager # is the daemon even installed and running
sudo systemctl restart connman-vpn # after the file edit
journalctl -u connman-vpn --since '1 hour ago' # after the connection attemptگزارش واقعاً چه نشان میدهد
راهنمای سینی سیستم نخواهد گفت کدام خرابی دارید. گزارش خواهد گفت، اگر توالی را بخوانید نه اولین سطر نگرانکننده را. کوکی کهنه معمولاً نشان میدهد مذاکره TLS کامل شده و لایه HTTP پس از آن رد کرده است؛ به همین دلیل واژههای مربوط به گواهی کنار یک شکست مجوزدهی مینشینند.
یک اجرای تازه authenticate را با مقادیر فایل مقایسه کنید. اگر اثر انگشت مطابق باشد و فقط کوکی متفاوت باشد، پاسخ را بدون دست زدن به تنظیمات اعتماد دارید.
فیلدی را که منقضی شده تازه کنید
فرمان authenticate را تکرار کنید، OpenConnect.Cookie را جایگزین کنید و سرویس را دوباره راهاندازی کنید. اثر انگشت را رها کنید مگر اینکه خروجی تازه مقدار متفاوتی نشان دهد؛ در آن صورت گواهی سرور واقعاً جایگزین شده و سنجاق دوباره تصمیمی است که کسی باید ثبت کند، نه چسباندن از یک پیام خطا.
خودکارکردن تازهسازی معقول است: اسکریپت کوچکی گذرواژه را از ورودی استاندارد میخواند، حالت authenticate را اجرا میکند و فقط سطر کوکی را بازنویسی میکند. اعتبارنامه را بیرون از اسکریپت و فقط برای حسابی که آن را اجرا میکند خوانا نگه دارید، و بازنویسی را اتمی کنید تا اجرای ناموفق فایل نیمهنوشته باقی نگذارد.
اگر تازهسازی هر چند ساعت لازم است، بازه را بنویسید. این ویژگی سیاست نشست دروازه است و تعیین میکند که تازهسازی خودکار شود یا نشست طولانیتری درخواست شود.