Java 应用程序已被安全阻止 —— 原因分析与解决方案

Java 应用程序已被安全阻止 —— 原因分析与解决方案

一、问题现象

在启动 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 会更倾向于走“保守策略”。


四、为什么有时“能点继续”,有时却被直接阻止?

这是很多人困惑的点,关键在于 拦截发生的阶段不同

阶段行为
弹出“安全警告”软拦截(允许用户确认)
显示“已被 Java 安全阻止”硬拦截(JVM 未启动)
一旦进入“硬拦截”,任何自动化手段都无效

五、推荐的解决方案

方案一:使用 Exception Site List

这是官方推荐、最稳妥的方式。

操作步骤

  1. 打开 Java 控制面板
  2. 进入 Security
  3. 安全级别设置为:High
  4. 点击 Exception Site List
  5. 添加访问地址(示例):https://<*******>

效果:

  • 不再出现“已被安全阻止”
  • Java 恢复弹出正常安全确认
  • 自动化可继续接管
在这里插入图片描述

方案二:部署自签 CA 或使用可信证书

适合长期方案:

  • 给 Java 应用重新签名
  • 使用企业 CA 或可信证书
  • CN / SAN 与访问域名匹配

优点:

  • 不需要 Exception List
  • 符合安全规范

缺点:

  • 成本高
  • 需要供应商支持

方案三:绕过浏览器,直接 javaws 启动

自动化场景建议:

  1. 浏览器仅负责下载 .jnlp
  2. 使用命令行启动:
javaws -silent viewer.jnlp 

优点:

  • 避免浏览器安全链
  • Java 更容易进入“可交互安全提示”状态
  • 兼容 UI 自动化
“应用程序已被 Java 安全阻止”不是弹窗问题,而是 JVM 启动权限问题。 解决问题的关键不在自动化,而在 Java
安全信任链的正确配置。

Read more

【OpenClaw从入门到精通】第10篇:OpenClaw生产环境部署全攻略:性能优化+安全加固+监控运维(2026实测版)

【OpenClaw从入门到精通】第10篇:OpenClaw生产环境部署全攻略:性能优化+安全加固+监控运维(2026实测版)

摘要:本文聚焦OpenClaw从测试环境走向生产环境的核心痛点,围绕“性能优化、安全加固、监控运维”三大维度展开实操讲解。先明确生产环境硬件/系统选型标准,再通过硬件层资源管控、模型调度策略、缓存优化等手段提升响应速度(实测响应效率提升50%+);接着从网络、权限、数据三层构建安全防护体系,集成火山引擎安全方案拦截高危操作;最后落地TenacitOS可视化监控与Prometheus告警体系,配套完整故障排查清单和虚拟实战案例。全文所有配置、代码均经实测验证,兼顾新手入门实操性和进阶读者的生产级部署需求,帮助开发者真正实现OpenClaw从“能用”到“放心用”的跨越。 优质专栏欢迎订阅! 【DeepSeek深度应用】【Python高阶开发:AI自动化与数据工程实战】【YOLOv11工业级实战】 【机器视觉:C# + HALCON】【大模型微调实战:平民级微调技术全解】 【人工智能之深度学习】【AI 赋能:Python 人工智能应用实战】【数字孪生与仿真技术实战指南】 【AI工程化落地与YOLOv8/v9实战】【C#工业上位机高级应用:高并发通信+性能优化】 【Java生产级避坑指南:

By Ne0inhk
ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

🎬 渡水无言:个人主页渡水无言 ❄专栏传送门: 《linux专栏》《嵌入式linux驱动开发》《linux系统移植专栏》 ❄专栏传送门: 《freertos专栏》《STM32 HAL库专栏》 ⭐️流水不争先,争的是滔滔不绝  📚博主简介:第二十届中国研究生电子设计竞赛全国二等奖 |国家奖学金 | 省级三好学生 | 省级优秀毕业生获得者 | ZEEKLOG新星杯TOP18 | 半导纵横专栏博主 | 211在读研究生 在这里主要分享自己学习的linux嵌入式领域知识;有分享错误或者不足的地方欢迎大佬指导,也欢迎各位大佬互相三连 目录 前言  一、实验基础说明 1.1、互斥体简介 1.2 本次实验设计思路 二、硬件原理分析(看过之前博客的可以忽略) 三、实验程序编写 3.1 互斥体 LED 驱动代码(mutex.c) 3.2.1、设备结构体定义(28-39

By Ne0inhk
Flutter for OpenHarmony:swagger_dart_code_generator 接口代码自动化生成的救星(OpenAPI/Swagger) 深度解析与鸿蒙适配指南

Flutter for OpenHarmony:swagger_dart_code_generator 接口代码自动化生成的救星(OpenAPI/Swagger) 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 后端工程师扔给你一个 Swagger (OpenAPI) 文档地址,你会怎么做? 1. 对着文档,手写 Dart Model 类(容易写错字段类型)。 2. 手写 Retrofit/Dio 的 API 接口定义(容易拼错 URL)。 3. 当后端修改了字段名,你对着报错修半天。 这是重复劳动的地狱。 swagger_dart_code_generator 可以将 Swagger (JSON/YAML) 文件直接转换为高质量的 Dart 代码,包括: * Model 类:支持 json_serializable,带 fromJson/

By Ne0inhk
Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

文章目录 * 前言 * make/makefile * 文件的三个时间 * Linux第一个小程序-进度条 * 回车和换行 * 缓冲区 * 程序的代码展示 * git指令 * 关于gitee * Linux调试器-gdb使用 * 作业部分 前言 做 Linux 开发时,你是不是也遇到过这些 “卡脖子” 时刻?写 makefile 时,明明语法没错却报错,最后发现是依赖方法行没加 Tab;想提交代码到 gitee,记不清 git add/commit/push 的 “三板斧”,还得反复搜教程;用 gdb 调试程序,输了命令没反应,才想起编译时没加-g生成 debug 版本;甚至连写个进度条,都搞不懂\r和\n的区别,导致进度条乱跳…… 其实这些问题,

By Ne0inhk