<div dir="ltr"><div><div>Hi all,<br><br>I found the issue. I just had to use CERT_NONE<br>Below is the working test code.</div>If someone else is struggling with this I hope google will lead them to this.<br><br></div><div>I understand the documentation can't explain everything and that websocket is considered to be known.<br></div><div>Then again it would have been nice to have a note somewhere stating that the websocket did not need a certificate.<br><br></div><div>Enjoy, Frans.<br></div><div><br></div><div><div><div><div><div><br>#!/usr/bin/python2<br><br># code is a minimally adapted version of the code of raharper as found on<br># <a href="https://github.com/lxc/lxd/issues/231">https://github.com/lxc/lxd/issues/231</a><br><br>import json<br>import requests<br>import sys<br>import websocket<br>import urllib<br>import ssl<br><br>URL = '<a href="http://127.0.0.1:8443">127.0.0.1:8443</a>'<br><br>if len(sys.argv) < 2:<br>    print('usage: exec <container> cmd')<br>    sys.exit(1)<br><br>u='https://%s/1.0/containers/%s/exec' % (URL, sys.argv[1])<br>cert = ('client.crt', 'client.key')<br>command = {<br>    "command": sys.argv[2:],<br>    "wait-for-websocket": True,<br>}<br>params = json.dumps(command)<br>r = requests.post(u, data=params, verify=False, cert=cert)<br>content = json.loads(r.text)<br>op = content['operation']<br>fds = content['metadata']['metadata']['fds']<br>sockets = {}<br><br>stdout = '1'<br>stdin = '0'<br>stderr = '2'<br><br><br>ssl_options = {<br>       "cert_reqs": ssl.CERT_NONE,<br>    };<br><br>for fd in [stdin, stdout, stderr]:<br>    secret = urllib.urlencode({'secret': fds[fd]})<br>    wsurl = 'wss://%s%s/websocket?%s' %(URL, op, secret)<br>    ws = websocket.create_connection(wsurl, sslopt=ssl_options)<br>    sockets[fd] = ws<br><br># stdout = 1, stderr = 2<br>output = sockets[stdout].recv()<br>error = sockets[stderr].recv()<br><br>print(output)<br><br><div class="gmail_extra"><br><div class="gmail_quote">2017-02-15 22:47 GMT+01:00 Frans Meulenbroeks <span dir="ltr"><<a href="mailto:fransmeulenbroeks@gmail.com" target="_blank">fransmeulenbroeks@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">This is as far as I got, but I am not properly authenticated.<div>The program is below.</div><div><br>The error I get is:</div><div><div>  File "/home/frans/lxd/websock.py", line 42, in <module></div><div>    ws.connect(wsurl)</div><div>  File "/usr/local/lib/python2.7/<wbr>dist-packages/websocket/_core.<wbr>py", line 211, in connect</div><div>    options.pop('socket', None))</div><div>  File "/usr/local/lib/python2.7/<wbr>dist-packages/websocket/_http.<wbr>py", line 77, in connect</div><div>    sock = _ssl_socket(sock, options.sslopt, hostname)</div><div>  File "/usr/local/lib/python2.7/<wbr>dist-packages/websocket/_http.<wbr>py", line 179, in _ssl_socket</div><div>    sock = _wrap_sni_socket(sock, sslopt, hostname, check_hostname)</div><div>  File "/usr/local/lib/python2.7/<wbr>dist-packages/websocket/_http.<wbr>py", line 160, in _wrap_sni_socket</div><div>    server_hostname=hostname,</div><div>  File "/usr/lib/python2.7/ssl.py", line 353, in wrap_socket</div><div>    _context=self)</div><div>  File "/usr/lib/python2.7/ssl.py", line 601, in __init__</div><div>    self.do_handshake()</div><div>  File "/usr/lib/python2.7/ssl.py", line 830, in do_handshake</div><div>    self._sslobj.do_handshake()</div><div>ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)</div><div><br></div><div>Obviously something wrong with certificates, but what ?</div><div>Anyone a clue?</div><div><br></div><div>Thanks, Frans</div><br></div></div></blockquote><div>[ non working code deleted in order not to confuse people] <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div></div></div><div class="gmail-HOEnZb"><div class="gmail-h5"><div class="gmail_extra"><br><div class="gmail_quote">2017-02-15 16:28 GMT+01:00 Frans Meulenbroeks <span dir="ltr"><<a href="mailto:fransmeulenbroeks@gmail.com" target="_blank">fransmeulenbroeks@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div><div><div><div>Hi,<br><br></div>I was wondering if someone could help me a bit with exec over the REST API (in python in my case).<br><br></div>I found this example: <a href="https://github.com/lxc/lxd/issues/231" target="_blank">https://github.com/lxc/lxd/iss<wbr>ues/231</a> but unfortunately this did not work for me (after changing 8080 to 8443).<br><br>I suspect this is caused by missing authentication, but as I am a websocket n00b, I was wondering if someone could help me out by providing some more info, a link or a code snippet.<br><br></div>Also: should I use ws:// or wss:// ?<br><br></div>Thanks for any help!<span class="gmail-m_-5861774920194555213HOEnZb"><font color="#888888"><br></font></span></div><span class="gmail-m_-5861774920194555213HOEnZb"><font color="#888888">Frans<br></font></span></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div></div></div></div></div></div></div>