使用最新的 CircuitPython 固件探索 W5500-EVB-Pico 上的 SSL 测试,详细说明设置、实施和结果
转发: Testing SSL with CircuitPython Firmware on W5500-EVB-Pico: A Comprehensive Guide
项目介绍
介绍
在嵌入式系统和物联网设备不断发展的环境中,确保安全通信至关重要。W5500-EVB-Pico 是一款多功能微控制器板,为联网应用提供了强大的平台。当与 CircuitPython(一种为微控制器量身定制的开源编程语言)结合使用时,开发人员可以轻松创建安全高效的项目。
该项目探索了 SSL(安全套接字层)与 W5500-EVB-Pico 上的最新 CircuitPython 固件的集成。SSL 是建立服务器和客户端之间加密链接的关键技术,可确保通过网络传输的数据保持机密性和防篡改性。
操作步骤
步骤1.准备CircuitPython环境
从 circuitpython 网站下载最新固件。
截至本指南创建日期,我使用的是 CircuitPython 9.1.0-beta.2 版本
按下 W5500-EVB-Pico 上的 BOOTSEL 按钮并上传下载的 uf2 文件。
之后将出现 CIRCUITPY 驱动器。
下载所需的库并将其复制到 CIRCUITPY\lib 文件夹。
对于本指南,我使用了以下库:
步骤2. 获取证书
运行以下命令来获取自签名证书。
openssl s_client -servername self-signed.badssl.com -connect untrusted-root.badssl.com:443 < /dev/null | openssl x509 > self-signed.pem
由于我使用的是 Windows,因此在从命令提示符运行时我使用了以下命令
openssl s_client -servername self-signed.badssl.com -connect untrusted-root.badssl.com:443 | openssl x509 -out self-signed.pem
请注意,您需要在机器上安装 openssl。
因此,self-signed.pem 文件应出现在指定文件夹中。
将此文件复制到 CIRCUITPY 驱动器
步骤 3. 代码
Circuitpython 代码是基于 wiznet5k 库中的以太网示例和上面提到的拉取请求中的测试代码制作的。
import ssl
import time
import board
import busio
from digitalio import DigitalInOut
import adafruit_connection_manager
import adafruit_requests
from adafruit_wiznet5k.adafruit_wiznet5k import WIZNET5K
import traceback
#cs = DigitalInOut(board.D10)
#spi_bus = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
cs = DigitalInOut(board.GP17)
spi_bus = busio.SPI(board.GP18, MOSI=board.GP19, MISO=board.GP16)
# Initialize ethernet interface with DHCP
radio = WIZNET5K(spi_bus, cs)
# Initialize a requests session
pool = adafruit_connection_manager.get_radio_socketpool(radio)
ssl_context = adafruit_connection_manager.get_radio_ssl_context(radio)
requests = adafruit_requests.Session(pool, ssl_context)
print("Loading server certificate")
with open("/self-signed.pem", "rb") as certfile:
ssl_context.load_verify_locations(cadata=certfile.read())
requests = adafruit_requests.Session(pool, ssl_context)
TEXT_URL = "https://self-signed.badssl.com/"
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")
请注意,在定义 cs 和 spi_bus 时,我出现了编译错误,这就是我直接分配引脚的原因。
结果
运行代码后,可以在 shell 中看到以下结果
最后,SSL 可以在 CircuitPython 中与以太网一起使用。非常感谢 CircuitPython 社区做出的这些改进。
下一步
在下一个项目中,我想尝试连接到 AWS 或 Azure 云服务。
文件