Domino App Dev Pack自签SSL证书验证错误19问题咨询
问题解答
OpenSSL 验证错误码19含义
错误码19(self-signed certificate in certificate chain)表示OpenSSL在校验证书链时,发现链内存在未被本地信任库认可的自签名根证书。
你这里触发这个错误的直接原因是:Proton服务端在TLS握手时错误地将自签名根CA证书(也就是你生成的ca.crt)和服务端证书一起下发给了客户端。按照标准TLS流程,服务端只需要下发服务端证书、中间CA证书(如果存在)即可,根证书应该由客户端本地预先存放在信任列表中,不需要服务端下发。虽然你测试时已经通过-CAfile参数指定了根证书路径,但OpenSSL检测到链中自带的自签名根时,仍然会抛出这个错误提示。
对Pilot模式下IAM服务SSL使用的影响
会直接导致SSL握手失败,IAM服务无法正常通过Proton端口提供服务,你贴的Domino服务端日志已经出现致命级别的SSL握手错误,不是可忽略的警告。
关联错误根因梳理
你遇到的几个报错是连锁触发的,核心问题有3个:
- 证书域名不匹配:你生成的服务端证书CN为
192.168.176.130,但测试连接时使用的地址是serv.org.com,Proton做SNI域名校验时找不到匹配该域名的证书,直接触发日志中No match found for server name: serv.org.com错误。 - 双向TLS校验未通过:Proton默认开启双向SSL认证,要求客户端连接时出示由信任CA签发的客户端证书,你用openssl s_client测试时没有传入客户端证书参数,直接触发
PEER_DID_NOT_RETURN_A_CERTIFICATE的握手失败错误。 unexpected eof while reading报错是结果而非原因:前面的握手校验失败后,服务端主动断开TCP连接,openssl s_client还在等待应用层返回数据,就会抛出这个EOF错误,和证书格式、加密套件兼容性无关。
修复方案
按以下顺序调整即可解决问题:
- 重新生成服务端证书,把实际访问用的域名
serv.org.com加入证书的CN或SAN扩展字段,如果需要同时用IP192.168.176.130访问,也把该IP一并加入SAN列表。 - 修改Proton的TLS配置,服务端证书链只配置服务端证书、中间CA证书(如果有),不要把自签名根ca.crt配置到服务端下发的证书链中。
- 用openssl做连通性测试时,如果要验证双向TLS场景,追加
-cert <你的客户端证书路径> -key <你的客户端私钥路径>参数传入客户端证书,否则会被服务端直接拒绝。 - 确认运行IAM服务的主机、所有需要调用Proton接口的客户端,都已经把你生成的ca.crt导入到系统/应用的受信任根证书存储中。
内容的提问来源于stack exchange,提问作者Cora Kwok
相关产品推荐
相关产品推荐

