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:
Ensuite, voici le code de mon client ainsi que de mon serveur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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"))Voici l'erreur que j'obtiens (côté client) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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"))
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
De plus, mon certificat est auto-signé et je souhaite que cela fonctionne comme cela
Merci d'avance pour toute aide quelle qu'elle soit
Partager