[one-users] econe-server with x509 fails to set HTTP_SSL_CLIENT_CERT

Hyun Woo Kim hyunwoo at fnal.gov
Wed Jan 16 20:38:05 PST 2013


I first set ONE_AUTH to be ~/.one/one_x509 (created from my personal certificate)
and then do,
econe-upload  --url https://myone38sever file.img

This fails with the error message;
econe-upload:
                <Error>
                    <Code>AuthFailure</Code>
                    <Message>Could not create X509 certificate from </Message>
                </Error>


I can find that this message originates from
$ONE_LOCATION/lib/ruby/cloud/CloudAuth/X509CloudAuth.rb
because HTTP_SSL_CLIENT_CERT is not set(see below [1]).

I also confirmed that Apache also fails to set it
which means the client side, econe-upload command fails to send PEM string correctly,

If you look at "upload_image method"  in $ONE_LOCATION/lib/ruby/cloud/econe/EC2QueryClient.rb,
I guess one of the following lines fails;
            str = AWS.canonical_string(params, @uri.host)
            sig = AWS.encode(@access_key_secret, str, false)

            if curb
                …
                post_fields << Curl::PostField.content("Signature",sig)
                post_fields << Curl::PostField.file("file",file_name)

                connection = Curl::Easy.new(@uri.to_s)
                connection.multipart_form_post = true
                connection.ssl_verify_peer = false
                connection.http_post(*post_fields)


Could Open Nebula developers investigate this?
(I am seeing the same error in both ON3.2 and ON3.8)

Thanks very much.

Hyunwoo Kim
FermiCloud Project

================================
[1] module X509CloudAuth
    def do_auth(env, params={})
        # For https, the web service should be set to include the user cert in the environment.
        cert_line   = env['HTTP_SSL_CLIENT_CERT']
        cert_line   = nil if cert_line == '(null)' # For Apache mod_ssl
        chain_index = 0

        # Use the https credentials for authentication
        unless cert_line.nil?
            begin
                m      = cert_line.match(/(-+BEGIN CERTIFICATE-+)([^-]*)(-+END CERTIFICATE-+)/)
                cert_s = "#{m[1]}#{m[2].gsub(' ',"\n")}#{m[3]}"
                cert   = OpenSSL::X509::Certificate.new(cert_s)
            rescue
                raise "Could not create X509 certificate from " + cert_line
            end
===================================
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opennebula.org/pipermail/users-opennebula.org/attachments/20130117/eb4eeede/attachment.htm>


More information about the Users mailing list