一、问题现象
在启动 Java KVM / Java Web Start 应用时,弹出如下提示:
应用程序已被 Java 安全阻止
出于安全原因,应用程序现在必须满足'高'或'非常高'安全设置的要求或属于'例外站点列表'的一部分才能允许运行。名称:com.kvm.viewer.Viewer
位置:https://***
原因:您的安全设置已阻止已签名的应用程序运行

此时:
- 没有'继续 / 运行'按钮
- 无法通过自动化(Playwright、PyJAB 等)绕过
- 应用直接被终止
二、这是 Java 安全机制的'硬阻断'
这不是程序 bug,也不是自动化工具的问题,而是 Java 的安全策略主动拦截。
该提示意味着:
Java 在 JVM 启动之前就拒绝了该应用
一旦出现这个窗口:
- JVM 不会创建
- Java Accessibility Bridge 不会加载
- 后续任何 UI 自动化都无效
三、触发该问题的直接原因
从 Java 官方安全模型角度,触发条件主要有以下几类:
1.应用签名不被信任(最核心原因)
- 应用虽然'已签名'
- 但签名证书:
- 过期
- 自签名
- 使用弱算法(SHA1)
- 证书链不完整
- Java 8u51 以后 默认不再信任此类签名
结论:'已签名 ≠ 被信任'
2.使用 IP 地址 + HTTPS 访问
Java 安全策略中:
- HTTPS + IP 地址,不被视为'可信主机名'
- 证书中的 CN / SAN 与 IP 不匹配
Java 会认为:存在中间人风险(MITM)
3.安全级别为 High / Very High
在 Java 控制面板中:
- High / Very High:
- 禁止运行未在白名单中的应用
- 不会弹'是否继续'
- 直接阻断
4.自动化启动方式加重了风险判定(次要但常见)
在以下场景更容易被直接阻止:
- 浏览器自动下载 .jnlp
- 自动执行 Java Web Start
- 无明显人工交互
Java 会更倾向于走'保守策略'。
四、为什么有时'能点继续',有时却被直接阻止?
这是很多人困惑的点,关键在于 拦截发生的阶段不同:



