ConnMan toimii iltapäivän ja kieltäytyy sitten, ja lokirivi mainitsee sertifikaatin tarkistuksen. Se rivi lähettää ihmiset CA-nippujen luo, jotka eivät koskaan olleet rikki. Kaksi eri vikaa tuottaa lähes saman epäonnistumisen muodon: istuntoeväste vanhenee tai palvelimen sertifikaatti todella vaihtui. Ne voi erottaa noin minuutissa, ja vain toinen niistä liittyy sormenjälkeen lainkaan.

Kaksi vikaa, yksi hämmentävä lokirivi

Ne eroavat kahdesta havainnosta, eikä kumpikaan vaadi toista lukukertaa. Ensimmäinen on se, milloin vika alkoi: vanhentunut eväste saapuu tuntien tai päivien työskentelyn jälkeen, ja korvattu sertifikaatti saapuu heti yhdyskäytävän muutoksen jälkeen.

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

Minuutin koe on alla oleva authenticate-ajo. Vertaa sen FINGERPRINT-arvoa tiedostossa olevaan OpenConnect.ServerCert-arvoon. Sama sormenjälki ja eri COOKIE tarkoittaa, että vain eväste vaihdetaan. Eri sormenjälki tarkoittaa, että palvelimen sertifikaatti todella vaihtui, joten kiinnitä se tarkoituksella uudelleen ja kirjaa, kuka sen hyväksyi.

Luo aineisto sen sijaan, että kirjoittaisit sen

ConnManissa ei ole OpenConnect-profiilin tuontivaihetta, toisin kuin NetworkManagerissa. Se lukee valmistelutiedoston, jonka arvot on tuotettava etukäteen, ja tuettu tapa tuottaa ne on OpenConnectin authenticate-tila.

sudo openconnect --csd-wrapper=/home/user/.cisco/csd-wrapper.sh \
  --authenticate --user myuser vpn.example.com

Tuloste tulostaa neljä arvoa: POST, COOKIE, HOST ja FINGERPRINT. Sormenjälki, jonka etuliite on sha256:, on palvelimen kiinnitys. Eväste on istunnon artefakti, jonka eliniän yhdyskäytävä päättää. Käsittele niitä eri salaisuustyyppeinä: ne vanhenevat eri aikatauluilla ja vain toisen odotetaan muuttuvan.

Tiedosto sisältää molemmat, ja ne vanhenevat eri tavoin

Valmistelutiedosto sijaitsee hakemistossa /var/lib/connman-vpn/, ja VPN-taustapalvelu lukee sen yhteyksittäin, ei järjestelmäalueen sovellus. Pidä yhteyden nimi yleisosiossa ja protokollan tiedot tarjoajaosiossa.

[global]
Name = Company VPN

[provider_openconnect]
Type = OpenConnect
Name = Company Cisco VPN
Host = vpn.example.com
Domain = corp.example
OpenConnect.ServerCert = sha256:...
OpenConnect.Cookie = ...

Käytä isäntänimeä, jota portaali todella palvelee. Pelkkä IP-osoite voi läpäistä sertifikaattitarkistuksen ja silti epäonnistua, koska laite reitittää virtuaalisen isännän mukaan ja odottaa nimeä.

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

Mitä loki todella näyttää

Järjestelmäalueen vihje ei kerro, kumpi vika sinulla on. Loki kertoo, jos luet järjestyksen etkä ensimmäistä hälyttävää riviä. Vanhentunut eväste näyttää tyypillisesti, että TLS-neuvottelu on valmistunut ja HTTP-kerros hylkäsi sen jälkeen, ja siksi sertifikaatteja koskevat sanat seisovat valtuutusvirheen vieressä.

Vertaa tuoretta authenticate-ajoa tiedoston arvoihin. Jos sormenjälki täsmää ja vain eväste eroaa, vastaus on käsissäsi koskematta luottamusasetuksiin.

Uusi vanhentunut kenttä

Toista authenticate-komento, korvaa OpenConnect.Cookie ja käynnistä taustapalvelu uudelleen. Jätä sormenjälki rauhaan, ellei tuore tuloste näytä eri arvoa; siinä tapauksessa palvelimen sertifikaatti todella korvattiin ja uudelleenkiinnitys on päätös, joka jonkun pitäisi kirjata, ei virheilmoituksesta liittäminen.

Uusinnan automatisoiminen on järkevää: pieni skripti lukee salasanan vakiosyötteestä, ajaa authenticate-tilaa ja kirjoittaa uudelleen vain evästérivin. Pidä kirjautumistieto poissa skriptistä ja luettavana vain sitä ajavalle tilille, ja tee uudelleenkirjoituksesta atomista, jotta epäonnistunut ajo ei jätä puoliksi kirjoitettua tiedostoa.

Jos uusinta tarvitaan muutaman tunnin välein, kirjoita väli muistiin. Se on yhdyskäytävän istuntokäytännön ominaisuus, ja se ratkaisee, automatisoidaanko uusinta vai pyydetäänkö pidempää istuntoa.

Aiheeseen liittyvät artikkelit