[socket] [ssl] kiss, client - server
Bonjour à tous,
Je suis actuellement entrain d'essayer de créer un client-serveur grâce à la library "socket" et d'encapsuler celui-ci dans "ssl" afin de chiffrer les communications.
J'ai donc créer deux fichiers (client / server), mon objectif est de garder quelques choses de très simples, malheureusement, je n'arrive pas à mettre en place correctement SSL.
Tout d'abord, afin de générer les clés (priv/pub) et le certificat côté serveur, j'utilise ces commandes:
Code:
1 2
| $ openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj '/CN=test.test'
$ openssl rsa -in key.pem -pubout > key.pub |
Ensuite, voici le code de mon client ainsi que de mon serveur :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| # Server
import socket
import ssl
if __name__ == "__main__":
# Creating the socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# Wrapping it in a SSL object
s = ssl.wrap_socket(s, server_side=True, keyfile="key.pem", certfile="cert.pem")
# Waiting for incoming connections
s.bind(("127.0.0.1", 37190))
s.listen()
# Accepting the first incoming connection
client, addr = s.accept()
print(client.recv(1024).decode("utf-8")) |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| # Client
import socket
import ssl
if __name__ == "__main__":
# Creating the socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# Wrapping it in a SSL object
s = ssl.wrap_socket(s, keyfile="key.pub", certfile="cert.pem")
# Trying to connect to server
s.connect(("127.0.0.1", 37190))
# Sending hello !
s.send("Hello world !".encode("utf-8")) |
Voici l'erreur que j'obtiens (côté client) :
Code:
1 2 3 4 5 6
| Traceback (most recent call last):
File "client.py", line 11, in <module>
s = ssl.wrap_socket(s, keyfile="key.pub", certfile="cert.pem")
File "/usr/lib/python3.8/ssl.py", line 1402, in wrap_socket
context.load_cert_chain(certfile, keyfile)
ssl.SSLError: [SSL] PEM lib (_ssl.c:4067) |
J'ai lu la documentation de SSL et pense devoir me diriger vers une définition de contexte à la main mais ne sait trop comment m'y prendre.
De plus, mon certificat est auto-signé et je souhaite que cela fonctionne comme cela :x
Merci d'avance pour toute aide quelle qu'elle soit