2017-10-20 6 views
1

ich eine Instanz von KeyStone wie so:Openstack KeyStone SSL Ausnahme, wenn eine Instanz KeyStone Erstellen

import cherrypy  
from keystoneauth1 import session as session 
from keystoneclient.v3 import client as client 
from keystoneauth1.identity import v3 

auth = v3.Password(auth_url = KEYSTONE_URL, username = cherrypy.session['username'], password = cherrypy.session['password'], user_domain_name=OPENSTACK_DEFAULT_DOMAIN, project_name = 'admin', project_id = 'c9aee696c4b54f12a645af2c951327dc', project_domain_name = 'default') 
sess = session.Session(auth=auth) 
keystoneClient = client.Client(session=sess) 

Wenn ich diesen Code ausführen auch:

projectList = keystoneClient.projects.list() 
print projectList 

Der folgende Fehler tritt auf:

HTTP Traceback (most recent call last): 
    File "/usr/lib/python2.7/site-packages/cherrypy/_cprequest.py", line 656, in respond 
    response.body = self.handler() 
    File "/usr/lib/python2.7/site-packages/cherrypy/lib/encoding.py", line 188, in __call__ 
    self.body = self.oldhandler(*args, **kwargs) 
    File "/usr/lib/python2.7/site-packages/cherrypy/lib/jsontools.py", line 61, in json_handler 
    value = cherrypy.serving.request._json_inner_handler(*args, **kwargs) 
    File "/usr/lib/python2.7/site-packages/cherrypy/_cpdispatch.py", line 34, in __call__ 
    return self.callable(*self.args, **self.kwargs) 
    File "/var/www/frontend/controllers/api/user.py", line 58, in PUT 
    projectList = keystoneClient.projects.list() 
    File "/usr/lib/python2.7/site-packages/positional/__init__.py", line 101, in inner 
    return wrapped(*args, **kwargs) 
    File "/usr/lib/python2.7/site-packages/keystoneclient/v3/projects.py", line 107, in list 
    **kwargs) 
    File "/usr/lib/python2.7/site-packages/keystoneclient/base.py", line 75, in func 
    return f(*args, **new_kwargs) 
    File "/usr/lib/python2.7/site-packages/keystoneclient/base.py", line 383, in list 
    self.collection_key) 
    File "/usr/lib/python2.7/site-packages/keystoneclient/base.py", line 124, in _list 
    resp, body = self.client.get(url, **kwargs) 
    File "/usr/lib/python2.7/site-packages/keystoneauth1/adapter.py", line 173, in get 
    return self.request(url, 'GET', **kwargs) 
    File "/usr/lib/python2.7/site-packages/keystoneauth1/adapter.py", line 331, in request 
    resp = super(LegacyJsonAdapter, self).request(*args, **kwargs) 
    File "/usr/lib/python2.7/site-packages/keystoneauth1/adapter.py", line 98, in request 
    return self.session.request(url, method, **kwargs) 
    File "/usr/lib/python2.7/site-packages/positional/__init__.py", line 101, in inner 
    return wrapped(*args, **kwargs) 
    File "/usr/lib/python2.7/site-packages/keystoneauth1/session.py", line 387, in request 
    auth_headers = self.get_auth_headers(auth) 
    File "/usr/lib/python2.7/site-packages/keystoneauth1/session.py", line 647, in get_auth_headers 
    return auth.get_headers(self, **kwargs) 
    File "/usr/lib/python2.7/site-packages/keystoneauth1/plugin.py", line 84, in get_headers 
    token = self.get_token(session) 
    File "/usr/lib/python2.7/site-packages/keystoneauth1/identity/base.py", line 90, in get_token 
    return self.get_access(session).auth_token 
    File "/usr/lib/python2.7/site-packages/keystoneauth1/identity/base.py", line 136, in get_access 
    self.auth_ref = self.get_auth_ref(session) 
    File "/usr/lib/python2.7/site-packages/keystoneauth1/identity/v3/base.py", line 167, in get_auth_ref 
    authenticated=False, log=False, **rkwargs) 
    File "/usr/lib/python2.7/site-packages/keystoneauth1/session.py", line 595, in post 
    return self.request(url, 'POST', **kwargs) 
    File "/usr/lib/python2.7/site-packages/positional/__init__.py", line 101, in inner 
    return wrapped(*args, **kwargs) 
    File "/usr/lib/python2.7/site-packages/keystoneauth1/session.py", line 469, in request 
    resp = send(**kwargs) 
    File "/usr/lib/python2.7/site-packages/keystoneauth1/session.py", line 507, in _send_request 
    raise exceptions.SSLError(msg) 
SSLError: SSL exception connecting to https://dev-openstack.nubes.rl.ac.uk:5000/v3/auth/tokens: HTTPSConnectionPool(host='dev-openstack.nubes.rl.ac.uk', port=5000): Max retries exceeded with url: /v3/auth/tokens (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),)) 

Das gleiche passiert, ob ich dies tun oder ich Nova verwenden, um die VMs aufzulisten, so denke ich, es ist etwas Vielleicht mit der Authentifizierung zu tun, obwohl ich falsch liegen könnte. Ich würde gerne verstehen:

  • Warum passiert das?
  • Was muss ich tun, damit es funktioniert?

Antwort

2

Der Fehler scheint ziemlich klar: "Zertifikat überprüfen fehlgeschlagen". Sie haben ein SSL-Zertifikat-Validierungsproblem. Sie müssen ein vertrauenswürdiges Zertifizierungsstellenzertifikat dort platzieren, wo die requests-Bibliothek (die von allen OpenStack-Clients für HTTP-Vorgänge verwendet wird) diese finden wird, die sowohl betriebssystem- als auch verteilungsspezifisch sein kann.

Wenn Sie das Python certifi-Modul installiert haben, wird requests dieses verwenden, um ein CA-Zertifikatspaket zu finden. Wenn Ihre Distribution certifi entsprechend anpasst, verweist sie auf dasselbe Zertifikatspaket, das auch von anderen Systemtools verwendet wird. Zum Beispiel auf meinem (Fedora) System:

>>> import certifi 
>>> certifi.where() 
'/etc/pki/tls/certs/ca-bundle.crt' 

Wenn certifi vorhanden ist, aber nicht von Ihrer Distribution, der CA-Bundle wird die Datei cacert.pem enthielt im certifi Modulverzeichnis angepasst hat.

Wenn certifi nicht verfügbar ist, dann wird requests auf Standard verwenden es cacert.pem im requests Modul-Verzeichnis besitzen wird.

Ihre Aufgabe besteht darin, (a) herauszufinden, welches dieser CA-Bundles verwendet wird, und dann (b) das Zertifizierungsstellenzertifikat zu installieren, mit dem Ihre Openstack-SSL-Zertifikate in diese Datei signiert werden.

Alternativ können Sie die Umgebungsdatei OS_CACERT so einstellen, dass sie auf ein entsprechendes Zertifikatspaket verweist.

Siehe auch this bug

Verwandte Themen