After re-testing with currently 'testing' packages I can still reproduce bug
#755554 . 

 

dpkg -l '*gnutls*' | grep ii ; dpkg -l '*curl*' | grep ii

 

ii  libgnutls-deb0-28:amd64   3.2.16-1     amd64        GNU TLS library -
main runtime library

ii  libgnutls-openssl27:amd64 3.2.16-1     amd64        GNU TLS library -
OpenSSL wrapper

ii  libgnutls26:amd64         2.12.23-17   amd64        GNU TLS library -
runtime library

ii  libgnutls28-dev:amd64     3.2.16-1     amd64        GNU TLS library -
development files

ii  libgnutlsxx28:amd64       3.2.16-1     amd64        GNU TLS library -
C++ runtime library

ii  libcurl3:amd64            7.37.1-1     amd64        easy-to-use
client-side URL transfer library (OpenSSL flavour)

ii  libcurl3-gnutls:amd64     7.37.1-1     amd64        easy-to-use
client-side URL transfer library (GnuTLS flavour)

ii  libcurl4-gnutls-dev:amd64 7.37.1-1     amd64        development files
and documentation for libcurl (GnuTLS flavour)

ii  python-pycurl             7.19.3.1-1   amd64        Python bindings to
libcurl (Python 3)

 

Bug reproducible as before.

 

 

 

If insisting on gnutls26 it needs to be rebuilt with a lib/ext_signature.c
matching present upstream logic configuration.

 

