[TP06] Finished

This commit is contained in:
Afonso Franco 2024-03-19 23:02:05 +00:00
parent c2f25b8c2d
commit 11b24d0426
Signed by: afonso
SSH key fingerprint: SHA256:aiLbdlPwXKJS5wMnghdtod0SPy8imZjlVvCyUX9DJNk
13 changed files with 491 additions and 0 deletions

54
TPs/TP06/CA/CA.key Normal file
View file

@ -0,0 +1,54 @@
-----BEGIN ENCRYPTED PRIVATE KEY-----
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
-----END ENCRYPTED PRIVATE KEY-----

32
TPs/TP06/CA/CA.pem Normal file
View file

@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIFiTCCA3GgAwIBAgIUJ90aOSX5agNtyI7aCYIq0TPJGBswDQYJKoZIhvcNAQEL
BQAwVDELMAkGA1UEBhMCUFQxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM
GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDENMAsGA1UEAwwETVlDQTAeFw0yNDAz
MTkyMjE2MjlaFw0yOTAzMTgyMjE2MjlaMFQxCzAJBgNVBAYTAlBUMRMwEQYDVQQI
DApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQx
DTALBgNVBAMMBE1ZQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCr
rR+DEViRbq7Ilid50Osv8c3gvK0v++Hd22SaVmYKre8RkoUNcLthvDQ1KYz4US+I
Co5nUer+NWzmp1vAtxiqzjgJFFXsFNAIDAH9+gU8PHE3bb9Pw5lSstSq5T1VDSBS
4GwgSSs4cQeek7187F4+dtuROUJQv2H0oKLzNga171yXbS7lyHZKxypV5M6U2y2I
rYI1DWYJkp4d3Fjex4whIIVjZaCN/A7qbcgpnuiHtQ5mnH+ZBQd20mJbzhN32GQa
bstoV8PxmL9JpsTYkk2l4r+uQXCVQ4A89e3fLzHrezP7Vnx/ZWy9SrjeGDxgp1Pl
pdrOjqseucwM8c3cOvzQSaXcghGA7m9g2TM654MiXF4+7oam6sYMUGr/LThgvWqg
MIEYpIIO2W04iReMzM/aIZjHsJ7qQ/lCTUcQn0heQGUqJ1JB+hzwuARYDhcFKzTl
25d8Y/l7ttT0M0ecShRxUj2B13GxEddV1Q473xnUkR++YpWhztImVXk88bJ6IFoB
7NpFGOOhJsWrQ0WuDvgSrAr1TSkr/GkSDblYwiUhH62LNlGxwolSNkHgTNMBkyDh
5e0F3yAEwgX2co8FCFaBKm0F7ereNMfgFEtQ+G3X/id95oFlcL8lv/jn9kjddz2H
RmrWWWaaHQICopyXgUaS2yYDILbuuFyhNTqdZmLuSwIDAQABo1MwUTAdBgNVHQ4E
FgQUCTpJ8Aw9xFdF6Als2N98jfRnDFQwHwYDVR0jBBgwFoAUCTpJ8Aw9xFdF6Als
2N98jfRnDFQwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAAQTu
hMASxdllVLpjaRdD41907EkN0uufZkAliQnCZU4EXoPreH5NtsWPX6w5yvPp9bnG
mosSU9m7EHiXDCq0JWtCGCaSTjCfB+3haAn5TIog6yMA5RQbISigoEVY1ykg494Y
rjMMgS+CksK8nA6pjzZd2Hhxz2k2Bbz4MaIzkNHySv7p9CFvCT2nZn78O1cl2Vmk
U+ZoCvE5hnm3orWglAPXAsEstMly2ZrrwpwRIA3g44JnXEnM/McwvW5zotUjnUKT
naITcGsN963EF/byrxj3Cc/t12HN8Vh+xOaOYdC5VKQiWAyhyipuURGww6lPxatY
PvPD6NJNFPMEag3/Qp9kbcagzVEA/aVNOmqnZ2bcHsj9HokVh6E40yacRt9HnfY5
YLGeMVEIC9klLm0MypyJgMg2ymJj8Lh68hIKwO8pTgMq8obsMgUiF6RU8T2D9+IC
EysD/UACQUM33lprDhoOgna+Pp6VfUJ/xq7vM8RoaV3yDs8DLA9dpeZ4P+9umjTK
tB15vM/e9I27bSk9QFi4PdRMuxWveRc1dgP6CmUK8/9PmiBgxEAAxLtpRQ6mMGD1
pWqkVHv6wAgwgxLqfIEE1EgEv3brwLAQwU+Tc6o9emELF1zFp7tvefB+RO9H9fHI
0jMJG97rrgtFWcIs5xa0a4jTFJP75pCPBKSo4MA=
-----END CERTIFICATE-----

