Files
micropython/tests/multi_net/sslcontext_verify_time_error.py
Damien George f0392b8d3d tests/run-multitests.py: Change to dir of test script when running it.
This matches the behaviour of run-tests.py, which sets cwd to the directory
containing the test script, which helps to isolate the filesystem.

It means that the SSL tests no longer need to know the name of their
containing directory to find the certificate files, and helps to run these
tests on bare-metal.

Signed-off-by: Damien George <damien@micropython.org>
2024-01-05 11:05:34 +11:00

59 lines
1.4 KiB
Python

# Test creating an SSL connection with an expired certificate.
try:
import os
import socket
import ssl
except ImportError:
print("SKIP")
raise SystemExit
PORT = 8000
# These are test certificates. See tests/README.md for details.
cert = cafile = "expired_cert.der"
key = "rsa_key.der"
try:
os.stat(cafile)
os.stat(key)
except OSError:
print("SKIP")
raise SystemExit
# Server
def instance0():
multitest.globals(IP=multitest.get_network_ip())
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(socket.getaddrinfo("0.0.0.0", PORT)[0][-1])
s.listen(1)
multitest.next()
s2, _ = s.accept()
server_ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
server_ctx.load_cert_chain(cert, key)
try:
s2 = server_ctx.wrap_socket(s2, server_side=True)
except Exception as e:
print(e)
multitest.broadcast("finished")
s.close()
# Client
def instance1():
multitest.next()
s = socket.socket()
s.connect(socket.getaddrinfo(IP, PORT)[0][-1])
client_ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
client_ctx.verify_mode = ssl.CERT_REQUIRED
client_ctx.load_verify_locations(cafile=cafile)
try:
s = client_ctx.wrap_socket(s, server_hostname="micropython.local")
except Exception as e:
print(e)
# Don't close the socket until the server has seen our SSL rejection.
multitest.wait("finished")
s.close()