【问题标题】:What is the purpose for Java JNLP requiring a signature?Java JNLP 需要签名的目的是什么?
【发布时间】:2013-03-15 22:40:00
【问题描述】:

我对安全基础知识和数字签名之类的知识了解有限。例如,我了解数字签名在公钥密码学中的用途。但是,我不明白为什么需要签署我的 JNLP,或者它可以防止哪些恶意行为,我也找不到现成的信息。

我发现允许部署未签名的 JNLP,但磁盘和网络访问等内容受到限制。但是,假设我是一个恶意的人,他制作了一个 Java 应用程序,该应用程序会对您的磁盘内容进行恶意操作(我将其伪装成其他东西)。我可以轻松地签署、部署它,然后您可以毫无防备地访问我的网站,然后启动应用程序并让您的磁盘受到攻击。在这种情况下……签名完成了什么?

更重要的是......如果任何人都可以简单地签署应用程序而几乎不需要任何努力......那有什么意义呢?

我确定我遗漏了一些非常明显的东西......请赐教。

【问题讨论】:

    标签: java security digital-signature jnlp


    【解决方案1】:

    你不能仅仅签署一些东西——如果你想让浏览器不受限制地执行它就不行。您用来为软件签名的证书必须使用另一个证书进行签名,依此类推,直到 chain of trust 到达已安装在浏览器中的 root certificate

    虽然偶尔会有一些不勤奋的Certificate Authorities,但如果不提供一些您(网络)身份的证明,您通常无法获得这样的证书。这意味着恶意的人必须提供某种身份证明,尽管它可能很少。更重要的是,CA 应revoke 用于恶意活动或以其他方式受到损害的证书,从而限制暴露程度。

    为了说明您的意思,如果您在您的站点中使用 CA 签名的证书,并且该证书用于分发恶意软件,那么 CA 迟早会撤销您的证书。另一方面,如果您使用自签名证书,浏览器将要求用户确认其使用。如果用户不顾警告而继续使用它,那么,这是他们自己的错,不是吗?毕竟,对于愚蠢或无知,没有通用的对策......

    【讨论】:

    • 感谢您的信息。我有点明白你在说什么。但我想我主要指的是自签名。我刚刚对我的应用程序进行了自我签名,正如您所指出的,如果用户在收到“警告”后同意,则允许应用程序从我的网站运行。那么为什么它不能也向用户提供相同的警告和选项来运行 unsigned 应用程序呢?我的自签名应用程序似乎与未签名的应用程序一样值得信赖。唯一的区别是我必须通过额外的工作来自我签名。有什么意义?
    • 而且我不认为用户会非常愚蠢地点击我网站上的警告,而不是如果他下载可执行的 jar/exe 并自己运行它(我们都每天都使用免费和开源的应用程序……除非您阅读了每个应用程序的完整源代码)。我猜这就是最让我恼火的地方……下载/运行 JAR,不需要签名。但是要单击 JNLP(执行完全相同的操作 - 下载/运行 JAR)...您必须有签名。它没有加起来。
    • “将未签名的应用程序限制在沙箱中的意义何在” 作为最终用户,我不希望被提示接受可能会擦除我的磁盘和将我的个人数据上传给其他人。 “没有提示”很好地表明(未签名的)小程序不会做任何有害的事情。我认为在这里考虑“自签名”代码没有帮助。自签名代码不应投入生产。
    • “我见过非常成功的大型开源项目,它们在其网页上使用自签名 JNLP” 这并不是一个好主意。请注意,我提供了许多“自签名”应用程序。同样,但就像我说的那样,它们确实应该使用有效证书进行签名。如果此类证书价格合理,我的应用程序。会使用它们。你的应用到底是做什么的。这需要信任吗?
    • 是否是应用程序。将在沙盒中工作真的归结为它试图做什么。例如。如果它需要访问本地磁盘或联系不是“主服务器”的站点,则需要信任。
    【解决方案2】:

    这个问题确实提出了一些有效的观点,thkala 为受信任的权威机构颁发的 CA 的价值提供了很好的辩护。

    但是为什么我们需要 CA 来处理 JNLP 而不是常规的可执行 JAR 文件呢?我认为原因是 JNLP 旨在从浏览器启动。 JNLP 文件是在沙箱中与浏览器一起运行的小程序的替代品——理论上可以避免对您的计算机造成任何伤害。用户只需访问一个页面就可以启动在小程序中运行的 jar 文件。同样,只需单击一个按钮即可启动 JNLP。在 Chrome 中,我被要求首先保存 JNLP。但在 IE 或 Firefox 中,我会看到一个启动按钮或常规 Web 链接——它看起来像网页中的任何其他按钮或链接——然后单击即可运行程序。这比下载一个可执行文件然后运行它要简单一些。

    另一方面,可执行 JAR 文件可以通过多种方式安装或运行。例如,它们通常与 MRI 一起打包在 CD 上,因为一些 MRI 查看软件在 JVM 上运行,并且患者或医生需要启动定制软件来查看 MRI。但是这个软件没有得到“安装”。您只需从 CD 运行它。

    另一方面,JNLP 更像是一个安装程序,而不是一个独立的程序。我已经能够让他们创建桌面快捷方式并进行文件关联。从用户的角度来看,我的 JNLP 应用程序感觉就像一个具有自己的图标和文件类型的本机程序。由于它在浏览器中运行得如此隐蔽,并​​且可以不受限制地访问客户端 PC,因此让它“签名并受信任”可以让用户在运行它时感觉更安全。

    从历史上看,我相信这就是 JNLP 和小程序得到签名的原因。 我相信这次签约的实用价值已经过期了。

    首先,从 CA 签署您的应用程序需要花费数百美元,因此许多公司都跳过了这一点。有一些合作的应用程序运行自签名代码,用户只知道在浏览器发出警告后点击“接受”按钮。

    更重要的是,最近针对 Java 的安全更新集中在修补后门,这些后门允许 未签名代码 离开沙箱并执行已签名小程序或 JNLP 可以执行的所有操作。似乎每次甲骨文修补沙盒的出路时,都会有人找到不同的出路。最好的解决方案是让运行时始终提示用户授予运行 Java 小程序或 JNLP 文件的权限。自签名的 JNLP 文件不仅可以访问本地文件系统和 LAN,而且未签名的 JNLP 也可以。如果用户从 Oracle 获得了最新的安全更新(当然,大多数人没有),并且在发现下一个从沙箱滑出的巧妙方法之前,沙箱模型确实按预期工作。但是对于大多数用户来说,大多数时候,sanbox 模型并没有按预期工作。我认为是时候让所有 JNLP 文件请求运行权限,并为它们提供与常规 JAR 文件相同的访问权限。

    这样我就不必每 6 个月重新创建一次安全证书。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-10
      • 2018-06-14
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 2015-01-19
      相关资源
      最近更新 更多