ocserv[14506]: GnuTLS error (at worker-vpn.c:861): An unexpected TLS packet was received.

ocserv[14506]: GnuTLS error (at worker-vpn.c:861): An unexpected TLS packet was received.

このエラー "An unexpected TLS packet was received" は、通常 TLS/SSL の通信設定の不一致 によって発生します。 OpenConnect サーバー (ocserv) とクライアントの間で、TLS 通信の設定が適切に合致していない可能性があります。

🔍 考えられる原因

  1. ocserv が TCP instead of UDP で動作している
    • OpenConnect VPN では、通常 TCP (HTTPS)UDP (DTLS) の両方を使用できます。
    • クライアントが DTLS (UDP) で接続しようとしているのに、サーバーが TCP しか受け入れていない場合、このエラーが発生することがあります。
  2. TLS バージョンのミスマッチ
    • ocserv の設定 (ocserv.conf) で TLS バージョン がクライアントと一致していない可能性があります。
    • 設定を確認し、min-tls-version の値を適切に設定してください。
  3. GnuTLS ライブラリの不具合
    • サーバーやクライアントが古い GnuTLS バージョンを使用している場合、互換性の問題が発生する可能性があります。
    • 最新の GnuTLS に更新してみてください。
  4. 証明書の問題
    • サーバー証明書 (/etc/ocserv/ 内) が正しく設定されていない、または期限切れになっている可能性があります。
    • ocserv.confcert-filekey-file の設定を確認し、証明書が有効かどうかチェックしてください。

🛠 解決策

1. DTLS の設定を修正

ocserv.conf を開き、DTLS を有効化 する設定を確認してください。

bash

sudo nano /etc/ocserv/ocserv.conf

以下の設定があるかチェックし、必要なら修正:

ini

udp-port = 443  # UDPポートを適切に設定
dtls-legacy = true  # 古い DTLS を許可(必要な場合)

2. TLS バージョンの確認

TLS のバージョンをクライアントと一致させるため、ocserv.conf の設定を変更:

ini

min-tls-version = 1.2

また、TLS 1.3 を有効化することも推奨されます。

3. GnuTLS の更新

GnuTLS が古い場合は、最新のバージョンに更新 してください。

bash

sudo apt update && sudo apt upgrade gnutls-bin

4. 証明書の再確認

証明書の有効期限が切れている可能性があるので、以下のコマンドで確認:

bash

openssl x509 -in /etc/ocserv/server-cert.pem -noout -dates

もし証明書が期限切れなら、Let's Encrypt を使って再取得:

bash

sudo certbot renew
sudo systemctl restart ocserv

📌 まとめ

このエラーは TLS通信の設定不一致や証明書の問題 によって発生することが多いです。 まずは DTLSの設定を確認し、TLSのバージョンをクライアントと合わせる ことで解決できる可能性が高いです。