## Testing self-signed certificates and `load_verify_locations` Obtain the badssl "self-signed" certificate in the correct form: ```sh openssl s_client -servername self-signed.badssl.com -connect untrusted-root.badssl.com:443 < /dev/null | openssl x509 > self-signed.pem ``` Copy it and the script to CIRCUITPY: ```python import os import wifi import socketpool import ssl import adafruit_requests TEXT_URL = "https://self-signed.badssl.com/" if not wifi.radio.ipv4_address: 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)") try: response = requests.get(TEXT_URL) except Exception as e: print(f"Failed: {e}") else: print(f"{response.status_code=}, should have failed with exception") print("Loading server certificate") with open("/self-signed.pem", "rb") as certfile: context.load_verify_locations(cadata=certfile.read()) requests = adafruit_requests.Session(pool, context) print(f"Fetching from {TEXT_URL} with certificate (should succeed)") try: response = requests.get(TEXT_URL) except Exception as e: print(f"Unexpected exception: {e}") else: print(f"{response.status_code=}, should be 200 OK") ```
CircuitPython ============= .. image:: https://s3.amazonaws.com/adafruit-circuit-python/CircuitPython_Repo_header_logo.png |Build Status| |Doc Status| |License| |Discord| |Weblate| `circuitpython.org <https://circuitpython.org>`__ \| `Get CircuitPython <#get-circuitpython>`__ \| `Documentation <#documentation>`__ \| `Contributing <#contributing>`__ \| `Branding <#branding>`__ \| `Differences from Micropython <#differences-from-micropython>`__ \| `Project Structure <#project-structure>`__ **CircuitPython** is a *beginner friendly*, open source version of Python for tiny, inexpensive computers called microcontrollers. This package contains the "stubs", or type definitions for CircuitPython. With some advanced editors and other tools, this information can be identify TypeErrors, AttributeErrors, and other problems before you deploy your code to a device and can even help autocomplete your code. .. |Build Status| image:: https://github.com/adafruit/circuitpython/workflows/Build%20CI/badge.svg :target: https://github.com/adafruit/circuitpython/actions?query=branch%3Amain .. |Doc Status| image:: https://readthedocs.org/projects/circuitpython/badge/?version=latest :target: http://circuitpython.readthedocs.io/ .. |Discord| image:: https://img.shields.io/discord/327254708534116352.svg :target: https://adafru.it/discord .. |License| image:: https://img.shields.io/badge/License-MIT-brightgreen.svg :target: https://choosealicense.com/licenses/mit/ .. |Weblate| image:: https://hosted.weblate.org/widgets/circuitpython/-/svg-badge.svg :target: https://hosted.weblate.org/engage/circuitpython/?utm_source=widget
Languages
C
90.2%
Python
7.4%
Makefile
1.8%
Shell
0.2%