主题中讨论的其他器件:UNIFLASH、 CC31XXEMUBOOST、 CC3135
我使用 BOOSTXL 板作为主(ST)开发套件的外部网络处理器。 我的嵌入式系统是 WebSocket 客户端、通过升压 WiFi 连接连接到 WebSocket 服务器(Python)。 我遇到的问题是、当我在服务器上实施双向身份验证时、TLS 握手在证书验证阶段失败。 在未启用双向身份验证的情况下、所有功能均按预期工作。 实际上、我有一个第二个嵌入式系统、它使用相同的固件、相同的过程来生成证书等、可以与双向验证配合使用 我已经指出了系统之间的差异、没有什么突出的。
为了排除 Python 服务器、我使用了 openssl s_server、这确认了相同的故障。 我的固件从 sl_connect 获取 sl_error_bSD_ESEC_decrype_err1 (-351)返回代码、正如预期的那样、出现此错误。
相关详细信息:
- 我创建了自己的自签名 CA
- 我的固件使用 simplelink API 生成 CSR on 命令
- 对于速度(这是原型系统设计 ATM)、这是我在生成 CSR 后提供升压的方法:
- 使用 CC31XXEMUBOOST 板和 UniFlash、我读出 CSR 文件
- 使用我的 CA 签署 CSR
- 抓住机会将最新的 Service Pack 添加到要写入的新映像中
- 将已签名证书添加到新映像(\custom\mycert.pem)
- 添加 CA (\custom\MyCa.pem)
- 刷写升压
- 命令固件生成 CSR (再次)-这会导致在新刷写的升压文件系统上创建器件唯一密钥对文件
- 在固件中、在连接之前、请使用 setsockopt:
- 指定自定义 CA 文件
- 指定自定义证书
- 指定默认系统私钥文件(/sys/cert/iot/key.der)
- 禁用受信任根证书存储(sl_SO_SECURE_DISABLE_CERTIFICATE_STORE)
- 在固件引导时、我打印(ls)升压文件系统、并可以确认是否存在 key.der、自定义 CA 和 cert
- 查看 openssl 服务器在尝试建立连接时的调试输出,升压器发送的证书与系统上最初创建的证书相匹配。
- 我可以使用 openssl 根据 CA 验证证书
- 服务器似乎正在选择密码套件 ECDHE-ECDSA-AES128-SHA256
- 嵌入式认证(在升压模式下)具有 EC P256公钥和使用 SHA256及 RSA 的签名
- 我的 CA 证书公钥是2048位 RSA、它的签名是带有 RSA 的 SHA256
- 我传递给 openssl 的服务器证书具有 EC P256公钥和 SHA256 RSA 签名(也由我的 CA 签名)
- 执行客户端和服务器 hello、交换证书、协商密码、当 BOOST 发送签名验证签名时、服务器发回 decrype_error 警报。
- CC3135硬件/固件详细信息:
- 芯片 ID 823132160
- MAC 3.7.0.1
- PHY 3.1.0.26
- NWP 4.10.0.1
- ROM 8738
- 主机3.0.1.71 (来自 simplelink_cc32xx_sdk_5_10_00_02)
我在这里遗漏了什么?
我唯一能看到的是、simplelink CSR 示例中的注释表明仅支持证书 v3、我的证书是 v1 -我需要在将 CSR 签名为 make is v3时提供一些扩展信息。 我怀疑在这种情况下会出现证书错误、我始终假设仅 v3支持与 Boost 上的自签名证书生成相关。
以下是 openssl 提供的有关所使用的各种认证的一些(编辑的)详细信息:
大约
证书:
数据:
版本:3 (0x2)
序列号:
35:75:...
签名算法:sha256WithRSAEncryption
颁发者:C = GB、ST =..、L =..、O =..、CN = MyCa、 电子邮件地址=..
有效性
不是以前:2021年5月19日15:38:13 GMT
不在5月17日15:38:132031格林尼治标准时间之后
主题:C = GB、ST =..、L =..、O =..、CN = MyCa、 电子邮件地址=..
主题公共密钥信息:
公钥算法:rsaEncryption
RSA 公钥:(2048位)
模量:
00:B1:df:14:87:24:1b:1a:ed:E5:7b:B7:2f:68:C2:
(笑声)
D9:C9:aa:af:C1:69:21:76:AC:29:95:23:df:bc:62:
97:CB
指数:65537 (0x10001)
X509v3扩展:
X509v3使用者密钥标识符:
3c:...
X509v3授权密钥标识符:
密钥 ID:3C:7...
X509v3基本约束:关键
CA:true
签名算法:sha256WithRSAEncryption
89:35:80:2a:98:AC:8a:2e:0c:00:67:16:3a:41:1c:A6:66:A3:
(笑声)
9C:CA:E7:A3
提升 CSR
证书请求:
数据:
版本:3 (0x2)
主题:C = GB、ST =..、L =..、SN =..、O =..、 OU =..、CN =.. ..、emailAddress =..
主题公共密钥信息:
公钥算法:ID-ecPublicKey
公钥:(256位)
出版:
04:90:31:60:B8:1a:05:A7:91:99:C1:B7:af:A6:44:
(笑声)
Ae:31:4b:66:41
ASN1 OID:prime256v1
NIST 曲线:P-256
属性:
A0:00
签名算法:ECDSA-带 SHA1
30:45:02:21:00:C8:73:B8:84:bb:3a:10:36:76:CD:b0:21:7f:
(笑声)
79:C3:28:A6:90:C7:45:1D:a0:E5:60:b9:04:9c:A1:8d:B3
升压陶瓷
证书:
数据:
版本:1 (0x0)
序列号:
30:1f...
签名算法:sha256WithRSAEncryption
颁发者:C = GB、ST =..、L =..、O =..、CN = MyCa、 电子邮件地址=..
有效性
不是以前:2021年6月16日13:26:59 GMT
不在5月23日13:26:592121 GMT 之后
主题:C = GB、ST =..、L =..、SN =..、O =..、 OU =..、CN =.. ..、emailAddress =..
主题公共密钥信息:
公钥算法:ID-ecPublicKey
公钥:(256位)
出版:
04:90:31:60:B8:1a:05:A7:91:99:C1:B7:af:A6:44:
(笑声)
Ae:31:4b:66:41
ASN1 OID:prime256v1
NIST 曲线:P-256
签名算法:sha256WithRSAEncryption
53:B5:3D:b4:5F:D4:73:44:64:31:ed:8b:ff:89:12:E1:69:97:
(笑声)
3D:C6:af:19
服务器认证
证书:
数据:
版本:1 (0x0)
序列号:
30:1f:84:ce:61:CB:18:5F:E7:6B:9c:70:18:5a:23:dc:5e:58:ee:8d
签名算法:sha256WithRSAEncryption
颁发者:C = GB、ST =..、L =..、O =..、CN = MyCa、 电子邮件地址=..
有效性
不是以前:2021年6月4日13:06:02 GMT
不在:2022年6月4日13:06:02 GMT
主题:C = GB、ST =..、L =..、O =..、OU =..、 cn = 192.168.1.91、emailAddress =.
主题公共密钥信息:
公钥算法:ID-ecPublicKey
公钥:(256位)
出版:
04:bc:76:b4:6c:84:BA:db:4D:E3:b4:9d:83:2e:28:
(笑声)
E4:B3:1b:E5:75
ASN1 OID:prime256v1
NIST 曲线:P-256
签名算法:sha256WithRSAEncryption
48:12:F7:8f:39:9e:44:cc:37:23:48:92:A8:7a:70:71:A2:fa:
(笑声)
dB:90:20:7f
OpenSSL Server 调试输出:
openssl s_server -port 12345 -cert Server\192.168.1.91\192.168.1.91.crt -key Server\192.168.1.91\localDevelopmentServer.key -verifyCAfile "myca\myca.pem" -debug -msg -security_debug_verbose -Verify 2
验证深度为2、必须返回证书
使用默认的 temp DH 参数
安全回调:证书链 EE key=EC、bits=256、安全位=128:是
安全回调:证书链 CA 摘要=RSA-SHA256、安全位=128:是
接受
安全回调:版本=TLS 1.3:是
安全回调:版本=TLS 1.3:是
安全回调:版本=TLS 1.2:是
安全回调:版本=TLS 1.1:是
安全回调:版本=TLS 1.0:是
从0x6000adf40读取[0x6001b3153](5字节=> 5 (0x5))
0000 - 16 03 03 00 83…
<<<??? [长度0005]
16 03 03 00 83
从0x6000adf40读取[0x6001b3158](131字节=> 131 (0x83))
0000 - 01 00 00 7f 03 03 99 00-4D 65 E3 19 b9 da 17 ea 我
(笑声)
0080 - 01 02 01...
<<< TLS 1.3、握手[length 0083]、ClientHello
01 00 00 7f 03 99 00 4D 65 E3 19 b9 da 17 ea
(笑声)
01 02 01
安全回调:版本=TLS 1.2:是
安全回调:版本=TLS 1.3:是
安全回调:是的
安全回调:共享签名算法方案=ecdsa_secp521r1_SHA512、安全位=256:是
安全回调:共享签名算法方案=ecdsa_secp384r1_sha384、安全位=192:是
安全回调:共享签名算法方案=ecdsa_secp256r1_SHA256、安全位=128:是
安全回调:共享签名算法方案=ecdsa_sha1、安全位=80:是
安全回调:共享签名算法方案=RSA_pkcs1_SHA512、安全位=256:是
安全回调:共享签名算法方案=rs_pkcs1_sha384、安全位=192:是
安全回调:共享签名算法方案=RSA_pkcs1_SHA256、安全位=128:是
安全回调:共享签名算法方案=RSA_pkcs1_SHA1、安全位=80:是
安全回调:共享签名算法方案=ecdsa_secp521r1_SHA512、安全位=256:是
安全回调:共享签名算法方案=ecdsa_secp384r1_sha384、安全位=192:是
安全回调:共享签名算法方案=ecdsa_secp256r1_SHA256、安全位=128:是
安全回调:共享签名算法方案=ecdsa_sha1、安全位=80:是
安全回调:共享签名算法方案=RSA_pkcs1_SHA512、安全位=256:是
安全回调:共享签名算法方案=rs_pkcs1_sha384、安全位=192:是
安全回调:共享签名算法方案=RSA_pkcs1_SHA256、安全位=128:是
安全回调:共享签名算法方案=RSA_pkcs1_SHA1、安全位=80:是
安全回调:检查 Curve = P-256、安全位= 128:是
安全回调:共享曲线=P-256、安全位=128:是
安全回调:共享密钥套件=ECDHE-ECDSA-AES128-SHA256、安全位=128:是
>>>??? [长度0005]
16 03 03 00 4a
>> TLS 1.2、握手[长度004A]、ServerHello
02 00 00 46 03 15 1a 87 08 5a 9d F9 44 4F 10.
(笑声)
D2 bc ea 91 95 3D CB c0 23 00
安全回调:证书链 EE key=EC、bits=256、安全位=128:是
安全回调:证书链 CA 摘要=RSA-SHA256、安全位=128:是
>>>??? [长度0005]
16 03 02 dd
>> TLS 1.2、握手[length 02dd]、证书
0b 00 02 D9 00 02 d6 00 02 D3 30 82 02 CF 30 82
(笑声)
00 1a 8c F7 78 Fe aa 80 AD db 90 20 7f
安全回调:共享曲线=P-256、安全位=128:是
>>>??? [长度0005]
16 03 03 00 93
>> TLS 1.2、握手[length 0093]、ServerKeyExchange
0C 00 00 8f 03 00 17 41 04 70 8f 93 B3 26 A2 71
(笑声)
EF 6F 64
安全回调:签名算法掩码方案=ecdsa_secp256r1_SHA256、安全位=128:是
安全回调:签名算法掩码方案=RSA_PSS_PSS_SHA256、安全位=128:是
安全回调:签名算法掩码摘要= SHA224、算法= DSA、安全位= 112:是
安全回调:支持的签名算法方案=ecdsa_secp256r1_SHA256、安全位=128:是
安全回调:支持的签名算法方案=ecdsa_secp384r1_sha384、安全位=192:是
安全回调:支持的签名算法方案=ecdsa_secp521r1_SHA512、安全位=256:是
安全回调:支持的签名算法方案=RSA_PSS_PSS_SHA256、安全位=128:是
安全回调:支持的签名算法方案=RSA_PSS_PSS_SHA384、安全位=192:是
安全回调:支持的签名算法方案=RSA_PSS_PSS_SHA512、安全位=256:是
安全回调:支持的签名算法方案=RSA_PSS_rsae_SHA256、安全位=128:是
安全回调:支持的签名算法方案=RSA_PSS_rsae_sha384、安全位=192:是
安全回调:支持的签名算法方案=RSA_PSS_rsae_SHA512、安全位=256:是
安全回调:支持的签名算法方案=RSA_pkcs1_SHA256、安全位=128:是
安全回调:支持的签名算法方案=rsa_pkcs1_sha384、安全位=192:是
安全回调:支持的签名算法方案=RSA_pkcs1_SHA512、安全位=256:是
安全回调:支持的签名算法摘要= SHA224、算法= ECDSA、安全位= 112:是
安全回调:支持的签名算法方案=ecdsa_sha1、安全位=80:是
安全回调:支持的签名算法摘要= SHA224、算法= RSA、安全位= 112:是
安全回调:支持的签名算法方案=RSA_pkcs1_SHA1、安全位=80:是
安全回调:支持的签名算法摘要= SHA224、算法= DSA、安全位= 112:是
安全回调:支持的签名算法摘要=SHA1、算法=DSA、安全位=80:是
安全回调:支持的签名算法摘要= SHA256、算法= DSA、安全位= 128:是
安全回调:支持的签名算法摘要= SHA384、算法= DSA、安全位= 192:是
安全回调:支持的签名算法摘要= SHA512、算法= DSA、安全位= 256:是
>>>??? [长度0005]
16 03 03 00 3a
>> TLS 1.2、握手[length 003A]、证书请求
0D 00 00 36 03 01 02 40 00 2e 04 03 05 03 06 03
(笑声)
02 02 04 02 02 05 02 06 02 00 00
>>>??? [长度0005]
16 03 03 00 04
>> TLS 1.2、握手[length 0004]、ServerHelloDone
0E 00 00 00
写入0x6000adf40 [0x6001bc370](1041字节=> 1041 (0x411))
0000 - 16 03 00 4a 02 00 00-46 03 03 15 1a 87 08 5a... J.... F. Z
(笑声)
0400 - 04 02 05 02 06 02 00 00-16 03 00 04 0e 00 ........
0410-00。
从0x6000adf40读取[0x6001b3153](5字节=> 5 (0x5))
0000 - 16 03 03 03 03 08…
<<<??? [长度0005]
16 03 03 03 03 08
从0x6000adf40 [0x6001b3158](776字节=> 776 (0x308))读取
0000 - 0b 00 03 04 00 03 01 00-02 Fe 30 82 02 fa 30 82…………………………………………………………… 0...0。
(笑声)
0300 - 66 10 16 7a 3D C6 af 19 - f.z=……
<<< TLS 1.2、握手[length 0308]、证书
0b 00 03 04 00 03 01 00 02 Fe 30 82 02 fa 30 82
(笑声)
66 10 16 7a 3D C6 af 19
dept=1 C = GB、ST =..、L =..、O =..、CN = MyCa、 电子邮件地址=..
验证返回:1
dept=0 C = GB、ST =..、L =..、SN =..、O =..、 OU =..、CN =.. ..、emailAddress =..
验证返回:1
从0x6000adf40读取[0x6001b3153](5字节=> 5 (0x5))
0000 - 16 03 03 00 46... F
<<<??? [长度0005]
16 03 03 00 46
从0x6000adf40 [0x6001b3158](70字节=> 70 (0x46))读取
0000 - 10 00 00 42 41 04 AD 9d-F5 63 2c 98 A5 50 83 c0……ba... c、..
(笑声)
0040 - E2 35 75 24 A8 57 .5u$.W
<<< TLS 1.2、握手[length 0046]、ClientKeyExchange
10 00 00 42 41 04 AD 9d F5 63 2c 98 A5 50 83 c0
(笑声)
E2 35 75 24 A8 57
从0x6000adf40读取[0x6001b3153](5字节=> 5 (0x5))
0000 - 16 03 03 00 4F……O
<<<??? [长度0005]
16 03 03 00 4F
从0x6000adf40读取[0x6001b3158](79字节=> 79 (0x4F))
0000 - 0f 00 00 4b 04 03 00 47-30 45 02 21 00 8c D2 39……K... G0E...9.
(笑声)
0040 - F4 03 35 64 B6 91 98 34-98 d6 55 96 54 15 F8 ..5d...4.U.T..
<<< TLS 1.2、握手[length 004f]、证书验证
0f 00 00 4b 04 03 00 47 30 45 02 21 00 8c D2 39
(笑声)
F4 03 35 64 B6 91 98 34 98 d6 55 96 54 15 F8
安全回调:检查 Curve = P-256、安全位= 128:是
安全回调:检查签名算法方案=ecdsa_secp256r1_SHA256、安全位=128:是
>>>??? [长度0005]
15 03 03 00 02
写入0x6000adf40 [0x6001bc370](7字节=> 7 (0x7))
0000 - 1503 03 00 02 02 33 ...... 3.
>> TLS 1.2、警报[length 0002]、fatal decring_error
02 33.
误差
25769902144:错误:1417B07B:SSL 例程:TLS_PROCESS_CERT_VERIFY:错误签名:SSL/STATEM/STATEM_lib.c:505:
正在关闭 SSL
连接已关闭