This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3235MODASF:从CC3235转储SSL证书

Guru**** 2386560 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1098819/cc3235modasf-dumping-ssl-certificates-from-the-cc3235

部件号:CC3235MODASF

我继承了一个项目,其中3235通过MQTTS (又称基于TLS的MQTT)连接到MQTT服务器。 原来的维护人员已经离开了,留下的文档也很少。

我们怀疑3235的安全证书即将到期。 我有一些原开发者可能使用过的证书,但我没有证据证明它们是正确的证书。 由于这是在固件中,因此要将客户端证书提取到PC上需要花费大量的精力。

现在我记得在我的Java时代,有一个程序允许您在将客户端连接到该服务器时捕获服务器端证书。 我希望我也能这样做,使用openssl捕获与运行openssl s_server的PC的客户端连接,并将客户端证书转储出去,以便我可以查看内容。

到目前为止,我已经有了以下命令:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keout cert.key cert.pem -subj "/CN=MN4-WJOHNSON.dccmn.com -addext "subjectAltName=IP:192.168 .2.77 "

生成服务器证书(如果没有服务器证书,3235将无法连接)

openssl s_server -debug -port 443 -verify 2 -key cert.key -cert cert.pem -msg -security_debug_verbose

客户端似乎已连接,但关闭时显示:

SL_ERROR_BSD_ESEC_ASIN_NO_signer_E (-688L)/* ASN无签署人确认失败*/

这是否意味着它不会与自签名证书连接?  我正在使用AT_COMMAND应用程序。  我看不到将驱动程序配置为接受自签名证书的方法。  我还在尝试用虚拟根ca-cert签署证书  这是否有效?  如何使用虚拟证书签署我的自签名证书?

