libvirtでTLS接続

リモートからvirt-manager等でlibvirtdに接続しようとするとsshを使うのが一番手っ取り早いのですが、
うちの環境だと頻繁にトラフィックが詰まって(?)sshがゾンビ化してしまうので、TLS接続に切り替えてみた。


環境はサーバー、クライアント共にFedora16。
独自CAはWindowsの証明書サービスを使っているので、そこは割愛。


それぞれ必要なものは、
libvirt(サーバ)側

Path 説明
/etc/pki/CA/cacert.pem 独自CAのCA証明書
/etc/pki/libvirt/private/serverkey.pem 秘密鍵
/etc/pki/libvirt/servercert.pem 独自CAで発行したサーバ証明書

virt-manager(クライアント)側

Path 説明
/etc/pki/CA/cacert.pem 独自CAのCA証明書
/etc/pki/libvirt/private/clientkey.pem 秘密鍵
/etc/pki/libvirt/clientcert.pem 独自CAで発行したクライアント証明書


以下おおまかな証明書発行の流れ

# 秘密鍵生成
$> openssl genrsa -out hoghoge.key 2048

# 証明書要求
# CN(Common Name)はvirt-managerで接続するホスト名にする
$> openssl req -new -key hogehoe.key -out hogehoge.csr

# 証明書サービスで証明書発行
# opensslで独自CAを作っている場合はそれを使う。
<割愛>

# pem形式に変換
$> openssl x509 -in hogehoge.cer -outform pem -out hogehoge.pem


Fedoraの場合は/etc/sysconfig/libvirtdの

# Listen for TCP/IP connections
# NB. must setup TLS/SSL keys prior to using this
# LIBVIRTD_ARGS="--listen"

のコメントを

# Listen for TCP/IP connections
# NB. must setup TLS/SSL keys prior to using this
LIBVIRTD_ARGS="--listen"

としてやるとTLS接続を受け付けるようになります。


あとはvirt-managerで「証明書付き SSL/TLS」で接続してあげれば接続できるはずです。


しかし接続が不安定なのはTLSでも変わらなかったので、環境の問題のようです。