1
TPs/TP06/CA/CA.srl Normal file
View file

@ -0,0 +1 @@
64996D2AE26B7AA89275BD8914DC14522E080C33

34
TPs/TP06/README.md Normal file
View file

@ -0,0 +1,34 @@
# Generating keys
1. Generate CA key and certificate:
```bash
openssl genrsa -aes256 -out CA/CA.key 4096
openssl req -x509 -new -nodes -key CA/CA.key -sha256 -days 1825 -out CA/CA.pem
```
2. Generate server key and CSR:
```bash
openssl genrsa -out server/server.key 4096
openssl req -new -key server/server.key -out server/server.csr
```
3. Sign the server CSR with CA:
```bash
openssl x509 -req -in server/server.csr -CA CA/CA.pem -CAkey CA/CA.key -CAcreateserial -out server/server.crt -days 1825 -sha256
```
4. Generate client key and CSR:
```bash
openssl genrsa -out client/client.key 4096
openssl req -new -key client/client.key -out client/client.csr
```
5. Sign the client CSR with ca CA:
```bash
openssl x509 -req -in client/client.csr -CA CA/CA.pem -CAkey CA/CA.key -CAcreateserial -out client/client.crt -days 1825 -sha256
```

51
TPs/TP06/client.py Normal file
View file

@ -0,0 +1,51 @@
from socket import create_connection
from ssl import CERT_REQUIRED
import ssl
import threading
import sys
hostname = "example.org"
ip = "127.0.0.1"
port = 8443
client_cert = "client/client.crt"
server_cert = "server/server.crt"
client_key = "client/client.key"
context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, cafile=server_cert)
context.load_cert_chain(certfile=client_cert, keyfile=client_key)
# A biblioteca ssl não suporta editar as ciphers de TLS1.3
# context.set_ciphers("TLS_CHACHA20_POLY1305_SHA256")
context.minimum_version = ssl.TLSVersion.TLSv1_3
context.load_verify_locations(cafile="./CA/CA.pem")
context.verify_mode = CERT_REQUIRED
def receive_messages(tls: ssl.SSLSocket):
try:
while True:
data = tls.recv(1024)
if not data:
break
print(f"\rServer: {data.decode()}\n> ", end="")
sys.stdout.flush()
except KeyboardInterrupt:
return
with create_connection((ip, port)) as client:
with context.wrap_socket(client, server_side=False, server_hostname=hostname) as tls:
print(f"Using the following TLS1.3 cipher: ", str(tls.cipher()))
threading.Thread(target=receive_messages, args=(tls,)).start()
try:
while True:
message = input("> ")
print("\033[A \033[A")
print(f"Client: {message}\n", end="")
tls.sendall(message.encode())
if message.lower() == "exit":
break
except KeyboardInterrupt:
tls.close()
pass

View file

