TigerVNC:使用X.509加密连接

根据Ubuntu 20.04安装VNC服务(Xfce4)配置好VNC后,连接时会提示数据未加密所以不安全。

image.png

查阅文档后得知TigerVNC支持X.509认证的TLS加密。

设置方法

服务端

首先生成认证文件。可以使用商业的认证(如有)。如果没有,则需要使用OpenSSL生成自己的认证。

  1. 安装OpenSSL

    • RedHat/CentOS/Fedora:sudo yum install openssl
    • Debian/Ubuntu/Mint: sudo apt-get install openssl
  2. 使用OpenSSL生成认证密钥对

    1
    openssl req -x509 -newkey rsa -days 365 -nodes -keyout vnc-server-private.pem -out vnc-server.pem -subj '/CN=<your server ip>' -addext "subjectAltName=IP:<your server ip>"

    (将<your server ip>替换成服务器真实IP)

    会在运行命令的文件夹下面生成vnc-server-private.pemvnc-server.pem两个文件。将vnc-server.pem下载到客户机上备用。

  3. (可选)为了便于管理,将密钥对拷贝到~/.vnc下面。

  4. 附带以下参数运行vncserver:

1
vncserver -localhost no -SecurityTypes X509Vnc -X509Key vnc-server-private.pem -X509Cert vnc-server.pem

客户端(使用TigerVNCviewer)

点击Options...按钮,将Security选项卡下的Path to X509 CA certificate指向从OpenSSL生成的公钥pem文件vnc-server.pem(之前从服务端下载的)。

2023-04-06T164308

然后照常连接。可以看到连接已经变成安全的了。

2023-04-06T164124

服务端配置文件

如果不想每次都运行服务都需要打那么长一串命令,可以把选项写入服务器上的配置文件,并放在~/.vnc文件夹下:

  • 版本1.10:~/.vnc.conf
  • 版本1.12+: ~/.vnc/tigervnc.conf

配置文件内容如下:

1
2
3
4
$localhost="no";
$SecurityTypes="X509Vnc";
$X509Key="$ENV{HOME}/.vnc/vnc-server-private.pem";
$X509Cert="$ENV{HOME}/.vnc/vnc-server.pem";

参考资料