You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用第一种OpenSSL生成证书时mbedtls服务器握手操作超时如何解决

问题根因

两种证书生成方法的核心差异有两点,是导致第一种方法握手失败的原因:

  1. 私钥加密属性差异
    第一种方法执行openssl genrsa -out key.pem 2048生成私钥时,默认会对私钥文件做AES加密,生成的私钥文件包含加密标识,需要输入解密密码才能正常读取。你的mbedtls服务端运行在非RTOS设备上,没有私钥解密的交互输入逻辑,也没有在代码中传入私钥解密密码,导致加载私钥失败,握手流程卡在密钥协商环节无法继续,最终触发超时。
    而第二种方法添加了-nodes(即no DES,不加密)参数,生成的私钥是明文格式,不需要密码即可直接加载,因此可以正常通信。
  2. 证书扩展字段缺失
    第一种方法通过CSR中转生成自签名证书时,如果没有显式指定证书扩展配置,生成的x509证书会缺少TLS服务端必需的密钥用法、扩展密钥用法字段,mbedtls在校验证书合法性时会失败,也会导致握手流程中断。

解决方案

你可以任选以下一种方案修复问题:

方案一:调整第一种生成命令,适配现有服务端逻辑

修改私钥生成和证书生成命令,生成明文私钥和带合法扩展的证书:

  • 生成无加密的2048位RSA私钥:
openssl genrsa -nodes -out key.pem 2048
  • 生成证书签名请求:
openssl req -new -sha256 -key key.pem -out csr.csr
  • 生成带TLS服务端所需扩展的自签名证书:
openssl req -x509 -sha256 -days 365 -key key.pem -in csr.csr -out certificate.pem \
-addext "keyUsage = digitalSignature, keyEncipherment" \
-addext "extendedKeyUsage = serverAuth"
  • 生成供PLC使用的p12文件:
openssl pkcs12 -export -out client-identity.p12 -inkey key.pem -in certificate.pem

方案二:补充mbedtls服务端的私钥解密逻辑

如果你需要保留私钥加密的安全特性,可以修改mbedtls服务端代码,在调用mbedtls_pk_parse_key接口加载私钥时,传入你生成私钥时设置的解密密码,即可正常解析加密私钥,完成握手流程。

内容的提问来源于stack exchange,提问作者gogogo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:15:01