Клієнт VPN видалено, профіль зник із «Параметрів», а тунель усе одно піднімається зі старими обліковими даними. Або ви видаляєте його, перезавантажуєтеся і наступного ранку знову його знаходите. Але це не зламана кнопка видалення. Профіль — це конфігурація; сертифікат — це ключовий матеріал плюс рішення про довіру, записане в сховищі, на яке профіль лише вказує. Що саме у вас у руках, визначає, що має означати «видалити».

Профіль — не сертифікат

У налаштуванні VPN три різні об'єкти називають «сертифікатом». Ідентичність клієнта — це кінцевий сертифікат із закритим ключем, і шлюз за ним вирішує, хто ви. Власний кінцевий сертифікат сервера та його проміжний сертифікат — це те, що ваш клієнт перевіряє під час підключення. Якір довіри, зазвичай кореневий або приватний сертифікат CA, — це те, що взагалі робить ланцюжок перевірюваним. RFC 5280 називає їх якорем довіри, проміжним і кінцевим об'єктом, і ланцюжок дійсний лише доти, доки кожна ланка підписує ланку нижче.

Видаліть ідентичність — один пристрій втратить доступ. Видаліть якір — і кожен застосунок, що перевіряє довіру за цим сховищем, втратить можливість перевіряти будь-що, випущене під ним, включно зі з'єднаннями, які не мають нічого спільного з VPN. Ця асиметрія і є весь ризик: корінь, встановлений для одного шлюзу, часто той самий корінь, яким підписано внутрішній портал, поштовий сервер або дзеркало пакунків. Пам'ятайте, що з двох у вас у руках.

Володіння вирішує, чи видалення залишиться видаленим. На вашому ноутбуці лише ви можете повернути сертифікат. На керованому пристрої профіль конфігурації або навантаження MDM може перевстановити його під час наступної реєстрації, тому він «повертається» і тому жорсткіше видалення не допомагає.

З'ясуйте, у якому сховищі він ще є

Люди починають у застосунку «Параметри», а це єдине місце, де сертифікат не зберігається. Справжні місця — це сховища довіри ОС, власне сховище браузера та приватне сховище застосунку.

StoreWhat deleting from it affects
Windows CurrentUser\Myyour login session only
Windows LocalMachine Rootevery user and service on the machine
macOS login or System keychainone account, or all of them with sudo
Linux ca-certificates bundlecurl, git, Python, anything using the system bundle
Firefox cert9.dbFirefox only; it does not read the OS store

Зіставляйте за серійним номером або відбитком, ніколи за відображуваним ім'ям. Відображувані імена задає той, хто видав сертифікат, і вони використовуються повторно: «Example VPN» може бути три сертифікати з трьома різними ключами, один з яких досі щодня використовується.

certutil -user -store My
certutil -store Root
openssl x509 -in vpn-client.pem -noout -subject -issuer -serial -fingerprint -sha256

У macOS інструмент security дає ті самі факти, а find-identity показує, у яких сертифікатів ще є приєднаний закритий ключ:

security find-certificate -a -c "Example VPN" -Z /Library/Keychains/System.keychain
security find-identity -v -p ssl-client

Видаляйте вузький об'єкт, зберігайте спільного видавця

Експортуйте перед видаленням. Без резервної копії єдине відновлення — повторний випуск, що для приватного CA означає повернення до того, хто керує PKI. Експортований PFX — це також те, що ви передаєте, якщо видалення виявиться помилковим рішенням.

certutil -user -exportPFX -p backup My <serial> C:\temp\vpn-id.pfx
certutil -user -delstore My <serial>
Remove-Item Cert:\CurrentUser\My<thumbprint>

Прапорець -user — саме той, який люди випадково пропускають. Без нього certutil працює зі сховищем машини, а це підвищена оболонка, інший набір сертифікатів і радіус ураження, що тепер охоплює всі інші облікові записи на машині.