@ -0,0 +1,30 @@
-----BEGIN CERTIFICATE-----
MIIFNzCCAx8CFGSZbSria3qoknW9iRTcFFIuCAwzMA0GCSqGSIb3DQEBCwUAMFQx
CzAJBgNVBAYTAlBUMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRl
cm5ldCBXaWRnaXRzIFB0eSBMdGQxDTALBgNVBAMMBE1ZQ0EwHhcNMjQwMzE5MjIx
OTA2WhcNMjkwMzE4MjIxOTA2WjBcMQswCQYDVQQGEwJQVDETMBEGA1UECAwKU29t
ZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRUwEwYD
VQQDDAxleGFtcGxlMi5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
AQC3XOhVQUVK+J45o48k3wzbyaUAY5z08dL3BnCZJiv6y73JCllsJbpl+ztN4Iva
n+bQ5T4Rfr5fsAZWqptHNBnWwk18kn9IZuV62/EzPwHQ9QtXumqf1iwY5fsd/2KJ
d+zrMl9nzXJcbGELHIYwdopdynPPfhq5w/E1U76vPr2MNNMJ/rLbQavSuofZ13wR
TBsibCsNlai7PVX1j4UdyrUspWzVr64tBz2li/5YlHy1wri1KN3rpBCKEDbf8wQP
9FJwXNhE8v1nF5fd2Opvz+o8kh0Mn3JTYa0RCZ9marVVg3l7e8+KXRYgvnaQsvcg
/KeVmjOwU/kFlZh+zDJb2AaxijzqX5JnB0yZdkvc9y8/QpqtVD0SrP203bHuGcwW
UVd1WMGN1ACPNYB6Mx9Z9dNIWsIpRKA+Inal866bW5dl/BGUkXN8yr/Cc7io8AyP
OTqdiMUhCW1al2cDMRf+hGhlLSFpizbp4YIbQA1roJWewaed8+5eTqsolxx6jC2a
HTyv+ipsh3AUnnfVAtVy4qdmOFidBtlVIpLlsDD4QEv46yp9dUV4RnM9yz7BQS1/
qZy5TMyeZmqX4+FQu7uAkKuZqvq0I8eQKtci/q6TLjSgkBnOd6XdjYxEu6aEtbm2
rYJRZY0NV2fM9Zr6AYdPVZPnsWJZ5xbb380wVPpD1C4OKQIDAQABMA0GCSqGSIb3
DQEBCwUAA4ICAQBlhBsrnLaZ82JmJXoIHEKFib8Q8BECr07/2bcqV1Vo34BXJbP1
BAB9/2TuN11dGfA02I7Cd8i5kaq9C42y/5sY1lGRj7LTbhf8D9LZfOsMsDoblZaR
eGnKF2V5H6ciyajXa/nOFPT+ZC2dB1JBSg26w72LugAcKaoewY/1oq823lX3mMd9
TPdPCwGhj/+j7QLQ21NLMBbwTt7koxTZSP4KFFirJHE26lT3Ckdc4DE0ZN1AbyU+
hS39ao2yQXLoo5hBBubydHmuxPSO49Nzr/PQCl32rNahv2rC84X8AJAI/h11zsU0
/hh+9dXywXc5aJGnsaModE9RNknU7dcsmzI8ZOF6FMILShMicj7rK1HiMx/KhLOm
np/DyCYczQ5Aa8hvfVbOtfJ5zaPnsAlkkvvtwblOIazV5/Lo9Rok2LKWEFR54qeX
GsoqW4BoP9bq7gpxsfUtNU1fET5oUpH2lP0Hz1f5yIcfiREthTTpR3JVCDUn3AWN
Z/VEXewhZJWjFLC0qvOzSAL/Jp/ZZhz/9tGvK2CHQGGVLlgTDPTRAUL0vvZ4WC4u
jJYy8+38Cc58EUuzfsMZ21iHTTHZwfQvqlLeSmTmF2l59hoDCtAbuu2BajqVSaR4
EG7xzMczFAyNebtpYi9wkjy+9Tu3/vTxKpCGmHtaYJgFvXY6sqMHDIHaFg==
-----END CERTIFICATE-----

