概要
最新のCircuitPythonファームウェアを使用してW5500-EVB-PicoでのSSLテストを探求し、セットアップ、実装、結果を詳細に説明します。
詳細
コンポーネント
ハードウェア:
- WIZnet - W5500-EVB-Pico x 1
ソフトウェア:
- Thonny x 1
プロジェクト説明
イントロダクション
エンベデッドシステムおよびIoTデバイスの進化する世界において、安全な通信を確保することは非常に重要です。W5500-EVB-Picoは、ネットワーク対応アプリケーションのための堅牢なプラットフォームを提供する多用途なマイクロコントローラボードです。CircuitPythonと組み合わせることで、開発者は簡単に安全かつ効率的なプロジェクトを作成できます。
本プロジェクトでは、W5500-EVB-Pico上で最新のCircuitPythonファームウェアを使用してSSL(Secure Sockets Layer)の統合を探求します。SSLは、サーバーとクライアント間で暗号化されたリンクを確立するための重要な技術であり、ネットワーク上で送信されるデータが機密性を保ち、改ざんされないようにします。
手順
ステップ1. CircuitPython環境の準備
CircuitPythonのウェブサイトから最新のファームウェアをダウンロードします。
このガイド作成時点では、CircuitPython 9.1.0-beta.2バージョンを使用しました。
W5500-EVB-PicoのBOOTSELボタンを押しながら、ダウンロードしたuf2ファイルをアップロードします。
CIRCUITPYドライブが表示されるはずです。
必要なライブラリをダウンロードし、それらをCIRCUITPY\libフォルダにコピーします。
ステップ2. 証明書の取得
以下の指示はここで見つけました: 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ライブラリのEthernet例と上記のプルリクエストのテストコードを基に作成しました。
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を定義する際にコンパイルエラーが発生したため、ピンを直接指定しました。
結果
コードを実行すると、シェルに以下の結果が表示されます。
最終的に、CircuitPythonでイーサネットとSSLを使用できるようになりました。CircuitPythonコミュニティの皆さんに感謝します。
次のステップ
次のプロジェクトでは、AWSまたはAzureクラウドサービスへの接続を試みたいと考えています。
ドキュメント
code.py
- メインコード
詳細な情報は以下のURLからご覧いただけます:
URL: https://maker.wiznet.io/viktor/projects/testing-ssl-with-circuitpython-firmware-on-w5500-evb-pico-a-comprehensive-guide/