使用 W5500-EVB-Pico 上的 CircuitPython 固件测试 SSL:综合指南

使用最新的 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 网站下载最新固件。

截至本指南创建日期,我使用的是 Cir​​cuitPython 9.1.0-beta.2 版本

按下 W5500-EVB-Pico 上的 BOOTSEL 按钮并上传下载的 uf2 文件。

之后将出现 CIRCUITPY 驱动器。


下载所需的库并将其复制到 CIRCUITPY\lib 文件夹。

对于本指南,我使用了以下库:

步骤2. 获取证书

在此处找到以下说明:Add support for SSL client certificate (load_cert_chain) and self-signed certificate (load_verify_locations) by jepler · Pull Request #7029 · adafruit/circuitpython · GitHub

运行以下命令来获取自签名证书。

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 云服务。

文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值