View file

@ -0,0 +1,28 @@
-----BEGIN CERTIFICATE REQUEST-----
MIIEtjCCAp4CAQAwXDELMAkGA1UEBhMCUFQxEzARBgNVBAgMClNvbWUtU3RhdGUx
ITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEVMBMGA1UEAwwMZXhh
bXBsZTIub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAt1zoVUFF
SvieOaOPJN8M28mlAGOc9PHS9wZwmSYr+su9yQpZbCW6Zfs7TeCL2p/m0OU+EX6+
X7AGVqqbRzQZ1sJNfJJ/SGbletvxMz8B0PULV7pqn9YsGOX7Hf9iiXfs6zJfZ81y
XGxhCxyGMHaKXcpzz34aucPxNVO+rz69jDTTCf6y20Gr0rqH2dd8EUwbImwrDZWo
uz1V9Y+FHcq1LKVs1a+uLQc9pYv+WJR8tcK4tSjd66QQihA23/MED/RScFzYRPL9
ZxeX3djqb8/qPJIdDJ9yU2GtEQmfZmq1VYN5e3vPil0WIL52kLL3IPynlZozsFP5
BZWYfswyW9gGsYo86l+SZwdMmXZL3PcvP0KarVQ9Eqz9tN2x7hnMFlFXdVjBjdQA
jzWAejMfWfXTSFrCKUSgPiJ2pfOum1uXZfwRlJFzfMq/wnO4qPAMjzk6nYjFIQlt
WpdnAzEX/oRoZS0haYs26eGCG0ANa6CVnsGnnfPuXk6rKJcceowtmh08r/oqbIdw
FJ531QLVcuKnZjhYnQbZVSKS5bAw+EBL+OsqfXVFeEZzPcs+wUEtf6mcuUzMnmZq
l+PhULu7gJCrmar6tCPHkCrXIv6uky40oJAZznel3Y2MRLumhLW5tq2CUWWNDVdn
zPWa+gGHT1WT57FiWecW29/NMFT6Q9QuDikCAwEAAaAVMBMGCSqGSIb3DQEJBzEG
DAQxMjM0MA0GCSqGSIb3DQEBCwUAA4ICAQCamKmpIto5HIRmHEQhRulAdwtHOpRs
Lmw/IVM9eflBaxgJuwOM2VEnAc58+y5IL08dE8IiDRxNOBKAf9gne2WL0WVRFmp3
pHezwDMlhaU/FeDfh9v07HNHBJzKY8HSjvQ8yENDGFpK9zQyjKFgk6wiLyIqxQ7a
Ko5YtW/x4Lbwmgw0Tg8eWOH332sXmsCuoObl0x5xbwJ0KXJEwl+oazW2ncH9+RCG
PJMQRIDzrMyvixa3l295LtP2qJXnlTr9W6G6NSyZjCCBXW86RmSxdXZ3OeLuRVN6
QoEaBatDbeAsIw5HoKg4fWqdZw9rLTON89zbSnVJLb+kI9xtsMJ7y2uKCz/INrlC
5vsAfILldjHZAieXPBRrEDGMO0gSq73QIh8pd+IWvBt2qRWb8ZZR9vUPDjj+4RDv
XLdQyoXBTLRXn0YQH76Topy/sttLf7sFdkrq5Oy96kdrrU9mN2RkC7kgpexdNfcl
0wXJ6gZtksaGOKc0yFVqSC/Bho6JfasQAiBlti1W3M+li92ACs1ltvH3266yEBYa
LtzWvXNUn48PJWrMj7s9OMDiMSoJGJG52NwBEp3qBOC74g/6XtuJkBrGXIpHBaod
gkDCpULrXqqkW4s+CI7WQCCymbvxSdIGIaA6/Ufy1Wyl0XLdm3o8MFF82BGQPPEh
nw7fTCepLq/jmQ==
-----END CERTIFICATE REQUEST-----

