SOAP请求中javax.servlet.request.X509Certificate返回Null问题求助
解决客户端证书获取为Null的问题
核心原因
你的Spring Boot服务当前只配置了单向SSL(仅服务器向客户端提供证书),没有开启客户端证书认证,所以服务器不会接收并解析客户端发送的证书,自然拿不到javax.servlet.request.X509Certificate属性值。
步骤1:修正服务器SSL配置
更新application.properties,开启客户端认证并完善SSL相关配置:
server.port=8443 server.ssl.enabled=true server.ssl.protocol=TLS # 替换过时的SSL协议,用TLS更安全 server.ssl.key-store=src/main/resources/ssl-certificate/keystore.p12 server.ssl.key-store-password=123456 server.ssl.keyStoreType=PKCS12 server.ssl.keyAlias=tomcat # 开启客户端证书认证:required表示必须提供证书,want表示可选但提供则验证 server.ssl.client-auth=required # 配置信任库(如果你的keystore里已经包含客户端证书的CA,可直接复用keystore) server.ssl.trust-store=src/main/resources/ssl-certificate/keystore.p12 server.ssl.trust-store-password=123456 server.ssl.trust-store-type=PKCS12
注意:如果客户端证书不是由你的keystore中的CA签发的,需要单独创建信任库(JKS/PKCS12),并将客户端证书或其CA证书导入进去,再配置
trust-store路径。
步骤2:Postman客户端证书配置
- 打开Postman,点击右上角齿轮图标进入Settings
- 切换到Certificates选项卡
- 在Client Certificates区域点击Add Certificate:
- Host: 填写你的服务地址,比如
localhost:8443 - PFX file: 选择客户端的证书文件(.p12/.pfx格式)
- Passphrase: 输入证书的密码
- Host: 填写你的服务地址,比如
- 保存配置,关闭设置窗口
步骤3:验证请求发送
发送POST请求时,确保使用HTTPS协议(比如https://localhost:8443/testmocksoap),Postman会自动匹配对应Host的客户端证书发送给服务器。
额外检查
- 确认客户端证书未过期且有效,并且服务器信任该证书(已导入信任库)
- 代码中
ServletRequestAttributes的获取是冗余的,直接用方法参数里的servletRequest即可,不影响功能但可以简化
内容的提问来源于stack exchange,提问作者TomasB
相关产品推荐
相关产品推荐

