Windows命令行jarsigner加-tsa选项报SocketException权限拒绝问题排查
解决Jarsigner添加-tsa选项时出现SocketException: Permission denied: connect的问题
结合你描述的情况——不用时间戳选项签名正常,80端口能访问但加-tsa就报错,防火墙都已关闭——以下是几个最可能的原因及对应的排查/解决方法:
1. Java安全策略限制了出站连接
虽然系统层面防火墙没拦截,但Java的安全策略文件可能限制了jarsigner进程访问目标TSA服务器。
- 找到你使用的JRE目录下的
lib/security/java.policy文件(比如C:\Program Files\Java\jdk1.8.0_xxx\jre\lib\security\java.policy) - 打开文件,在
grant块中添加以下权限配置:permission java.net.SocketPermission "sha256timestamp.ws.symantec.com:80", "connect,resolve"; - 保存后重新运行jarsigner命令试试。
2. TSA服务器的HTTP POST请求被拦截或不支持
你直接用浏览器访问TSA URL是GET请求,能得到响应,但jarsigner向TSA服务器发送的是HTTP POST请求,服务器可能对POST请求有不同的限制,或者该TSA服务已不再支持HTTP协议。
- 尝试将TSA地址换成HTTPS版本:
很多旧的HTTP TSA服务已经迁移到HTTPS,即使HTTP能返回内容,也可能不再处理签名所需的POST请求。jarsigner -keystore C:/keystore.p12 -storepass xyz jars_to_be_signed.jar friendly_name -tsa https://sha256timestamp.ws.symantec.com/sha256/timestamp -storetype pkcs12 signedjar C:/signed.jar
3. 系统/Java代理设置干扰
如果你的系统配置了代理服务器,Java进程可能默认使用代理,但代理未正确配置导致连接失败。
- 在运行jarsigner时添加参数禁用代理:
jarsigner -Dhttp.proxyHost= -Dhttp.proxyPort= -keystore C:/keystore.p12 -storepass xyz jars_to_be_signed.jar friendly_name -tsa http://sha256timestamp.ws.symantec.com/sha256/timestamp -storetype pkcs12 signedjar C:/signed.jar - 也可以检查系统环境变量中是否存在
HTTP_PROXY、HTTPS_PROXY,如果有暂时移除后再测试。
4. 运行jarsigner的进程权限不足
即使系统防火墙关闭,普通用户权限的进程可能被系统安全策略(比如UAC)限制发起出站网络连接。
- 右键点击命令提示符/终端,选择「以管理员身份运行」,然后重新执行jarsigner命令。
5. TSA服务器本身的问题
Symantec的部分TSA服务可能存在访问限制或已变更,你可以尝试更换其他公开的TSA服务器测试,比如:
http://timestamp.digicert.comhttp://tsa.starfieldtech.com
替换-tsa参数后再运行签名命令,看是否能成功连接。
内容的提问来源于stack exchange,提问作者Aishwarya Radhakrishnan
相关产品推荐
相关产品推荐

