circuitpython/ports/raspberrypi/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
..
__init__.c More ssl work 2022-10-05 14:56:26 -05:00
__init__.h More ssl work 2022-10-05 14:56:26 -05:00
SSLContext.c Add support for SSL client certificate (load_cert_chain) 2022-10-10 15:10:53 -05:00
SSLContext.h Add support for SSL client certificate (load_cert_chain) 2022-10-10 15:10:53 -05:00
SSLSocket.c Add support for SSL client certificate (load_cert_chain) 2022-10-10 15:10:53 -05:00
SSLSocket.h pico w: add ssl module 2022-10-05 13:12:43 -04:00