title: Self signed Certificate with Python SSL socket
body: <p>I use a self signed certificate that I generated with the following command:</p>
  
  <pre><code>sudo make-ssl-cert generate-default-snakeoil 
  </code></pre>
  
  <p>And copied it to my home directory.
  If I run the following with this on server side:</p>
  
  <pre><code>from socket import socket, AF_INET, SOCK_STREAM
  import ssl
  
  def main():
      context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
      context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
      context.verify_mode = ssl.CERT_REQUIRED
      context.load_cert_chain('/home/hfurmans/ssl-cert-snakeoil.pem', '/home/hfurmans/ssl-cert-snakeoil.key')
  
      host = "myipaddress"
      port = 5432
      my_socket = socket(AF_INET, SOCK_STREAM)
      my_socket.bind((host, port))
      my_socket.listen(1)
      my_socket = context.wrap_socket(my_socket, server_side=True)
      conn, addr = my_socket.accept()
      print("Connection from: " + str(addr))
      data = conn.recv(1024).decode()
      print(data)
      print("from connected user: " + str(data))
      data = str(data).upper()
      print("sending: " + str(data))
      conn.send(data.encode())
      conn.close()
  
  if __name__ == "__main__":
      main()
  </code></pre>
  
  <p>I substituded my IP address. But they are the same on server and client.
  Here is the client code:</p>
  
  <pre><code>import socket
  import ssl
  
  hostname = "myipaddress"
  context = ssl.create_default_context()
  
  sock = socket.create_connection((hostname, 5432))
  ssock = context.wrap_socket(sock, server_hostname=hostname)
  print(ssock.version())
  ssock.send("test")
  </code></pre>
  
  <p>If I run both scripts i get the following error.
  This is the client error:</p>
  
  <pre><code>bash-3.2$ python3 client.py 
  Traceback (most recent call last):
    File "client.py", line 8, in &lt;module&gt;
      ssock = context.wrap_socket(sock, server_hostname=hostname)
    File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/ssl.py", line 500, in wrap_socket
      return self.sslsocket_class._create(
    File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/ssl.py", line 1040, in _create
      self.do_handshake()
    File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/ssl.py", line 1309, in do_handshake
      self._sslobj.do_handshake()
  ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1108)
  </code></pre>
  
  <p>And here is the server error:</p>
  
  <pre><code>Traceback (most recent call last):
    File "server.py", line 27, in &lt;module&gt;
      main()
    File "server.py", line 16, in main
      conn, addr = my_socket.accept()
    File "/usr/lib/python3.6/ssl.py", line 1125, in accept
      server_side=True)
    File "/usr/lib/python3.6/ssl.py", line 407, in wrap_socket
      _context=self, _session=session)
    File "/usr/lib/python3.6/ssl.py", line 817, in __init__
      self.do_handshake()
    File "/usr/lib/python3.6/ssl.py", line 1077, in do_handshake
      self._sslobj.do_handshake()
    File "/usr/lib/python3.6/ssl.py", line 689, in do_handshake
      self._sslobj.do_handshake()
  ssl.SSLError: [SSL: TLSV1_ALERT_UNKNOWN_CA] tlsv1 alert unknown ca (_ssl.c:852)
  </code></pre>