6.2. TLS と SSL 経由のリモート管理

TLS と SSL を使って仮想マシンを管理することができます。TLS と SSL によりスケーラビリティーが向上しますが、SSH を使用する場合より複雑になります (「SSH によるリモート管理」を参照)。TLS と SSL は安全な接続を確保するために Web ブラウザーで使用される同一のテクノロジーです。libvirt 管理接続は、着信接続用の TCP ポートを開きます。この接続には安全な暗号化が行なわれ、x509 証明書に基づいて認証されます。TLS と SSL での管理に必要な認証用証明書を作成し、実装する方法を以下に示します。

手順6.1 TLS 管理の認証局 (CA) キーを作成する

  1. まず最初に certtool ユーティリティーがインストールされていることを確認します。インストールされていない場合は、以下を実行します。
    # yum install gnutls-utils
  2. 次のコマンドを使ってプライベートキーを生成します。
    # certtool --generate-privkey > cakey.pem
  3. キーを生成したら、次にキーに自己署名できるよう署名ファイルを作成します。署名の詳細を含むファイルを作成して、ca.info という名前を付けます。このファイルには次の行を含めてください。
    # vim ca.info
    cn = Name of your organization
    ca
    cert_signing_key
  4. 自己署名キーを次のコマンドで生成します。
    # certtool --generate-self-signed --load-privkey cakey.pem --template ca.info --outfile cacert.pem
    ファイルを生成し終わったら、rm コマンドで ca.info ファイルは削除して構いません。生成プロセスで作成されたファイルには cacert.pem という名前が付けられます。このファイルがパブリックキー (証明書) になります。ロードしたファイル cakey.pem がプライベートキーです。このファイルは共有スペースには保管しないようにし、このキーは機密扱いにしてください。
  5. cacert.pem 認証局証明書ファイルをすべてのクライアントおよびサーバーの /etc/pki/CA/cacert.pem ディレクトリーにインストールし、この認証局で発行した証明書は信頼できる証明書であることを通知します。このファイルの内容を表示させる場合は、次のコマンドを実行します。
    # certtool -i --infile cacert.pem
    認証局の設定は以上です。認証局のプライベートキーは安全な場所に保管してください。クライアントやサーバーの証明書を発行する際に必要となります。

手順6.2 サーバーの証明書を発行する

以下の手順は、X.509 CommonName (CN) フィールドをサーバーのホスト名に設定して証明書を発行する方法を示しています。CN は、クライアントがサーバーに接続する際に使用するホスト名と一致しなければなりません。この例では、クライアントは qemu://mycommonname/system という URI を使用してサーバーに接続するので、CN フィールドも同様に mycommonname にします。
  1. サーバーのプライベートキーを作成します。
    # certtool --generate-privkey > serverkey.pem
  2. まず server.info という名前のテンプレートファイルを作成して認証局のプライベートキー用の署名を生成します。CN にはサーバーのホスト名と同じ名前を必ず設定してください。
    organization = Name of your organization
    cn = mycommonname
    tls_www_server
    encryption_key
    signing_key
  3. 次のコマンドで証明書を作成します。
    # certtool --generate-certificate --load-privkey serverkey.pem --load-ca-certificate cacert.pem --load-ca-privkey cakey.pem \ --template server.info --outfile servercert.pem
  4. 次の 2 種類のファイルが生成されます。
    • serverkey.pem - サーバーのプライベートキー
    • servercert.pem - サーバーのパブリックキー
    プライベートキーを保存する場所は機密扱いにしてください。ファイルの内容を表示するには、次のコマンドを実行します。
    # certtool -i --inifile servercert.pem
    このファイルを開いた場合、CN= パラメーターが前の手順で設定した CN と同じであることを確認してください。この例の場合は mycommonname になります。
  5. この 2 つのファイルを次の場所にインストールします。
    • serverkey.pem - サーバーのプライベートキーです。このファイルは「/etc/pki/libvirt/private/serverkey.pem」に配置します。
    • servercert.pem - サーバーの証明書です。このファイルはサーバーの「 /etc/pki/libvirt/servercert.pem」に配置します。

手順6.3 クライアントの証明書を発行する

  1. すべてのクライアント (virt-manager など libvirt でリンクしているすべてのプログラム) について、適切な名前に設定された X.509 Distinguished Name (DN) で証明書を発行する必要があります。これについては企業レベルで検討する必要があります。
    たとえば、次のような情報を使用します。
    C=USA,ST=North Carolina,L=Raleigh,O=Red Hat,CN=name_of_client
    この手順は 手順6.2「サーバーの証明書を発行する」とよく似ていますが、次の点が異なります。
  2. プライベートキーを次のコマンドで作成します。
    # certtool --generate-privkey > clientkey.pem
  3. まず最初に client.info という名前のテンプレートファイルを作成して、認証局のプライベートキーの署名を生成します。ファイルには次の行が含めます (地域や場所に応じてフィールドをカスタマイズしてください)。
    country = USA
    state = North Carolina
    locality = Raleigh
    organization = Red Hat
    cn = client1
    tls_www_client
    encryption_key
    signing_key
  4. 次のコマンドで証明書に署名します。
    # certtool --generate-certificate --load-privkey clientkey.pem --load-ca-certificate cacert.pem \ --load-ca-privkey cakey.pem --template client.info --outfile clientcert.pem
  5. 証明書をクライアントマシンにインストールします。
    # cp clientkey.pem /etc/pki/libvirt/private/clientkey.pem
    # cp clientcert.pem /etc/pki/libvirt/clientcert.pem