Java JNLP需要签名的目的是什么?

时间:2013-03-15 22:40:01

标签: java security digital-signature jnlp

我对安全基础知识和数字签名等方面的理解有限。例如,我理解数字签名在公钥加密中的用途。但是,我不理解为什么签署我的JNLP是必要的,或者它防止了什么恶意,也不能随时找到这些信息。

我发现允许部署未签名的JNLP,但磁盘和网络访问等内容受到限制。但是,让我们假设我是一个恶意的人,他制作了一个Java应用程序,它会对磁盘内容做一些恶意的事情(我把它伪装成别的东西)。我可以轻松签名,部署它,你可以访问我的网站,毫无疑问,启动应用程序并让你的磁盘受到攻击。在这样的情况下......签名完成了什么?

更重要的是......如果任何人只需简单地签署申请,几乎不需要任何努力......那么重点是什么?

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

2 个答案:

答案 0 :(得分:4)

你不能只是签署一些东西 - 如果你希望浏览器不受限制地执行它。您用于签署软件的证书必须使用其他证书进行签名,依此类推,直到chain of trust达到浏览器中已安装的root certificate为止。

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

为了达到您的目的,如果您在站点中使用CA签名证书并且该证书用于分发恶意软件,CA将尽快撤销您的证书。另一方面,如果您使用自签名证书,浏览器将要求用户确认其使用。如果用户尽管有警告就完成它,那么,这是他们自己的错,不是吗?毕竟,对于愚蠢或无知都没有一般的对策......

答案 1 :(得分:1)

这个问题确实提出了一些有效的观点,而且thkala为从受信任的机构发布的CA的价值提供了良好的辩护。

但是为什么我们需要一个CA用于JNLP而不是一个常规的执行JAR文件?我认为原因是JNLP意味着要从浏览器启动。 JNLP文件是在沙箱中使用浏览器运行的applet的替代品 - 理论上可以防止对您的计算机造成任何伤害。用户可以通过访问页面来启动在applet中运行的jar文件。同样,只需单击按钮即可启动JNLP。在Chrome中,我被要求先保存JNLP。但是在IE或Firefox中,我看到了一个启动按钮或常规Web链接 - 它看起来像网页中的任何其他按钮或链接 - 只需单击该程序即可运行。这比下载可执行文件然后运行它更无能为力。

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

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

从历史上看,我相信这就是JNLP和applet签名的原因。 我相信此签名的实际价值已经过期。

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

更重要的是,Java最近的安全更新主要围绕修补后门,允许未签名的代码离开沙箱并执行已签名的applet或JNLP可以执行的所有操作。似乎每当Oracle修补出沙箱的方式时,有人会找到不同的出路。最佳解决方案是让运行时始终提示用户以获得运行Java applet或JNLP文件的权限。自签名JNLP文件不仅可以访问本地文件系统和LAN,还可以使用未签名的JNLP。如果用户拥有来自Oracle的最新安全更新(当然,大多数没有),并且在发现下一个从沙箱中滑出的聪明方法之前,那么沙箱模型确实按预期工作。但对于大多数用户而言,大多数情况下,sanbox模型并未按预期工作。我认为现在是时候让所有JNLP文件都要求运行权限,并且只给予它们与常规JAR文件相同的访问权限。

然后我不必每6个月重新创建一次安全证书。