As I am not familiar with gnutls I am unsure if this code causes it to
//only validate SHA1 / SHA256 signatures // or if other signatures
implicitly fail.  Basic initial research (
http://en.wikipedia.org/wiki/Transport_Layer_Security ) appears to indicate
that (MD5 (too insecure to continue using),) SHA1 and SHA256 are the only
presently valid TLS hash / signature algorithms that are applicable. 

 

https://gitorious.org/gnutls/gnutls/source/555766063e08fc675b88e06560f79456c
4ba4f24:lib/ext_signature.c

 

--- orig/lib/ext_signature.c.orig       2012-01-06 11:06:23.000000000 -0800

+++ fix/lib/ext_signature.c     2014-07-30 11:53:23.271425378 -0700

@@ -150,13 +150,12 @@

        _gnutls_debug_log ("EXT[SIGA]: rcvd signature algo (%d.%d) %s\n",
aid.hash_algorithm,

          aid.sign_algorithm, gnutls_sign_get_name(sig));

 

+      hash = _gnutls_sign_get_hash_algorithm(sig);

+      if (hash != GNUTLS_DIG_SHA1 && hash != GNUTLS_DIG_SHA256)

+        continue;

 

       if (sig != GNUTLS_SIGN_UNKNOWN)

         {

-          hash = _gnutls_sign_get_hash_algorithm(sig);

-          if (hash != GNUTLS_DIG_SHA1 && hash != GNUTLS_DIG_SHA256)

-            continue;

-

           priv->sign_algorithms[priv->sign_algorithms_size++] = sig;

           if (priv->sign_algorithms_size == MAX_SIGNATURE_ALGORITHMS)

             break;

 

 

Then curl (libcurl) needs to be recompiled with that.

Finally python-pycurl needs to be recompiled with that.

 

This may indicate that #515200 should be re-tested and closed as no longer
necessary.

 

 

After applying the above gnutls26 patch, then recompiling gnutls, curl, and
pycurl I must then install the following patched packages:

 

dpkg -i \

libgnutls-dev_2.12.23-17_amd64.deb \

libgnutls26_2.12.23-17_amd64.deb \

libgnutlsxx27_2.12.23-17_amd64.deb \

libcurl3_7.37.1-1_amd64.deb  \

libcurl3-gnutls_7.37.1-1_amd64.deb \

libcurl4-gnutls-dev_7.37.1-1_amd64.deb \

python-pycurl_7.19.3.1-1_amd64.deb

 

 

However the problem still persists when pycurl is built against gnutls.

 

 

Adding --debug to /etc/default/ganeti for all daemons, I've also collected
the following error messages:

 

 

NODE1 is the IP of the node that should be the master.

NODE2 is the IP of the node that should be a normal node.

 

 

/var/log/ganeti/node-daemon.log -- on NODE2

 

2014-07-31 14:29:40,908: ganeti-noded pid=14668 mlock:77 DEBUG Memory lock
set

2014-07-31 14:29:40,908: ganeti-noded pid=14668 server:405 DEBUG Connection
from NODE1:35896

2014-07-31 14:29:40,910: ganeti-noded pid=14668 server:434 DEBUG
Disconnected NODE1:35896

2014-07-31 14:29:40,910: ganeti-noded pid=14668 server:588 ERROR Error while
handling request from NODE1:35896

Traceback (most recent call last):

  File "/usr/share/ganeti/2.11/ganeti/http/server.py", line 585, in
_IncomingConnection

    self.request_executor(self, self.handler, connection, client_addr)

  File "/usr/share/ganeti/2.11/ganeti/server/noded.py", line 149, in
__init__

    http.server.HttpServerRequestExecutor.__init__(self, *args, **kwargs)

  File "/usr/share/ganeti/2.11/ganeti/http/server.py", line 413, in __init__

    http.Handshake(sock, self.WRITE_TIMEOUT)

  File "/usr/share/ganeti/2.11/ganeti/http/__init__.py", line 530, in
Handshake

    raise HttpError("Error in SSL handshake: %s" % err)

HttpError: Error in SSL handshake: ([('SSL routines',
'SSL3_GET_CLIENT_CERTIFICATE', 'peer did not return a certificate')],)

 

 

 

/var/log/ganeti/watcher.log -- on NODE1

 

2014-07-31 14:30:02,472: ganeti-watcher pid=2794 WARNING Master daemon seems
to be down (/var/run/ganeti/socket/ganeti-master), trying to restart

2014-07-31 14:30:02,473: ganeti-watcher pid=2794 INFO RunCmd
/usr/lib/ganeti/daemon-util check-and-start ganeti-masterd

2014-07-31 14:31:02,857: ganeti-watcher pid=2794 ERROR Can't start daemon
'ganeti-masterd', failure exited with exit code 1, output: ERROR:root:RPC
error in master_node_name on node node2.local: Error 35: gnutls_handshake()
failed: Handshake failed

WARNING:root:Error contacting node node2.local: Error 35: gnutls_handshake()
failed: Handshake failed

ERROR:root:RPC error in master_node_name on node node2.local: Error 35:
gnutls_handshake() failed: Handshake failed

WARNING:root:Error contacting node node2.local: Error 35: gnutls_handshake()
failed: Handshake failed

ERROR:root:RPC error in master_node_name on node node2.local: Error 35:
gnutls_handshake() failed: Handshake failed

WARNING:root:Error contacting node node2.local: Error 35: gnutls_handshake()
failed: Handshake failed

ERROR:root:RPC error in master_node_name on node node2.local: Error 35:
gnutls_handshake() failed: Handshake failed

WARNING:root:Error contacting node node2.local: Error 35: gnutls_handshake()
failed: Handshake failed

ERROR:root:RPC error in master_node_name on node node2.local: Error 35:
gnutls_handshake() failed: Handshake failed

WARNING:root:Error contacting node node2.local: Error 35: gnutls_handshake()
failed: Handshake failed

ERROR:root:RPC error in master_node_name on node node2.local: Error 35:
gnutls_handshake() failed: Handshake failed

WARNING:root:Error contacting node node2.local: Error 35: gnutls_handshake()
failed: Handshake failed

CRITICAL:root:Cluster inconsistent, most of the nodes didn't answer after
multiple retries. Aborting startup

CRITICAL:root:Use the --no-voting option if you understand what effects it
has on the cluster state

 

2014-07-31 14:31:02,858: ganeti-watcher pid=2794 ERROR Can't start the
master daemon

Traceback (most recent call last):

  File "/usr/share/ganeti/2.11/ganeti/watcher/__init__.py", line 851, in
Main

    return fn(options)

  File "/usr/share/ganeti/2.11/ganeti/rapi/client.py", line 254, in wrapper

    return fn(*args, **kwargs)

  File "/usr/share/ganeti/2.11/ganeti/watcher/__init__.py", line 650, in
_GlobalWatcher

    client = GetLuxiClient(True)

  File "/usr/share/ganeti/2.11/ganeti/watcher/__init__.py", line 569, in
GetLuxiClient

    raise errors.GenericError("Can't start the master daemon")

GenericError: Can't start the master daemon

 

 

Reply via email to