24 KVM管理虚拟机-配置VNC-TLS登录

24.1 概述

VNC服务端和客户端默认采用明文方式进行数据传输,因此通信内容可能被第三方截获。为了提升安全性,openEuler支持VNC服务端配置TLS模式进行加密认证。TLS(Tansport Layer Security)即传输层安全,可以实现VNC服务端和客户端之间加密通信,从而防止通信内容被第三方截获。

24.2 操作步骤

VNC开启TLS加密认证模式的操作步骤如下:

  1. 登录VNC服务端所在主机,开启或修改服务端配置文件/etc/libvirt/qemu.conf中对应的配置项。相关配置内容如下所示:

    vnc_listen = "x.x.x.x"          # "x.x.x.x"为VNC的侦听地址,请用户根据实际配置,VNC服务端只允许该地址或地址段范围内的客户端连接请求
    vnc_tls = 1                     # 配置为1,表示开启VNC TLS支持
    vnc_tls_x509_cert_dir = "/etc/pki/libvirt-vnc"        #指定证书存放的路径为/etc/pki/libvirt-vnc
    vnc_tls_x509_verify = 1                               #配置为1,表示TLS认证使用X509证书
    
  2. 为VNC创建证书和私钥文件。此处以GNU TLS为例进行说明。

    1. 制作证书颁发机构CA(Certificate Authority)的证书文件。

      # certtool --generate-privkey > ca-key.pem
      
    2. 制作自签名的CA证书公私钥。其中Your organization name为机构名,由用户指定。

      # cat > ca.info<<EOF
      cn = Your organization name 
      ca
      cert_signing_key
      EOF
      
      # certtool --generate-self-signed \
                 --load-privkey ca-key.pem \
                 --template ca.info \
                 --outfile ca-cert.pem
      

      上述生成文件,ca-cert.pem是生成的CA公钥,ca-key.pem是生成的CA私钥,需要由CA妥善保管防止泄露。

    3. 为VNC服务端颁发证书。其中Server Organization Name为实际的服务名称,例如server.foo.com,需要用户根据实际指定。

      # cat > server.info<<EOF
      cn = Server Organization Name
      tls_www_server
      encryption_key
      signing_key
      EOF
      
      # certtool --generate-privkey > server-key.pem
      # certtool --generate-certificate \
                 --load-ca-certificate ca-cert.pem \
                 --load-ca-privkey ca-key.pem \
                 --load-privkey server-key.pem \
                 --template server.info \
                 --outfile server-cert.pem
      

      上述生成文件,server-key.pem是VNC服务端的私钥,server-cert.pem是VNC服务端的公钥。

    4. 为VNC客户端颁发证书。

      # cat > client.info<<EOF
      cn = Client Organization Name
      tls_www_client
      encryption_key
      signing_key
      EOF
      
      # certtool --generate-privkey > client-key.pem
      # certtool --generate-certificate \
                 --load-ca-certificate ca-cert.pem \
                 --load-ca-privkey ca-key.pem \
                 --load-privkey client-key.pem \
                 --template client.info \
                 --outfile client-cert.pem
      

      上述生成文件,client-key.pem是VNC客户端的私钥,client-cert.pem是VNC客户端的公钥,生成的公私钥对需要拷贝到VNC客户端。

  3. 关闭需要被登录的虚拟机,重启VNC服务端所在主机的libvirtd服务。

    # systemctl restart libvirtd
    
  4. 将生成的服务端证书放置到VNC服务端指定目录并将证书的权限改为只允许当前用户读写。

    # sudo mkdir -m 750 /etc/pki/libvirt-vnc
    # cp ca-cert.pem /etc/pki/libvirt-vnc/ca-cert.pem
    # cp server-cert.pem /etc/pki/libvirt-vnc/server-cert.pem
    # cp server-key.pem /etc/pki/libvirt-vnc/server-key.pem
    # chmod 0600 /etc/pki/libvirt-vnc/*
    
  5. 将生成的客户端证书ca-cert.pem,client-cert.pem和client-key.pem拷贝到VNC客户端。配置VNC客户端的TLS证书后即可使用VNC TLS登录。

24 KVM管理虚拟机-配置VNC-TLS登录-LMLPHP

05-20 00:52