Este problema ainda está presente no Ubuntu 18.04 com network-manager-openconnect
.
Acho que o problema aqui é que a conexão está sendo feita com o endereço IP do servidor VPN, em vez de seu nome DNS:
$ ps aux | grep openconnect
/usr/sbin/openconnect --servercert sha256:<hash> --syslog --cookie-on-stdin --script /usr/lib/NetworkManager/nm-openconnect-service-openconnect-helper --interface vpn0 <ip>:443
Execute o comando manualmente, sem o parâmetro --servercert:
$ /usr/sbin/openconnect <ip>:443 --authenticate
POST https://<ip>/
Connected to <ip>:443
SSL negotiation with <ip>
Server certificate verify failed: certificate does not match hostname
Certificate from VPN server "<ip>" failed verification.
Reason: certificate does not match hostname
To trust this server in future, perhaps add this to your command line:
--servercert sha256:<hash>
Enter 'yes' to accept, 'no' to abort; anything else to view:
Observe a falha na verificação do certificado.
Agora usando o nome do host em vez do IP:
$ /usr/sbin/openconnect <hostname>:443 --authenticate
POST https://<hostname>/
Connected to <ip>:443
SSL negotiation with <hostname>
Connected to HTTPS on <hostname>
XML POST enabled
Please enter your username and password.
Não há erros de certificado.
Agora, usando o IP com o parâmetro servercert:
$ /usr/sbin/openconnect <ip>:443 --authenticate --servercert sha256:<hash>
POST https://<ip>/
Connected to <ip>:443
SSL negotiation with <ip>
Server certificate verify failed: signer not found
Connected to HTTPS on <ip>
XML POST enabled
Please enter your username and password.
Compare o erro ao primeiro exemplo - é um erro diferente. Este falha porque o signatário não é encontrado. Considerando que estamos apenas especificando um hash, acho que faz sentido, já que não há uma cadeia de confiança a seguir.
Para mim, acho que a causa raiz é que, por algum motivo, o gerenciador de rede está se conectando ao endereço IP em vez do nome do host. Não tenho certeza por que isso faria isso?