У macOS і Linux форма та сама: визначте, експортуйте, а потім видаліть із найвужчого сховища, яке пояснює симптом. Видалення файлу в /usr/local/share/ca-certificates і повторний запуск update-ca-certificates достатньо; --fresh допомагає лише тоді, коли символьні посилання в /etc/ssl/certs вже неузгоджені. Системи родини RHEL зберігають якорі в /etc/pki/ca-trust/source/anchors, де trust anchor --remove робить ту саму роботу.

sudo security delete-certificate -Z <sha1> /Library/Keychains/System.keychain
sudo rm /usr/local/share/ca-certificates/example-vpn.crt
sudo update-ca-certificates
sudo trust anchor --remove /etc/pki/ca-trust/source/anchors/example-vpn.crt

Перш ніж видаляти сертифікат CA, перевірте, що ще вишиковується до нього в ланцюжок. Перелік суб'єктів у пакеті — це перевірка в два рядки, і вона відповідає, чи виконує цей якір іншу роботу:

openssl crl2pkcs7 -nocrl -certfile /etc/ssl/certs/ca-certificates.crt \
  | openssl pkcs7 -print_certs -noout | grep -i example

Видалення файлу — не відкликання ідентичності

Локальне видалення прибирає одну копію. Закритий ключ може ще лежати в p12, долученому до старого тікета, у теці резервних копій або на другому ноутбуці, налаштованому водночас. Якщо це була ідентичність клієнта, шлюз продовжує приймати будь-яку копію цього ключа, доки ідентичність не буде відхилено на боці сервера.

Для OpenVPN PKI це означає відкликати сертифікат і переконатися, що CRL, на яку посилається crl-verify є актуальною; easyrsa revoke а потім easyrsa gen-crl — коротка версія. Для шлюзу, прив'язаного до постачальника ідентичності, вимкніть користувача або видаліть пристрій там, бо сертифікат — лише одні облікові дані в грі. Видалення локальної копії, поки обліковий запис активний, виглядає як прибирання і ним не є.

Робота з інцидентом має інший порядок: спершу збережіть сертифікат, його серійний номер і запис про відкликання, а потім видаляйте та відкликайте. Ці записи нічого не коштують і не вимагають залишати робочі облікові дані на місці.

Перевірте рукостисканням і другим застосунком

Перевіряйте ланцюжок ззовні, а не за списком сховища, яке ви щойно редагували. Сховище показує вашу зміну; рукостискання показує результат.

openssl s_client -connect vpn.example.com:443 -servername vpn.example.com \
  -CAfile /etc/ssl/certs/ca-certificates.crt -verify_return_error < /dev/null
openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt vpn-gateway.pem

Код повернення 0 означає, що решта якорів усе ще перевіряють шлюз. Помилка ланцюжка після видалення якоря — очікуваний результат, і вона підтверджує, що ви влучили в якір, який використовується, а не в дублікат у сховищі, яке клієнт ніколи не читає. Якщо з'єднання все ще працює, шукайте другу копію, вбудоване в застосунок сховище або закріплений сертифікат — усе це типово для клієнтів, що приносять власний список довіри.

Потім перевірте щось не пов'язане: внутрішній сайт, поштовий клієнт, дзеркало пакунків. Це дешево вимірює радіус ураження, поки вікно змін не закрилося.

  • Роль визначено як ідентичність, проміжний сертифікат або якір довіри
  • Серійний номер і відбиток записано, копію експортовано до затвердженого місця
  • Видалення виконано в найвужчій області, що пояснює симптом
  • Авторизацію на боці сервера відкликано, коли людина або пристрій пішли
  • Рукостискання пояснено, один не пов'язаний застосунок перевірено повторно
  • Навантаження MDM або профіль керування оновлено, інакше сертифікат повернеться

Якщо після перезавантаження сертифікат повернувся, робота не завершена: щось ним володіє і перевстановлює його. Знайдіть цього власника, перш ніж видаляти знову, бо третє видалення поводитиметься точно як перші два.

Схожі статті