<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Rogierm&#039;s Blog &#187; openssl</title>
	<atom:link href="http://rogierm.redbee.nl/blog/tag/openssl/feed/" rel="self" type="application/rss+xml" />
	<link>http://rogierm.redbee.nl/blog</link>
	<description>Just another blog with technical stuff</description>
	<lastBuildDate>Mon, 09 Jan 2012 16:15:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>How to access libvirtd from remote server</title>
		<link>http://rogierm.redbee.nl/blog/2010/03/02/access-libvirtd-from-remote-server/</link>
		<comments>http://rogierm.redbee.nl/blog/2010/03/02/access-libvirtd-from-remote-server/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 23:42:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[certificate]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[libvirt]]></category>
		<category><![CDATA[libvirtd]]></category>
		<category><![CDATA[openssl]]></category>
		<category><![CDATA[tls]]></category>

		<guid isPermaLink="false">http://rogierm.redbee.nl/blog/?p=125</guid>
		<description><![CDATA[Libvirt is a toolkit to interact with several virtualization platform from a single interface. Considering you can stop and start virtual machines through this API, security is quite important. Libvirt offers several options to give authenticated access from remote machines. By default most distributions disable remote network access for libvirtd. However, I would like to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.libvirt.org/">Libvirt</a> is a toolkit to interact with several virtualization platform from a single interface. Considering you can stop and start virtual machines through this API, security is quite important. Libvirt offers several options to give authenticated access from remote machines. By default most distributions disable remote network access for libvirtd. However, I would like to access libvirtd on some of my KVM servers from a single management host to gather some information. The documentation on how to set this up is not too good, so I decided to write up a  short how-to. </p>
<p><strong>Step 1: Enable network access for libvirtd</strong><br />
First enable network access for libvirtd on the KVM server(s). On CentOS/RHEL this is done by uncommenting or adding the following line in /etc/sysconfig/libvirtd:<br />
<code><br />
LIBVIRTD_ARGS="--listen"<br />
</code></p>
<p><strong>Step 2: Install a CA on the management server</strong><br />
Install the Perl certificate tools:<br />
<code><br />
yum install openssl-perl<br />
</code><br />
Create Certificate authority:<br />
<code><br />
cd /etc/pki/tls/misc/<br />
./CA.pl -newca<br />
</code><br />
Example output:<br />
<code><br />
 ./CA.pl -newca<br />
CA certificate filename (or enter to create)</p>
<p>Making CA certificate ...<br />
Generating a 1024 bit RSA private key<br />
..........++++++<br />
.............++++++<br />
writing new private key to '../../CA/private/cakey.pem'<br />
Enter PEM pass phrase:<br />
Verifying - Enter PEM pass phrase:<br />
-----<br />
You are about to be asked to enter information that will be incorporated<br />
into your certificate request.<br />
What you are about to enter is what is called a Distinguished Name or a DN.<br />
There are quite a few fields but you can leave some blank<br />
For some fields there will be a default value,<br />
If you enter '.', the field will be left blank.<br />
-----<br />
Country Name (2 letter code) [GB]:XX<br />
State or Province Name (full name) [Berkshire]:XX<br />
Locality Name (eg, city) [Newbury]:XXXXX<br />
Organization Name (eg, company) [My Company Ltd]:XXXXX<br />
Organizational Unit Name (eg, section) []:XXXX<br />
Common Name (eg, your name or your server's hostname) []:CA XXX XXX<br />
Email Address []:XXX</p>
<p>Please enter the following 'extra' attributes<br />
to be sent with your certificate request<br />
A challenge password []:<br />
An optional company name []:<br />
Using configuration from /etc/pki/tls/openssl.cnf<br />
Enter pass phrase for ../../CA/private/cakey.pem:<br />
Check that the request matches the signature<br />
Signature ok<br />
Certificate Details:<br />
        Serial Number:<br />
            d8:95:24:xx:xx:xx:13:9b<br />
        Validity<br />
            Not Before: Feb 25 23:14:08 2010 GMT<br />
            Not After : Feb 24 23:14:08 2013 GMT<br />
        Subject:<br />
            countryName               = XX<br />
            stateOrProvinceName       = XX<br />
            organizationName          = XXXX<br />
            organizationalUnitName    = XXXX<br />
            commonName                = CA XXX XXX<br />
            emailAddress              = XXXXX<br />
        X509v3 extensions:<br />
            X509v3 Subject Key Identifier:<br />
                XXX<br />
            X509v3 Authority Key Identifier:<br />
                keyid:XXXX<br />
                DirName:/C=XX/ST=XX/O=XXX/OU=XXXX/CN=CA XXX XXX/emailAddress=XXX<br />
                serial:XXX</p>
<p>            X509v3 Basic Constraints:<br />
                CA:TRUE<br />
Certificate is to be certified until Feb 24 23:14:08 2013 GMT (1095 days)</p>
<p>Write out database with 1 new entries<br />
Data Base Updated<br />
</code></p>
<p><strong>Step 3: Create CSR&#8217;s</strong><br />
<code><br />
openssl genrsa -des3 -out kvm-server1.tmp<br />
openssl rsa -in kvm-server1.tmp -out kvm-server1.key<br />
openssl genrsa -des3 -out mgmt-host.tmp<br />
openssl rsa -in mgmt-host.tmp -out mgmt-host.key<br />
openssl req -new -key kvm-server1.key -out kvm-server1.csr<br />
openssl req -new -key mgmt-host.key -out mgmt-host.csr<br />
</code></p>
<p><strong>Step 4: Sign the certificates</strong><br />
<code><br />
 openssl ca -config /etc/pki/tls/openssl.cnf -policy policy_anything -out /root/mgmt-host.crt -infiles /root/mgmt-host.csr<br />
 openssl ca -config /etc/pki/tls/openssl.cnf -policy policy_anything -out /root/kvm-server1.crt -infiles /root/kvm-server1.csr<br />
</code><br />
Example output:<br />
<code><br />
Using configuration from /etc/pki/tls/openssl.cnf<br />
Enter pass phrase for /etc/pki/CA/private/cakey.pem:<br />
Check that the request matches the signature<br />
Signature ok<br />
Certificate Details:<br />
        Serial Number:<br />
            d8:95:24:4b:4e:b1:13:9c<br />
        Validity<br />
            Not Before: Feb 25 23:31:40 2010 GMT<br />
            Not After : Feb 25 23:31:40 2011 GMT<br />
        Subject:<br />
            countryName               = XX<br />
            stateOrProvinceName       = XX<br />
            localityName              = XX<br />
            organizationName          = XX<br />
            organizationalUnitName    = XX<br />
            commonName                = mgmt-host.xxx.nl<br />
            emailAddress              = xxxxx<br />
        X509v3 extensions:<br />
            X509v3 Basic Constraints:<br />
                CA:FALSE<br />
            Netscape Comment:<br />
                OpenSSL Generated Certificate<br />
            X509v3 Subject Key Identifier:<br />
                6C:EA:8B:C1:D6:XX:B6:6B:5B:18:02<br />
            X509v3 Authority Key Identifier:<br />
                keyid:C9:36:4A:XXXX:6F:FD:2E:86</p>
<p>Certificate is to be certified until Feb 25 23:31:40 2011 GMT (365 days)<br />
Sign the certificate? [y/n]:y</p>
<p>1 out of 1 certificate requests certified, commit? [y/n]y<br />
Write out database with 1 new entries<br />
Data Base Updated</p>
<p></code></p>
<p><strong>Step 5: Copy over the certificates to the correct location</strong><br />
On the management host (mgmt-host):<br />
<code><br />
mkdir /etc/pki/libvirt<br />
mkdir /etc/pki/libvirt/private<br />
mkdir /etc/pki/libvirt-vnc</p>
<p>cp /root/mgmt-host.key /etc/pki/libvirt/private/clientkey.pem<br />
cp /root/mgmt-host.key /etc/pki/libvirt-vnc/clientkey.pem<br />
cp /root/mgmt-host.crt /etc/pki/libvirt/clientcert.pem<br />
cp /root/mgmt-host.crt /etc/pki/libvirt-vnc/clientcert.pem<br />
</code></p>
<p>Transfer the key and certificate files to the KVM server (kvm-server1). Ideally, you create the key and CSR on the host itself, so you only have to transfer the certificate. Then, copy the certificates and CA to the correct location on the KVM (libvirtd) server:</p>
<p><code><br />
mkdir /etc/pki/libvirt<br />
mkdir /etc/pki/libvirt/private<br />
mkdir /etc/pki/libvirt-vnc</p>
<p>cp kvm-server1.key /etc/pki/libvirt/private/serverkey.pem<br />
cp kvm-server1.key /etc/pki/libvirt-vnc/server-key.pem</p>
<p>cp kvm-server1.crt /etc/pki//libvirt/servercert.pem<br />
cp kvm-server1.crt /etc/pki/libvirt-vnc/server-cert.pem<br />
</code></p>
<p>Make sure the CA generated on the management server is available on the KVM server in the following file:<br />
/etc/pki/CA/cacert.pem</p>
<p><strong>Step 6: Reload libvirtd</strong><br />
<code><br />
/etc/init.d/libvirtd reload<br />
</code></p>
<p><strong>Step 7: Test</strong><br />
With these certificates setup, you should be able to access libvirtd on kvm-server1 from mgmt-host. Use the following command to test:<br />
<code><br />
virsh -c qemu://kvm-server1.xxxx.nl/system<br />
Welcome to virsh, the virtualization interactive terminal.</p>
<p>Type:  'help' for help with commands<br />
       'quit' to quit</p>
<p>virsh #<br />
</code><br />
Use the list command to see a list of running guests on the server. This only works if these guests have also been created via libvirtd. Manually started KVM guests will not show up in this list. </p>
]]></content:encoded>
			<wfw:commentRss>http://rogierm.redbee.nl/blog/2010/03/02/access-libvirtd-from-remote-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

