[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] Can't connect ESXi ssl with virsh



Well, finally It works.
Matthias, you're right. For linux, we can add cacert to nssdb to let the libcurl use. 
So, This command:

certutil -d sql:/etc/pki/nssdb -A -t TC -n "esx" -i /root/cacert.pem


[root localhost ~]# virsh -c esx://10.66.6.211
Enter username for 10.66.6.211 [root]: 
Enter root's password for 10.66.6.211: 
Welcome to virsh, the virtualization interactive terminal.

Type:  'help' for help with commands
       'quit' to quit


Thanks!
BR
zhpeng

----- Original Message -----
From: "Matthias Bolte" <matthias bolte googlemail com>
To: "Zhimou Peng" <zhpeng redhat com>
Cc: libvir-list redhat com, "Tingting Zheng" <tzheng redhat com>
Sent: Friday, March 9, 2012 12:23:16 AM
Subject: Re: [libvirt] Can't connect ESXi ssl with virsh

2012/3/5 Zhimou Peng <zhpeng redhat com>:
> Hi,
>
> I try to use virsh connect ESXi5.0 with ssl
>
> [root zheng ~]#  virsh -c esx://10.66.6.211/
> Enter username for 10.66.6.211 [root]:
> Enter root's password for 10.66.6.211:
> error: internal error curl_easy_perform() returned an error: Peer certificate cannot be authenticated with known CA certificates (60) : Peer certificate cannot be authenticated with known CA certificates
> error: failed to connect to the hypervisor
>
> I create kew key singed by my CA certificate, still the same error.
> But i can use vsphere client and https://10.66.6.211/, the new certs are ok.
>
> Here are my steps:
>
>
> 1, create a CA center.
>
> ENV prepare:
> # cd /etc/pki/CA/
> # mkdir {certs,crl,newcerts}
> # touch index.txt
> # echo 00 > serial
>
> create private key:
> [root zheng CA]# openssl req -new -x509 -extensions v3_ca -keyout myroot.key -out myroot.crt -days 3650
> Generating a 2048 bit RSA private key
> ................................................................+++
> ...............................................+++
> writing new private key to 'myroot.key'
> Enter PEM pass phrase:
> Verifying - Enter PEM pass phrase:
> -----
> You are about to be asked to enter information that will be incorporated
> into your certificate request.
> What you are about to enter is what is called a Distinguished Name or a DN.
> There are quite a few fields but you can leave some blank
> For some fields there will be a default value,
> If you enter '.', the field will be left blank.
> -----
> Country Name (2 letter code) [XX]:CN
> State or Province Name (full name) []:BEIJING
> Locality Name (eg, city) [Default City]:BEIJING
> Organization Name (eg, company) [Default Company Ltd]:REDHAT
> Organizational Unit Name (eg, section) []:QE
> Common Name (eg, your name or your server's hostname) []:10.66.6.209
> Email Address []:
>
> [root zheng CA]# mv myroot.key private/cakey.pem
> [root zheng CA]# mv myroot.crt cacert.pem
>
> 2, create private key and certificate request file for ESXi5.0 server.
> # openssl req -new -nodes -out mycsr.csr
> Generating a 2048 bit RSA private key
> ........+++
> ...............+++
> writing new private key to 'privkey.pem'
> -----
> You are about to be asked to enter information that will be incorporated
> into your certificate request.
> What you are about to enter is what is called a Distinguished Name or a DN.
> There are quite a few fields but you can leave some blank
> For some fields there will be a default value,
> If you enter '.', the field will be left blank.
> -----
> Country Name (2 letter code) [XX]:CN
> State or Province Name (full name) []:BEIJING
> Locality Name (eg, city) [Default City]:BEIJING
> Organization Name (eg, company) [Default Company Ltd]:REDHAT
> Organizational Unit Name (eg, section) []:QE
> Common Name (eg, your name or your server's hostname) []:10.66.6.211
> Email Address []:
>
> Please enter the following 'extra' attributes
> to be sent with your certificate request
> A challenge password []:
> An optional company name []:
>
> 3,scp the certificate request file to CA and certificate it.
> [root zheng CA]# openssl ca -out rui.crt  -infiles mycsr.csr
> Using configuration from /etc/pki/tls/openssl.cnf
> Enter pass phrase for /etc/pki/CA/private/cakey.pem:
> Check that the request matches the signature
> Signature ok
> Certificate Details:
>        Serial Number: 0 (0x0)
>        Validity
>            Not Before: Mar  5 06:53:52 2012 GMT
>            Not After : Mar  5 06:53:52 2013 GMT
>        Subject:
>            countryName               = CN
>            stateOrProvinceName       = BEIJING
>            organizationName          = REDHAT
>            organizationalUnitName    = QE
>            commonName                = 10.66.6.211
>        X509v3 extensions:
>            X509v3 Basic Constraints:
>                CA:FALSE
>            Netscape Comment:
>                OpenSSL Generated Certificate
>            X509v3 Subject Key Identifier:
>                84:ED:53:00:56:7B:F3:AD:69:70:44:8C:D3:09:A0:6E:9D:69:30:0A
>            X509v3 Authority Key Identifier:
>                keyid:E5:FC:AC:8B:C4:6E:DD:DF:32:19:E3:C1:17:3E:08:5B:7D:0D:79:DD
>
> Certificate is to be certified until Mar  5 06:53:52 2013 GMT (365 days)
> Sign the certificate? [y/n]:y
>
>
> 1 out of 1 certificate requests certified, commit? [y/n]y
> Write out database with 1 new entries
> Data Base Updated
>
> 4, change the ESXi to maintance mode and change ssl keys on /etc/vmware/ssl. restart hostd server
>   then quit the maintance mode.

Until here everything is fine. The ESXi server has a new and working
SSL certificate.

> 5, test it with vsphere client and firefox. new ssl keys works well.

You should have tested with curl instead, because libvirt uses libcurl
to talk to the ESXi server.

# curl https://10.66.6.211/sdk
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate
verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

And curl still gives you error number 60, the same as libvirt.

This is correct because you missed the final step. You need to tell
your client computer to trust your new CA certificate. The one you
just created and used to sign the new SSL certificate with.

On a Debian-based system you need to do the following as root to trust
the new CA certificate and make libcurl find it:

# mkdir /usr/share/ca-certificates/esx-certs
# cp /etc/pki/CA/cacert.pem /usr/share/ca-certificates/esx-certs/
# echo esx-certs/cacert.pem >> /etc/ca-certificates.conf
# update-ca-certificates

I've no clue how to do this on a Red Hat Linux-based system, that's
your part to figure out :)

Now curl and virsh should work as expected.

-- 
Matthias Bolte
http://photron.blogspot.com


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]