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

QFJ Acceptor配置SSL客户端认证后异常问题咨询

SSL双向认证握手逻辑

双向认证(客户端证书验证)的SSL握手流程如下:

  • 客户端向服务器发起SSL连接请求。
  • 服务器发送自身证书给客户端,客户端验证服务器证书的有效性(有效期、签名合法性、是否在本地信任列表等),验证通过后继续下一步。
  • 服务器要求客户端提供证书(因开启NeedClientAuth=Y),客户端发送自身证书给服务器。
  • 服务器验证客户端证书:检查证书是否在自身信任库中、是否处于有效期、签名是否合法,只有验证通过才会完成握手,否则直接拒绝连接。
你的配置问题分析

你的配置存在核心错误,导致客户端证书验证未真正生效:

  1. 服务器端未配置信任库参数
    QFJ中,SocketKeyStore仅用于存储服务器自身的私钥和证书,而验证客户端证书需要通过SocketTrustStore指定信任库(存放所有可信的客户端/CA证书)。你将client.cer导入到了server.jks,但没有在Acceptor配置中添加SocketTrustStore=server.jks,服务器的SSL上下文不会用这个密钥库验证客户端证书,导致NeedClientAuth=Y的配置没有实际作用,服务器并未真正校验客户端证书的合法性。

  2. 客户端缺少服务器证书信任配置
    你的客户端配置仅指定了自身的密钥库,但没有配置信任库来验证服务器证书。测试时旧客户端能连接,大概率是QFJ客户端默认跳过了服务器证书验证(或JVM临时信任了自签名证书),这在生产环境中存在安全风险。

修正后的配置步骤

服务器端:

  1. 保持原有密钥库配置,新增信任库配置:
SocketUseSSL=Y
NeedClientAuth=Y
SocketKeyStore=server.jks
SocketKeyStorePassword=****
SocketTrustStore=server.jks
SocketTrustStorePassword=****

(更安全的做法是单独创建server_truststore.jks,仅导入可信的客户端证书)

  1. 确保将所有需要信任的客户端证书(如client.cer)导入到指定的信任库中。

客户端:

  1. 将server.cer导入到客户端的信任库(可以是client.jks或单独的client_truststore.jks):
keytool -import -v -trustcacerts -alias server -file server.cer -keystore client.jks
  1. 完善客户端SSL配置:
SocketUseSSL=Y
SocketKeyStore=client.jks
SocketKeyStorePassword=****
SocketTrustStore=client.jks
SocketTrustStorePassword=****

完成上述配置后,使用未导入服务器信任库的client2.jks连接时,服务器会验证失败并拒绝连接,符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:05:29