Search code examples
sslamazon-ec2opensslchef-infraknife

SSLError while trying to create EC2 server with knife


I'm trying to create and provision a new EC2 instance with knife, but keep running into an SSL error:

$bundle exec knife ec2 server create
ERROR: Excon::Errors::SocketError: hostname "ec2.us-east-1b.amazonaws.com" does not match the server certificate (OpenSSL::SSL::SSLError)

I'm running this from a mac (10.7) using ruby 2.0.0p0:

$ruby -v
ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin11.4.2]

I'm fairly certain I compiled ruby with openssl support correctly. Running require 'openssl' from irb returns true. I'm using OpenSSL 1.0.1e installed via homebrew.

I also tried running knife with ruby 1.9.3-p194. That has the same result, with a slightly less helpful error message: "ERROR: Excon::Errors::SocketError: hostname does not match the server certificate (OpenSSL::SSL::SSLError)". That difference is the result of this pull request, which improved the error message: https://github.com/ruby/ruby/pull/122.

The following output from curl might be relevant:

$curl -v https://ec2.us-east-1b.amazonaws.com
* About to connect() to ec2.us-east-1b.amazonaws.com port 443 (#0)
*   Trying 67.215.65.132... connected
* Connected to ec2.us-east-1b.amazonaws.com (67.215.65.132) port 443 (#0)
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL connection using AES256-SHA
* Server certificate:
*    subject: serialNumber=UoFmxu6ta5ecJiIs4su2w-q-u8rxJ/d3; OU=GT55236522; OU=See www.rapidssl.com/resources/cps (c)12; OU=Domain Control Validated - RapidSSL(R); CN=*.opendns.com
*    start date: 2012-08-23 10:11:50 GMT
*    expire date: 2014-09-25 12:42:00 GMT
*    subjectAltName does not match ec2.us-east-1b.amazonaws.com
* Closing connection #0
* SSLv3, TLS alert, Client hello (1):
* SSL peer certificate or SSH remote key was not OK
curl: (51) SSL peer certificate or SSH remote key was not OK

Is there something else I need to configure in order to successfully create an EC2 instance with knife?


Solution

  • In my knife.rb configuration file, I had this line:

    knife[:region] = 'us-east-1b'
    

    That worked at some point in the past, but the correct current setting is:

    knife[:region] = 'us-east-1'
    

    Removing the 'b' resolves the SSL hostname error:

    $curl -v https://ec2.us-east-1.amazonaws.com
    * About to connect() to ec2.us-east-1.amazonaws.com port 443 (#0)
    *   Trying 205.251.242.7... connected
    * Connected to ec2.us-east-1.amazonaws.com (205.251.242.7) port 443 (#0)
    * SSLv3, TLS handshake, Client hello (1):
    * SSLv3, TLS handshake, Server hello (2):
    * SSLv3, TLS handshake, CERT (11):
    * SSLv3, TLS handshake, Server finished (14):
    * SSLv3, TLS handshake, Client key exchange (16):
    * SSLv3, TLS change cipher, Client hello (1):
    * SSLv3, TLS handshake, Finished (20):
    * SSLv3, TLS change cipher, Client hello (1):
    * SSLv3, TLS handshake, Finished (20):
    * SSL connection using RC4-MD5
    * Server certificate:
    *    subject: C=US; ST=Washington; L=Seattle; O=Amazon.com Inc.; CN=ec2.us-east-1.amazonaws.com
    *    start date: 2010-10-08 00:00:00 GMT
    *    expire date: 2013-10-07 23:59:59 GMT
    *    subjectAltName: ec2.us-east-1.amazonaws.com matched
    *    issuer: C=US; O=VeriSign, Inc.; OU=VeriSign Trust Network; OU=Terms of use at https://www.verisign.com/rpa (c)09; CN=VeriSign Class 3 Secure Server CA - G2
    *    SSL certificate verify ok.
    > GET / HTTP/1.1
    > User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5
    > Host: ec2.us-east-1.amazonaws.com
    > Accept: */*
    >
    < HTTP/1.1 301 Moved Permanently
    < Location: http://aws.amazon.com/ec2
    < Content-Length: 0
    < Date: Sat, 16 Mar 2013 21:15:51 GMT
    < Server: AmazonEC2
    <
    * Connection #0 to host ec2.us-east-1.amazonaws.com left intact
    * Closing connection #0
    * SSLv3, TLS alert, Client hello (1):