使用 WIZnet 的 W5100S-EVB-Pico 板,我将总结使用 X.509 证书连接到 Azure IoT Central 的内容。
W5100S-EVB-Pico 是一款基于 Raspberry Pi 最近发布的 RP2040 微控制器芯片和 WIZnet 以太网芯片 W5100S 的评估板。
可以和树莓派Pico平台在同一个环境下开发,通过W5100S可以使用以太网。您可以参考下面的链接了解设备信息。
硬件设置很简单。
只需连接微型 5 针电缆即可为 W5100S-EVB-Pico 供电。
此外,为了使用网络,我使用以太网电缆连接到支持 DHCP 服务器的 AP。
有关设置开发环境的信息在官方文档(入门指南)中。
我参考了文档的 Windows 和 Visual Studio Code 环境部分。
可以在下面的链接中找到该文档。
开发环境配置在指南中有很好的描述,大家可以根据自己的开发环境进行操作。
要检查的一件事是安装和使用 Visual Studio 2019 的构建工具。如果通过 VS 命令提示符运行 VS Code,则可以使用相关工具。
起初,我尝试在不检查这部分的情况下进行构建,但它一直失败,所以我再次阅读指南并应用了内容。
必须先安装 Visual Studio 构建工具。
使用开发人员命令提示符运行 VS Code
要使用 Visual Studio 的构建环境,请通过Developer Command Prompt for VS 2019
以下方式运行 VS Code:
这将打开设置了所有正确环境变量的 Visual Studio Code,以便正确配置工具链。
VS 代码设置
要构建 VS Code 设置,CMake 和 Pico SDK 路径设置如下。
"cmake.cmakePath": "C:\\Program Files\\CMake\\bin\\cmake.exe",
"cmake.configureSettings": {
"PICO_SDK_PATH": "D:\\_RaspberryPi_Pico\\pico-sdk"
},
Github 存储库
代码使用了WIZnet提供的RP2040-HAT-AZURE-C项目。
使用 git 命令将项目克隆到本地 PC。
git clone https://github.com/Wiznet/RP2040-HAT-AZURE-C
通过 Developer Command Prompt 运行 VS code,然后通过 Open Folder 菜单打开项目目录。
借助 IoT Central 试用计划(7 天),您无需订阅 Azure 即可创建和使用应用程序。
7 天后需要 Azure 订阅。
有关详细信息,请参阅 MS Azure 指南。
生成用于设备身份验证的 X.509 证书。我使用了 OpenSSL,请参阅下面的指南。
我将在下面生成证书并将它们输入到 IoT Central 应用程序和设备代码中。
为了使用 OpenSSL 命令,我使用了 WSL(Linux 的 Windows 子系统)环境。
用于创建根 CA 和子 CA 的 .conf 文件按原样使用指南中的内容,仅更改了名称。
根 CA 设置和创建
~$ mkdir rootca
~$ cd rootca/
~/rootca$ mkdir certs db private
~/rootca$ touch db/index
~/rootca$ openssl rand -hex 16 > db/serial
~/rootca$ echo 1001 > db/crlnumber
*# Change certificate name (commonName)**
~/subca$ vi rootca.conf
~/rootca$ openssl req -new -config rootca.conf -out rootca.csr -keyout private/rootca.key
~/rootca$ openssl ca -selfsign -config rootca.conf -in rootca.csr -out rootca.crt -extensions ca_ext
子证书设置和创建
~/rootca$ cd ..
~$ ls
~$ mkdir subca
~$ cd subca/
~/subca$ mkdir certs db private
~/subca$ touch db/index
~/subca$ openssl rand -hex 16 > db/serial
~/subca$ echo 1001 > db/crlnumber
# Change certificate name (modify commonName value)
~/subca$ vi subca.conf
~/subca$ openssl rand -hex 16 > ../rootca/db/serial
~/subca$ openssl req -new -config subca.conf -out subca.csr -keyout private/subca.key
~/subca$ openssl ca -config ../rootca/rootca.conf -in subca.csr -out subca.crt -extensions sub_ca_ext
占有证明(验证证书)
之前在 IoT Central 中创建的注册。subca.crt
单击新建按钮 → 创建新的注册组
如果单击“保存”按钮进行保存,注册证书的屏幕将出现在底部。
单击“管理主要”按钮后,单击文件夹形状的图标以上传证书。
上传subca.crt
点击生成验证码按钮生成并复制验证码。
使用 OpenSSL 生成经过验证的证书。此时输入生成的验证码。
~/subca$ openssl genpkey -out pop.key -algorithm RSA -pkeyopt rsa_keygen_bits:2048
~/subca$ openssl req -new -key pop.key -out pop.csr
****Paste the verification code into Common Name**
~/subca$ openssl ca -config subca.conf -in pop.csr -out pop.crt -extensions client_ext
单击验证按钮后,从出现的文件选择弹出窗口中选择生成的验证证书。
(如果看不到文件,请选择查看所有文件的选项)
所有权证明完成后,状态将更改为已验证,如上面的屏幕所示。
现在组注册已完成,将创建要在设备上使用的证书。
设备证书
$ openssl genpkey -out device.key -algorithm RSA -pkeyopt rsa_keygen_bits:2048
$ openssl req -new -key device.key -out device.csr
==> Common Name (e.g. server FQDN or YOUR name) []: Enter w5100s-evb-pico-01
$ openssl req -text -in device.csr -noout
$ openssl ca -config subca.conf -in device.csr -out device.crt -extensions client_ext
在代码编写过程中,将创建设备证书文件并将其添加为变量。
修改并执行一些应用程序代码。
修改主代码
设置要在主代码中使用的示例应用程序。
由于我们将使用 X.509 证书进行配置,因此我们将其定义为APP_PROV_X509
.
// The application you wish to use should be uncommented
//
//#define APP_TELEMETRY
//#define APP_C2D
//#define APP_CLI_X509
#define APP_PROV_X509
修改 sample_certs 代码
生成的设备证书必须作为变量添加到 sample_certs.c。
用于连接 IoT Central X.509 证书身份验证的变量如下。
对于 pico_az_COMMON_NAME,使用与创建设备证书时写入的 Common Name 相同的值。
将证书文件转换为变量(使用 Bash shell)
要将证书值作为变量添加到设备源代码中,必须将值转换为变量形式。
可以用VS Code打开文件直接编辑,但是每次都编辑文件比较麻烦,所以我使用了MS Guide提供的脚本。
详细信息可以在下面的链接中找到。
一旦将脚本中的输入更改为目标文件名并将其按原样粘贴到 shell 中,就会以变量的形式输出结果值。要更改参数的路径,只需更改输入部分。
用 Vim 创建一个脚本文件 (.sh) 并使用它。
创建证书转换脚本
$ vi convert_cert.sh
input=$1
bContinue=true
prev=
while $bContinue; do
if read -r next; then
if [ -n "$prev" ]; then
echo "\"$prev\\n\""
fi
prev=$next
else
echo "\"$prev\";"
bContinue=false
fi
done < "$input"
运行脚本
$ chmod +x convert_cert.sh
$ ./convert_cert.sh
密钥文件也可以用同样的方法进行转换。
将证书更新为代码
将相应的值放入sample_cert.c
文件中。
const char pico_az_id_scope[] = "";
const char pico_az_COMMON_NAME[] = "w5100s-evb-pico-01";
const char pico_az_CERTIFICATE[] =
"-----BEGIN CERTIFICATE-----\n"
"MIIDQDCCAiigAwIBAgIPAoh1JOyCoN2l8TasygP2MA0GCSqGSIb3DQEBCwUAMCUx\n"
...
"3agwSktbbJYEpQt2sZrdgIf5V3RsZH2/wZtLBBiVFismcVVEgY2qnBQXNxyQcc0z\n"
"9Vz3OITjhrWKTMkF0l/TNiy4eEU=\n"
"-----END CERTIFICATE-----";
const char pico_az_PRIVATE_KEY[] =
"-----BEGIN PRIVATE KEY-----\n"
"MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDpHayE/0vdXbp2\n"
...
"W10KeONpLN+MyMr0fDgsHb6Bc5Re/S4s+CgprfvxiHLgQSFlb1wfCXG3xvuqgJk+\n"
"vrEySFLI2uifS0f64HLVtAPe\n"
"-----END PRIVATE KEY-----";
建造
单击 VS Code 底部的 Build 按钮或按快捷键 **F7** 进行构建。
第一次构建可能需要几分钟才能完成。
[main] Building folder: RP2040-HAT-AZURE-C
[build] Starting build
[proc] Executing command: "C:\Program Files\CMake\bin\cmake.exe" --build d:/_RaspberryPi_Pico/RP2040-HAT-AZURE-C/build --config Debug --target all -j 10 --
[build] Warning: NMake does not support parallel builds. Ignoring parallel build command line option.
[build] [ 0%] Built target bs2_default
[build] [ 1%] Built target bs2_default_padded_checksummed_asm
[build] [ 12%] Built target mbedcrypto
...
...
[build] [ 97%] Built target LOOPBACK_FILES
[build] [ 97%] Built target FTPSERVER_FILES
[build] [ 98%] Built target HTTPSERVER_FILES
[build] [100%] Built target MQTT_FILES
[build] Build finished with exit code 0
构建成功完成后,将在构建目录中创建输出。
W5100S-EVB-Pico 中使用的固件是 main.uf2 文件。
上传固件
通过以下步骤将固件复制到设备。
在按下 W5100S-EVB-Pico 的BOOTSEL 按钮的同时,通电使其进入存储模式。
将main.uf2
文件复制到驱动器的顶级路径。
检查在 IoT Central 中创建的设备
确认设备创建
检查示例代码发送的示例数据
可以使用 Terra Term 或 Putty 等终端程序监控设备运行状态。
在Windows设备管理器中查看W5100S-EVB-Pico对应的COM端口号,在终端程序中设置对应的端口进行连接。
在 Terra Term 的情况下,您可以通过如下设置进行连接。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !