18.3. TLS および SSL を使用したリモート管理
TLS および SSL プロトコルを使用して、仮想マシンを管理できます。TLS および SSL はスケーラビリティーは高くなりますが、SSH よりも複雑になります (「SSH を使用したリモート管理」 を参照)。TLS と SSL は、Web ブラウザーでセキュアな接続に使用されるものと同じ技術です。libvirt 管理接続は受信接続の TCP ポートを開きます。これは、x509 証明書に基づいて安全に暗号化および認証されます。以下の手順では、TLS および SSL 管理用の認証証明書を作成してデプロイする方法を説明します。
手順18.1 TLS 管理用の認証局 (CA) 鍵の作成
- 始める前に、gnutls-utils がインストールされていることを確認します。インストールされていない場合は、インストールします。
# yum install gnutls-utils
- 次のコマンドを使用して、秘密鍵を生成します。
# certtool --generate-privkey > cakey.pem
- 鍵が生成されたら、鍵が自己署名できるように、署名ファイルを作成します。作成するには、署名の詳細が含まれるファイルを作成し、
ca.info
という名前を付けます。このファイルには、以下の内容を記述する必要があります。cn = Name of your organization ca cert_signing_key
- 以下のコマンドを使用して自己署名キーを生成します。
# certtool --generate-self-signed --load-privkey cakey.pem --template ca.info --outfile cacert.pem
ファイルを生成したら、rm コマンドを使用して、ca.info
ファイルを削除できます。生成プロセスの結果として生成されるファイルの名前はcacert.pem
です。このファイルは公開鍵 (証明書) です。読み込んだcakey.pem
は秘密鍵です。セキュリティー上の理由から、このファイルはプライベートに保管し、共有領域には置かないでください。 /etc/pki/CA/cacert.pem
ディレクトリー内のすべてのクライアントおよびサーバーにcacert.pem
CA 証明書ファイルをインストールして、CA が発行した証明書が信頼できることを通知します。このファイルの内容を表示するには、次のコマンドを実行します。# certtool -i --infile cacert.pem
これは、CA の設定に必要なものです。クライアントとサーバーの証明書を発行するために必要となるため、CA の秘密鍵を安全に保持します。
手順18.2 サーバー証明書の発行
この手順では、サーバーのホスト名に設定されている X.509 Common Name (CN) フィールドを使用して証明書を発行する方法を説明します。CN は、クライアントがサーバーへの接続に使用するホスト名と一致する必要があります。この例では、クライアントは URI:
qemu://mycommonname/system
を使用してサーバーに接続するため、CN 項目は、この例では "mycommoname" と同じになります。
- サーバーの秘密鍵を作成します。
# certtool --generate-privkey > serverkey.pem
- 最初に
server.info
というテンプレートファイルを作成して、CA の秘密鍵の署名を生成します。CN がサーバーのホスト名と同じに設定されていることを確認します。organization = Name of your organization cn = mycommonname tls_www_server encryption_key signing_key
- 証明書を作成します。
# certtool --generate-certificate --load-privkey serverkey.pem --load-ca-certificate cacert.pem --load-ca-privkey cakey.pem \ --template server.info --outfile servercert.pem
これにより、2 つのファイルが生成されます。- serverkey.pem - サーバーの秘密鍵
- servercert.pem - サーバーの公開鍵
- 秘密鍵の場所は、秘密にしておきます。ファイルの内容を表示するには、次のコマンドを使用します。
# certtool -i --infile servercert.pem
このファイルを開く場合、CN=
パラメーターは先に設定した CN と同じでなければなりません。(例:mycommonname
) - 次の場所にある 2 つのファイルをインストールします。
serverkey.pem
- サーバーの秘密鍵。このファイルは、/etc/pki/libvirt/private/serverkey.pem
に置きます。servercert.pem
- サーバーの証明書。サーバーの/etc/pki/libvirt/servercert.pem
にインストールします。
手順18.3 クライアント証明書の発行
- すべてのクライアント (つまり、virt-manager などの libvirt にリンクしたプログラム) に、適切な名前を設定した X.509 識別名 (DN) フィールドを持つ証明書を発行する必要があります。これは、企業レベルで決定する必要があります。たとえば、以下の情報が使用されます。
C=USA,ST=North Carolina,L=Raleigh,O=Red Hat,CN=name_of_client
- 秘密鍵を作成します。
# certtool --generate-privkey > clientkey.pem
- 最初に
client.info
というテンプレートファイルを作成して、CA の秘密鍵の署名を生成します。ファイルには以下の内容が含まれている必要があります (フィールドは、お住まいの地域/場所に合わせてカスタマイズする必要があります)。country = USA state = North Carolina locality = Raleigh organization = Red Hat cn = client1 tls_www_client encryption_key signing_key
- 次のコマンドを使用して、証明書に署名します。
# certtool --generate-certificate --load-privkey clientkey.pem --load-ca-certificate cacert.pem \ --load-ca-privkey cakey.pem --template client.info --outfile clientcert.pem
- クライアントマシンに証明書をインストールします。
# cp clientkey.pem /etc/pki/libvirt/private/clientkey.pem # cp clientcert.pem /etc/pki/libvirt/clientcert.pem