View file

@ -0,0 +1,52 @@
-----BEGIN PRIVATE KEY-----
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
UVGySovBgOxGQNsGLPLBSZSr9DL/GQ==
-----END PRIVATE KEY-----

62
TPs/TP06/server.py Normal file
View file

@ -0,0 +1,62 @@
from socket import socket, AF_INET, SOCK_STREAM
from ssl import CERT_REQUIRED
import ssl
import sys
import threading
ip = "127.0.0.1"
port = 8443
client_cert = "client/client.crt"
server_cert = "server/server.crt"
server_key = "server/server.key"
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.minimum_version = ssl.TLSVersion.TLSv1_3
context.maximum_version = ssl.TLSVersion.TLSv1_3
# A biblioteca ssl não suporta editar as ciphers de TLS1.3
# context.set_ciphers("TLS_CHACHA20_POLY1305_SHA256")
context.load_cert_chain(certfile=server_cert, keyfile=server_key)
context.load_verify_locations(cafile="./CA/CA.pem")
context.verify_mode = CERT_REQUIRED
def handle_client(connection: ssl.SSLSocket, address):
try:
print(f"Client Connected: {address}\n")
print(f"Using the following TLS1.3 cipher: ", str(connection.cipher()))
while True:
message = connection.recv(1024)
if not message:
break
print(f"\rClient: {message.decode()}\n> ", end="")
sys.stdout.flush()
except KeyboardInterrupt:
connection.close()
return
with socket(AF_INET, SOCK_STREAM) as server:
server.bind((ip, port))
server.listen(5)
while True:
client_socket, client_address = server.accept()
ssl_socket = context.wrap_socket(client_socket, server_side=True)
threading.Thread(target=handle_client, args=(ssl_socket, client_address)).start()
try:
while True:
server_message = input("> ")
print("\033[A \033[A")
print(f"Server: {server_message}\n", end="")
ssl_socket.sendall(server_message.encode())
if server_message.lower() == "exit":
break
except KeyboardInterrupt:
ssl_socket.close()
client_socket.close()
pass

View file

