ConnMan یک بعدازظهر کار می‌کند و بعد امتناع می‌کند، و سطر گزارش به بررسی گواهی اشاره می‌کند. آن سطر مردم را به بسته‌های CA می‌فرستد که هرگز خراب نبوده‌اند. دو خرابی متفاوت تقریباً یک شکل شکست تولید می‌کنند: کوکی نشست منقضی می‌شود، یا گواهی سرور واقعاً عوض شده است. در حدود یک دقیقه می‌توان آن‌ها را از هم جدا کرد، و تنها یکی از آن‌ها اصلاً به اثر انگشت مربوط است.

دو خرابی، یک سطر گزارش گیج‌کننده

با دو مشاهده از هم جدا می‌شوند و هیچ‌کدام به خواندن دوباره نیاز ندارد. اولی این است که خرابی چه زمانی شروع شد: کوکی منقضی پس از ساعت‌ها یا روزها کار می‌آید، و گواهی جایگزین‌شده درست پس از تغییر دروازه می‌رسد.

SignalExpired cookieChanged certificate
When it startedafter hours or days of workingright after a gateway change
Fingerprint from a fresh authenticateunchangeddifferent value
Usual log tailHTTP CONNECT 401 / unauthorizedsigner not found / verify failed
Repairreplace the cookie, restartre-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 را اجرا می‌کند و فقط سطر کوکی را بازنویسی می‌کند. اعتبارنامه را بیرون از اسکریپت و فقط برای حسابی که آن را اجرا می‌کند خوانا نگه دارید، و بازنویسی را اتمی کنید تا اجرای ناموفق فایل نیمه‌نوشته باقی نگذارد.

اگر تازه‌سازی هر چند ساعت لازم است، بازه را بنویسید. این ویژگی سیاست نشست دروازه است و تعیین می‌کند که تازه‌سازی خودکار شود یا نشست طولانی‌تری درخواست شود.

مقالات مرتبط