open62541 v1.4.11.1客户端证书无SubjectAltName,AcceptAll仍无法连接求助
解决open62541客户端BadCertificateUriInvalid错误的方案
问题根源
UA_CertificateVerification_AcceptAll()仅禁用OpenSSL层面的证书信任验证(比如证书链、有效期、签名等),但BadCertificateUriInvalid是OPC UA会话建立阶段的ApplicationUri一致性检查失败导致的——服务器证书没有在SubjectAltName中包含其声明的ApplicationUri,而open62541默认会强制执行这个检查,和证书验证回调无关。
解决步骤
1. 禁用ApplicationUri一致性检查
在客户端配置中,修改sessionConfig下的verifyPeerApplicationUri参数为false,跳过这个会话层检查:
// 获取默认客户端配置 UA_ClientConfig config = UA_ClientConfig_default(); // 保持你已设置的证书信任检查禁用 config.certificateVerification = UA_CertificateVerification_AcceptAll(); // 关键:关闭ApplicationUri一致性校验 config.sessionConfig.verifyPeerApplicationUri = false; // 用修改后的配置初始化客户端 UA_Client *client = UA_Client_new(config);
2. 额外注意事项
- 该修改仅适合测试环境或完全信任的服务器场景,生产环境下务必要求服务器厂商提供符合OPC UA规范的证书(必须在SubjectAltName字段中包含服务器的ApplicationUri)。
- 如果后续出现其他证书相关错误,再针对性调整客户端的证书信任策略,但当前错误仅需上述修改即可解决。
内容的提问来源于stack exchange,提问作者TjM
相关产品推荐
相关产品推荐