还有其他想法吗?  谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当设备连接到服务器时,您需要在 设备闪存中安装服务器的根CA证书(即不是服务器的证书,而是签署链的自签名根证书),并将其链接到MQTT连接参数。

    根CA使用的-688不是签署服务器证书的那个(如果您没有更新此信息,则服务器可能更新了其证书,因此需要另一个根CA)

    有关  查找连接的正确根CA的说明,请参阅CC32xx证书处理指南中的2.5 第1章。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我理解。  我们不能使用自签名证书,因为3235上的根CA证书是用于我们的CA的。  3235上还有dum-root-ca-cert。  我一直在尝试创建一个使用dummy-root-ca-cert签署的服务器证书  您是否对如何做到这一点有任何建议/说明?  因为伪根ca-cert被标记为代码签名,所以不能执行此操作?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此外,此"驱动程序"3235软件是否可作为源软件在任何位置获得?  我尝试搜索SL_ERROR_BSD_ESEC_ASIN_NO_SEIENT_E,但找不到命中结果。  对于这些错误代码,几乎没有什么可供解释的内容。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果只是将其用于开发(不要将虚拟证书用于生产),则可以将虚拟可信证书用作服务器的证书(以及可信CA证书来完成该链)-此链由虚拟根CA证书签署  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    simplelink "wi-fi"驱动程序位于source/ti/drivers/net/wifi/下

    错误代码在"errors.h"中定义

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的,我知道error.h,但是这个定义在其他地方都没有使用。  设置该错误代码的代码在哪里?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    也许我误解了你。  我尝试了trusted-cert:

    $ openssl s_server -debug -port 443 -verify 2 -key dum-trusted-cert-key -cert dum-trusted-cert -msg -security_debug_verbose
    确认深度为2
    无法加载服务器证书私钥文件
    34.3597万38384:3.8384万:错误:90.9006万C:PEM例程:Get_name:no start line: crypto/pem/pem_lib.c:745:期望:任何私钥

    $ openssl s_server -debug -port 443 -verify 2 -key dum-trusted-cert-key -keyform der -cert dummy trusted-cert -msg -security_debug_verbose
    确认深度为2
    无法加载证书
    34.3597万38384:3.8384万:错误:90.9006万C:PEM例程:Get_Name:无起始行:crypto/pem/pem_lib.c:745:期待:可信证书

    $ openssl s_server -debug -port 443 -verify 2 -key dummum-trusted-cert-key -keyform der -cert dummed-trusted-cert -msg -security_debug_verbose -cca文件dummed-root-ca-cert.pem
    确认深度为2
    无法加载证书
    34.3597万38384:3.8384万:错误:90.9006万C:PEM例程:Get_Name:无起始行:crypto/pem/pem_lib.c:745:期待:可信证书

    甚至只尝试了CA证书:

    $ openssl s_server -debug -port 443 -verify 2 -key dummy root-ca-cert-key -cert dummy root-ca-cert -msg -security_debug_verbose
    确认深度为2
    无法加载服务器证书私钥文件
    34.3597万38384:3.8384万:错误:90.9006万C:PEM例程:Get_name:no start line: crypto/pem/pem_lib.c:745:期望:任何私钥

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    错误来自NWP (您在主机驱动程序源中找不到它)。

    我不知道你想用openssl做什么。 如果您尝试将其作为服务器运行,则应提供完整的证书链(证书文件格式可能存在其他问题-请查看openssl文档)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我认为NWP代码不是公开的。  我理解。  只是error.h上的评论并没有真正的帮助。

    我尝试的是将硬件指向我的PC上的openssl服务器。  硬件通常与Google GCP的服务器通信。  如果我可以创建连接,我可以捕获硬件发送到服务器的客户端证书,并验证它拥有的客户端证书以及证书过期的时间。  同时,我正在编写代码,以允许我们访问CC3235闪存中的文件(即证书)。  只是我们必须开发一个相当大的基础设施,以便将这些文件检索到PC平台上。  我们必须通过另一个SBC,然后通过USB HID接口将数据传递出去。  

    感谢你的所有帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是否有任何待定问题或我可以关闭此线程?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    正如我前面所说的,我正在尝试通过在服务器端使用虚拟证书的所有变体来充当此芯片的服务器。  在某些情况下,我会收到此SL_ERROR_BSD_ESEC_ASIN_NO_signer_E 错误。  openssl s_server会拒绝其它dumb*证书,并出现各种错误。  我正在寻找一些有关如何最好地使用TLS将我们的CC3235连接到openssl s_server的指导。  

    有一次我看到虚拟根证书有一个代码签名指示符。  这是否会阻止它与TLS一起使用?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    使用TI文档之一中的证书交换图片:

    这里我尝试模拟服务器,以便通过使用服务器的PC捕获步骤5中发送的客户端证书。  我进入图表中的步骤3,其中openssl正在尝试发送服务器证书,但NXP芯片拒绝了该证书并出现上述错误,或者openssl在启动之前拒绝了提供的服务器证书。  

    我尝试了OpenSSL上的自签名证书以及所有的虚拟证书。  我还尝试用虚拟根CA证书签署证书,但当我尝试签署证书时失败。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    但您的问题似乎在于 服务器证书的验证。 您安装的根CA不是签署服务器证书的CA。

    有关查找 正确根CA的信息,请参阅“cc32xx证书处理指南”中的2.5 第1章。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的,当我尝试创建一个证书并让openssl将其签名,openssl将返回一个错误。  我尝试在服务器上使用虚拟根ca-cert和虚拟可信ca-cert。  我尝试在CC3235客户端上更改我们的证书和虚拟根ca-cert。  我尝试用 虚拟根ca-cert签署证书并在服务器上使用它,但openssl似乎不像创建服务器证书的虚拟根ca-cert  我无法在CC3235上使用SL_so_secure禁用证书存储,因为我们正在使用AT Command应用程序,我没有看到任何方法在不修改AT Command应用程序的情况下通过AT命令设置。

    我已经多次重复了第2.5 章1。  我要寻找的只是一组正确的openssl命令,用于从dum-root-ca-cert和dum-root-ca-cert-key文件创建服务器证书,以便让CC3235连接到它。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    正如我之前提到的,您不需要创建此类证书。 伪可信证书就是这样的证书(由伪根ca-cert-key签名的伪可信ca-cert-key签名)。

    如果要创建链并自行签名(注意,它不会受到保护-因为dumdum-root-ca-cert-key是公共的),您可以检查以下链接: https://www.golinuxcloud.com/openssl-create-certificate-chain-linux/

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我相信我曾经尝试过,但我再次尝试,只是为了确保并记录结果:

    $ openssl x509 -in dummy-trusted-cert -inform der -out dummy-trusted-cert.pem -outform pem
    ...
    $ openssl s_server -debug -port 443 -verify 2 -key dummy-trusted-cert-key -keyform der -cert dummy-trusted-cert.pem -msg -security_debug_verbose

    然后尝试连接:
    1652194927.540 tx:
    1652194927.540 00000000 4154 2B4D 7174 7443 7265 6174 653D 7072  AT+MqttCreate=pr
    1652194927.540 00000010 6F6A 6563 7473 2F63 6F6E 6475 6374 6976  ojects/conductiv
    1652194927.540 00000020 652D 7365 742D 3235 3235 3231 2F6C 6F63  e-set-252521/loc
    1652194927.540 00000030 6174 696F 6E73 2F75 732D 6365 6E74 7261  ations/us-centra
    1652194927.540 00000040 6C31 2F72 6567 6973 7472 6965 732F 656B  l1/registries/ek
    1652194927.540 00000050 696E 6E65 782D 7374 6167 696E 672D 7265  innex-staging-re
    1652194927.540 00000060 6769 7374 7279 2F64 6576 6963 6573 2F63  gistry/devices/c
    1652194927.540 00000070 6172 6546 6974 2D31 6B69 6875 6163 6D63  areFit-1kihuacmc
    1652194927.550 00000080 2C5B 7572 6C7C 7365 637C 736B 6970 5F63  ,[url|sec|skip_c
    1652194927.550 00000090 6572 745F 7665 7269 6679 5D2C 4D4E 342D  ert_verify],MN4-
    1652194927.550 000000A0 574A 4F48 4E53 4F4E 2E64 6363 6D6E 2E63  WJOHNSON.dccmn.c
    1652194927.550 000000B0 6F6D 2C34 3433 2C54 4C53 5631 5F32 2C54  om,443,TLSV1_2,T
    1652194927.550 000000C0 4C53 5F45 4344 4845 5F45 4344 5341 5F57  LS_ECDHE_ECDSA_W
    1652194927.550 000000D0 4954 485F 4145 535F 3132 385F 4743 4D5F  ITH_AES_128_GCM_
    1652194927.550 000000E0 5348 4132 3536 7C54 4C53 5F52 5341 5F57  SHA256|TLS_RSA_W
    1652194927.550 000000F0 4954 485F 4145 535F 3132 385F 4342 435F  ITH_AES_128_CBC_
    1652194927.550 00000100 5348 4132 3536 2C2C 2C64 756D 6D79 2D72  SHA256,,,dummy-r
    1652194927.550 00000110 6F6F 742D 6361 2D63 6572 742C 2C76 335F  oot-ca-cert,,v3_
    1652194927.550 00000120 315F 312C 312C 310D 0A                   1_1,1,1..
    1652194927.680 rx: (recv=23, timeout=400)
    1652194927.680 00000000 0A0D 2B6D 7174 7463 7265 6174 653A 300A  ..+mqttcreate:0.
    1652194927.680 00000010 0D4F 4B0A 0D0A 0D                        .OK....
    1652194927.680 IoT: MQTT Create OK.
    ...
    1652194935.330 00000000 4154 2B4D 7174 7443 6F6E 6E65 6374 3D30  AT+MqttConnect=0
    1652194935.330 00000010 0D0A                                     ..
    ...
    1652194950.360 00000000 0A0D 4552 524F 523A 2070 726F 6365 7373  ..ERROR: process
    1652194950.360 00000010 2063 6F6D 6D61 6E64 2C2D 3732 320A 0D2B   command,-722..+
    1652194950.360 00000020 6576 656E 746D 7174 743A 6469 7363 6F6E  eventmqtt:discon
    1652194950.360 00000030 6E65 6374 2C0A 0D0A 0D                   nect,....
    1652194950.970 WiFi UART: Rcv'd : [ERROR: process command,-722]

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    顺便说一句,我注意到文档中建议安全密码是可选的,并且默认为所有,但当我尝试使用它时,我收到一个缺少参数的错误:
    1652195523.940 tx:
    1652195523.940 00000000 4154 2B4D 7174 7443 7265 6174 653D 7072  AT+MqttCreate=pr
    1652195523.940 00000010 6F6A 6563 7473 2F63 6F6E 6475 6374 6976  ojects/conductiv
    1652195523.940 00000020 652D 7365 742D 3235 3235 3231 2F6C 6F63  e-set-252521/loc
    1652195523.940 00000030 6174 696F 6E73 2F75 732D 6365 6E74 7261  ations/us-centra
    1652195523.940 00000040 6C31 2F72 6567 6973 7472 6965 732F 656B  l1/registries/ek
    1652195523.940 00000050 696E 6E65 782D 7374 6167 696E 672D 7265  innex-staging-re
    1652195523.940 00000060 6769 7374 7279 2F64 6576 6963 6573 2F63  gistry/devices/c
    1652195523.940 00000070 6172 6546 6974 2D31 6B69 6875 6163 6D63  areFit-1kihuacmc
    1652195523.940 00000080 2C5B 7572 6C7C 7365 637C 736B 6970 5F63  ,[url|sec|skip_c
    1652195523.940 00000090 6572 745F 7665 7269 6679 5D2C 4D4E 342D  ert_verify],MN4-
    1652195523.940 000000A0 574A 4F48 4E53 4F4E 2E64 6363 6D6E 2E63  WJOHNSON.dccmn.c
    1652195523.940 000000B0 6F6D 2C34 3433 2C54 4C53 5631 5F32 2C2C  om,443,TLSV1_2,,
    1652195523.950 000000C0 2C2C 6475 6D6D 792D 726F 6F74 2D63 612D  ,,dummy-root-ca-
    1652195523.950 000000D0 6365 7274 2C2C 7633 5F31 5F31 2C31 2C31  cert,,v3_1_1,1,1
    1652195523.950 000000E0 0D0A                                     ..
    1652195524.000 05/10/2022 15:12:04
    1652195524.050 Clock Task non-idle task index = 19
    1652195524.450 rx: (recv=32, timeout=0)
    1652195524.450 00000000 0A0D 4552 524F 523A 2070 6172 7365 2070  ..ERROR: parse p
    1652195524.450 00000010 6172 616D 6574 6572 732C 2D31 0A0D 0A0D  arameters,-1....

    这是AT_Command代码中的问题还是我误解了文档:
    •密码:安全密码作为或位掩码(可选),(默认值:所有密码):
    –SSL_RSA_W_RC4_128_SHA
    –SSL_RSA_W_RC4_128_MD5
    –TLS_RSA_W_AES_256_CBC_SHA
    –TLS_DHE_RSA_with _AES_256_CBC_SHA
    ...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    -722为SL_ERROR_BSD_ESEC_DOMAIN_NAME_MISMATCH。

    您是否正在使用 SL_so_secure域名验证 套接字选项?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们的代码没有设置它,它是否默认由AT_COMMAND设置?  我们不发出任何AT+SetSockOpt命令。  

    看起来伪可信证书具有:
           主题:C = IL,ST = Sharon,L = Raanana,O = Texas Instruments Inc.,OU = RND,CN = dummed-trusted-cert
    这是否意味着我们只能连接到名为dummed-trusted-cert的计算机?  这是否意味着CC3235对该名称进行DNS查找?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果您为MQTT客户端使用AT命令-您需要更新AT命令应用程序以添加此支持。

    否DNS与证书中的名称无关。 连接根据MQTT-create命令中的配置进行。

    但您认为cn=dumem-trusted-cert不能用于TLS服务器是正确的。您需要将其替换为为为您的服务器构建的证书(根据服务器 主机名具有CN)。  您仍然可以使用dummy-root-ca-cert-key或dummy-trusted-ca-cert-key对其进行签名。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    目前,我们已成功通过我们关注的固件下载证书。  因此,这一关切现已没有实际意义。  感谢你的帮助。