Open carloscn opened 5 months ago
在ls104x上,pkcs11是通过NXP开发的libsecure_obj来加载的。
完成openssl engine pkcs11的支持,需要配置两个地方:
交叉编译 libp11的库需要提前准备好,交叉编译的openssl的输出。
rm -rf libp11 git clone https://github.com/OpenSC/libp11 cd libp11 && ./bootstrap && \ ./configure --host=aarch64-linux-gnu --prefix=$(PWD)/libp11/libp11-aarch64/ --with-enginesdir=$(PWD)/libp11/libp11-aarch64/ \ OPENSSL_LIBS="-ldl -lpthread -lcrypto -L${OPENSSL_PATH}/lib" OPENSSL_CFLAGS="-g -O2 -I ${OPENSSL_PATH}/include" \ CC=${OPENWRT_DIR}/staging_dir/toolchain-aarch64_generic_gcc-11.2.0_glibc/bin/aarch64-openwrt-linux-gnu-gcc \ CXX=${OPENWRT_DIR}/staging_dir/toolchain-aarch64_generic_gcc-11.2.0_glibc/bin/aarch64-openwrt-linux-gnu-g++ \ LD=${OPENWRT_DIR}/staging_dir/toolchain-aarch64_generic_gcc-11.2.0_glibc/bin/aarch64-openwrt-linux-gnu-ld cd libp11 && make -j8 && make install
编译完成之后,把这些so文件放入以下: (假设sec_rootfs是你的rootfs根目录)
mkdir -p sec_rootfs/usr/share/lib cp -rfv ${PWD}/libp11/libp11-aarch64/lib/* sec_rootfs/usr/share/lib/ cp -rfv ${PWD}/libp11/libp11-aarch64/*.so sec_rootfs/usr/lib/engines-1.1/pkcs11.so
vim /etc/ssl/openssl.cnf
[openssl_init] engines=engine_section [engine_section] pkcs11 = pkcs11_section [pkcs11_section] engine_id = pkcs11 dynamic_path = /usr/lib/engines-1.1/libpkcs11.so MODULE_PATH = /usr/lib/libpkcs11.so init = 0
使用openssl engine pkcs11 -t 测试:
openssl engine pkcs11 -t
之后我们就可以正常使用engine pkcs11了。
https://github.com/carloscn/ls104x-bsp/tree/master/sign_cert
由于NXP的实现的HSM基于TEE环境,因此需要启动tee-supplicant
tee-supplicant
sobj_app -C -f rsa_key_2048.pem -k rsa -o pair -s 2048 -l "tcu_key" -i 0
查看私钥url:
p11tool --provider /usr/lib/libpkcs11.so --list-privkeys
在这里可以copy URL作为tcu sign工具入参。
./tcu_sign_tool.elf --init -u "pkcs11:model=PKCS11-OP-TEE;manufacturer=NXP;serial=1;token=tcu_key;id=%00%00%00%00;object=tcu_key;type=private"
为了测试签csr的功能,我们这里假设手机生成的csr,所以我们需要使用openssl生成私钥和csr。
openssl genpkey -algorithm RSA -out xtaxi_app_private.pem -pkeyopt rsa_keygen_bits:2048
openssl req -new -key xtaxi_app_private.pem -out xtaxi_app.csr
./tcu_sign_tool.elf --sign -u "pkcs11:model=PKCS11-OP-TEE;manufacturer=NXP;serial=1;token=tcu_key;id=%00%00%00%00;object=tcu_key;type=private" -f xtaxi_app.csr -o xtaxi_app_cert.pem
./tcu_sign_tool.elf --verify -u "pkcs11:model=PKCS11-OP-TEE;manufacturer=NXP;serial=1;token=tcu_key;id=%00%00%00%00;object=tcu_key;type=private" -f xtaxi_app_cert.pem
./tcu_sign_tool.elf --clean
在ls104x上,pkcs11是通过NXP开发的libsecure_obj来加载的。
完成openssl engine pkcs11的支持,需要配置两个地方:
OpenSC的libp11库交叉编译
交叉编译 libp11的库需要提前准备好,交叉编译的openssl的输出。
编译完成之后,把这些so文件放入以下: (假设sec_rootfs是你的rootfs根目录)
目标硬件OpenSSL配置
vim /etc/ssl/openssl.cnf
使用
openssl engine pkcs11 -t
测试:之后我们就可以正常使用engine pkcs11了。
2. 签名工具
https://github.com/carloscn/ls104x-bsp/tree/master/sign_cert
2.1 启动tee-supplicant
由于NXP的实现的HSM基于TEE环境,因此需要启动
tee-supplicant
2.2 生成私钥在HSM环境
sobj_app -C -f rsa_key_2048.pem -k rsa -o pair -s 2048 -l "tcu_key" -i 0
查看私钥url:
p11tool --provider /usr/lib/libpkcs11.so --list-privkeys
在这里可以copy URL作为tcu sign工具入参。
2.3 初始化生成rootca和公钥
./tcu_sign_tool.elf --init -u "pkcs11:model=PKCS11-OP-TEE;manufacturer=NXP;serial=1;token=tcu_key;id=%00%00%00%00;object=tcu_key;type=private"
2.4 假设生成某个csr
为了测试签csr的功能,我们这里假设手机生成的csr,所以我们需要使用openssl生成私钥和csr。
openssl genpkey -algorithm RSA -out xtaxi_app_private.pem -pkeyopt rsa_keygen_bits:2048
openssl req -new -key xtaxi_app_private.pem -out xtaxi_app.csr
2.5 签csr
./tcu_sign_tool.elf --sign -u "pkcs11:model=PKCS11-OP-TEE;manufacturer=NXP;serial=1;token=tcu_key;id=%00%00%00%00;object=tcu_key;type=private" -f xtaxi_app.csr -o xtaxi_app_cert.pem
2.6 验证签发的证书
./tcu_sign_tool.elf --verify -u "pkcs11:model=PKCS11-OP-TEE;manufacturer=NXP;serial=1;token=tcu_key;id=%00%00%00%00;object=tcu_key;type=private" -f xtaxi_app_cert.pem
2.7 清除rootca和公钥
./tcu_sign_tool.elf --clean