@ -0,0 +1,30 @@
-----BEGIN CERTIFICATE-----
MIIFNjCCAx4CFGSZbSria3qoknW9iRTcFFIuCAwyMA0GCSqGSIb3DQEBCwUAMFQx
CzAJBgNVBAYTAlBUMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRl
cm5ldCBXaWRnaXRzIFB0eSBMdGQxDTALBgNVBAMMBE1ZQ0EwHhcNMjQwMzE5MjIx
NzM4WhcNMjkwMzE4MjIxNzM4WjBbMQswCQYDVQQGEwJQVDETMBEGA1UECAwKU29t
ZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRQwEgYD
VQQDDAtleGFtcGxlLm9yZzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
AM6H/Fi8AeocrnwRvJDDw6GW5yZIFG3tm59rBgCxOFgcmnox+1Hxtbk1JKsU5zu7
Dp9/JBhfZ+AAAJDa9X8ArzhoegwiI84RYH4BrJrBGfer3Hw/ABlopawoLIwb62XC
P377Bz6QeoHE9ou3/X6otXZpFwx6d9G+JhyssroJ/UJWpjcCtl7GS22bWP4PPnXA
oHgogLD0gbOp/uAczUomsQGFlLCdr9OPJU7kwmlksBZEQ42GW+3X7M8CVTZ0WMGy
J2mYMOlHNEmjWKosK+QlAcN5NsbmWF2zE9Dn5oQNeuNvE0wrdioqnY6Nc1wgmX8t
Id3oKTPF1cRT8ngZzLdFCueIV16YtX8APY2SoxqvUn3m4QxFqSlVMqpDhZSmrIGB
KtJRCugdfQlfsBmdRO6Cfe/0/qv6AJhynE+Y2YqWJScLEPKcP0uAMPk90+oOh/hw
XefLnEk8yXDhbe6XkHWDZ1lhPRg5lBT+tEeTXx7s3N79Rki5Oa2F1DDN7WmKyOgz
kWDB0PuGB0ZPxRVH+aw4wzjBdXRmHx08WaMfp7mfZjIY3WHHLmXk0y/LAgBodocw
eZpP3H7JJi85Nv16xH3XocDU979PvKASoLJ5SDTuG2N+sUHi6bVvpEgcfQDLgGEh
speM07gC5GFa+yz3rGga9EAhfTB2z1mI7aJLMHZVlYtpAgMBAAEwDQYJKoZIhvcN
AQELBQADggIBAGXddzeOBri9vrp5e7vcNuBSzhPrxpKoubX4DY/861XlIqGwhWdm
DuOOafIy7GZesoERanIBIDgSnzT6trorBDxhM5iBBdDq0hHREAOsFThvqfXXZqJd
MUyspGN9pSFJw8wOyAeSx7K+FW8tyComYuZkrupmS0nlkRke3NAM/cQKAi3ezPRt
MJyCpDcvxLz8tLhKLL/PtYy0VBqHEr6Bn4PDtXUv0p00JOHK/Ki0gAAs1YS+7kPA
cQuiuN7fWBBEauBoydnV+CgvQHTM/8UU+kBeVJWkPwYMXg/JVZc7vqNhb0r+fUjz
qwfkwa6N9ZXroE3iaHoyfumQ6XO9Rf6TU1zixrQt+YxhEcdepCw8T5GStpNTUXRH
1DKXHvqS1NfNgTqD2dFWclcdjommgORS6PphnsaWG/4ifc+pZtEyfLxT/GsJJpCu
jYCEudp/Y/UplKxb+nKWQulakj1m4RZMsrn/C145FSjDjyfMnrUrKkvI2j4M6Tt0
EM8k30yVRunDmgC+gAI8nBxli6U7b9eezaQlI/5E8R32YRhSGoLqC89ZhIB9MlOh
+Z+5URiHPvcwt0RXwiQ49Tr412kMvtCUvpgI6Ukx11adzByvou9Yp/Hin6bmOaeR
yrtJvq6hdjifL4h+a4dFfOHgM9MmHiHNzFoKOukYHscpx4STNaMDqRqI
-----END CERTIFICATE-----

View file

