circuitpython/ports/espressif/common-hal/ssl
Jeff Epler c98174eea5
Add support for SSL client certificate (load_cert_chain)
Tested with badssl.com:

 1. Get client certificates from https://badssl.com/download/
 2. Convert public portion with `openssl x509 -in badssl.com-client.pem -out CIRCUITPY/cert.pem`
 3. Convert private portion with `openssl rsa -in badssl.com-client.pem -out CIRCUITPY/privkey.pem` and the password `badssl.com`
 4. Put wifi settings in CIRCUITPY/.env
 5. Run the below Python script:

```py
import os
import wifi
import socketpool
import ssl
import adafruit_requests

TEXT_URL = "https://client.badssl.com/"
wifi.radio.connect(os.getenv('WIFI_SSID'), os.getenv('WIFI_PASSWORD'))

pool = socketpool.SocketPool(wifi.radio)
context = ssl.create_default_context()
requests = adafruit_requests.Session(pool, context)

print(f"Fetching from {TEXT_URL} without certificate (should fail)")
response = requests.get(TEXT_URL)
print(f"{response.status_code=}, should be 400 Bad Request")
input("hit enter to continue\r")

print("Loading client certificate")
context.load_cert_chain("/cert.pem", "privkey.pem")
requests = adafruit_requests.Session(pool, context)

print(f"Fetching from {TEXT_URL} with certificate (should succeed)")
response = requests.get(TEXT_URL)
print(f"{response.status_code=}, should be 200 OK")
```
2022-10-10 15:10:53 -05:00
..
SSLContext.c Add support for SSL client certificate (load_cert_chain) 2022-10-10 15:10:53 -05:00
SSLContext.h rename left over esp32s2 to espressif 2021-09-18 19:42:18 +05:30
SSLSocket.c Update espressif function prototype to match 2022-10-05 14:56:25 -05:00
SSLSocket.h Handle server_hostname argument in espressif SSLContext.wrap_socket 2021-12-14 01:00:50 +00:00
__init__.c Enable -Werror=missing-prototypes on espressif port 2021-11-10 11:07:45 -06:00
__init__.h rename left over esp32s2 to espressif 2021-09-18 19:42:18 +05:30