@ -0,0 +1,28 @@
-----BEGIN CERTIFICATE REQUEST-----
MIIEtTCCAp0CAQAwWzELMAkGA1UEBhMCUFQxEzARBgNVBAgMClNvbWUtU3RhdGUx
ITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEUMBIGA1UEAwwLZXhh
bXBsZS5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDOh/xYvAHq
HK58EbyQw8OhlucmSBRt7ZufawYAsThYHJp6MftR8bW5NSSrFOc7uw6ffyQYX2fg
AACQ2vV/AK84aHoMIiPOEWB+AayawRn3q9x8PwAZaKWsKCyMG+tlwj9++wc+kHqB
xPaLt/1+qLV2aRcMenfRviYcrLK6Cf1CVqY3ArZexkttm1j+Dz51wKB4KICw9IGz
qf7gHM1KJrEBhZSwna/TjyVO5MJpZLAWREONhlvt1+zPAlU2dFjBsidpmDDpRzRJ
o1iqLCvkJQHDeTbG5lhdsxPQ5+aEDXrjbxNMK3YqKp2OjXNcIJl/LSHd6CkzxdXE
U/J4Gcy3RQrniFdemLV/AD2NkqMar1J95uEMRakpVTKqQ4WUpqyBgSrSUQroHX0J
X7AZnUTugn3v9P6r+gCYcpxPmNmKliUnCxDynD9LgDD5PdPqDof4cF3ny5xJPMlw
4W3ul5B1g2dZYT0YOZQU/rRHk18e7Nze/UZIuTmthdQwze1pisjoM5FgwdD7hgdG
T8UVR/msOMM4wXV0Zh8dPFmjH6e5n2YyGN1hxy5l5NMvywIAaHaHMHmaT9x+ySYv
OTb9esR916HA1Pe/T7ygEqCyeUg07htjfrFB4um1b6RIHH0Ay4BhIbKXjNO4AuRh
Wvss96xoGvRAIX0wds9ZiO2iSzB2VZWLaQIDAQABoBUwEwYJKoZIhvcNAQkHMQYM
BDEyMzQwDQYJKoZIhvcNAQELBQADggIBAAooNMiAJVpxbjO0WNJtw9ufvXHY4Nm0
yuvIApJ+A7vpk/sNGn/YqQ5mDdxI+6CO9X8q6eXiYaUHuq3cAX8cq4EpTwk2ZTxe
CdgDNmeZyXrYCfsUGkl2+5DEe13Z051/BtGL+15phcdpCJK/H+o8gk+Kp7mEMbyL
jWXOFmo0PmG6PcJRiSBu3Xi9ZrLZWZ2eEZ0NRDcTtOdywBKBbZVcFg1aSpy5XMLQ
X8cJgJXI5P6fAQWFrkDnwp7IUqcSChDhhPqHvsW4OZqKwzs0gem5yPvt8W6hnTf4
NUJYSD/9MRUY+o1vepzs7plffUFX6KwhfFxXsGMU/z5tkWog2TYKecfL0vLiZnvk
XOxIsdsZTEG6HfAhWrslz0Aww4w71nU51GyX3Nufqg5nFio9LMRLCruU47lUPest
V30LdmvbH85ZQXICMgMUPuTlOJ0IVIPLdMxWsPkYYqhrzee4f4PMxyWeNO5/07q2
mHq/WTv6EhRuj62W8UM9zvW4et+S1AzYO9ni00FnbNgIDukGAPgP/e3IT8sFwPp+
WXCDTQcCMhNGYT/xI7/psURdnSsA4HbnXBB1nmiNCx1FWSoSbkqmBE7pLF6EQsbe
6/DUAAoeywx7aIp/fE8Rn/ds4zN0SpPnU/hztZmFy/0F+t6la1UvZl3iAm2O2zD6
j9Xx8GzQvQ3S
-----END CERTIFICATE REQUEST-----

View file

@ -0,0 +1,52 @@
-----BEGIN PRIVATE KEY-----
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
FymzYz4Gv0oJMuk7jQjEQcyszeERzORj
-----END PRIVATE KEY-----

37
TPs/TP06/server/server.py Normal file
View file

@ -0,0 +1,37 @@
from socket import socket, AF_INET, SOCK_STREAM
from ssl import SSLContext, PROTOCOL_TLS_SERVER, CERT_REQUIRED
import ssl
ip = "127.0.0.1"
port = 8443
client_cert = "client.crt"
server_cert = "server.crt"
server_key = "server.key"
context = SSLContext(PROTOCOL_TLS_SERVER)
context.set_ciphers("TLS_CHACHA20_POLY1305_SHA256")
print("Using Cipher: ", context.get_ciphers())
context.minimum_version = ssl.TLSVersion.TLSv1_3
print("Minimum TLS Version: ", context.minimum_version)
context.load_cert_chain("server_cert.pem", "server_key.pem")
context.verify_mode = CERT_REQUIRED
with socket(AF_INET, SOCK_STREAM) as server:
server.bind((ip, port))
server.listen(1)
with context.wrap_socket(server, server_side=True) as tls:
connection, address = tls.accept()
print(f"Connected by {address}\n")
data = connection.recv(1024)
print(f"Client Says: {data.decode()}")
while True:
message = input("Server: ")
connection.sendall(message.encode())
if message.lower() == "exit":
break
data = connection.recv(1024)
print(f"Client says: {data.decode()}")