【问题标题】:can I check if a Java applet certificate is trusted before running my applet?我可以在运行我的小程序之前检查一个 Java 小程序证书是否受信任吗?
【发布时间】:2011-08-18 19:49:57
【问题描述】:

我在网站上有一个签名的小程序。正因为如此,Java 安全对话框出现,用户需要先授予小程序权限,然后它才能工作。我想做的是这样的:

  • 我希望网站解释 给用户的安全对话框 在它出现之前。该页面将 在 div 中显示一些解释文本, 几秒钟后,保安 将出现对话框。
  • 如果用户在之前的会话中已经允许证书,它应该 只需运行小程序,无需任何额外 对话框。

问题在于,当小程序嵌入页面时,安全对话框就会出现。我可以延迟嵌入,但无法从小程序本身检查它的权限,因为它需要在加载之前完成。

也许我可以加载第二个不可见的普通小程序并检查权限。但是我该怎么做呢?是否有任何 Java 类可以检查证书是否已被客户端信任?

谢谢。

【问题讨论】:

  • 据我所知,java 安全对话框仅在第一次启动小程序时出现。如果用户选中“始终信任证书”框 - 安全对话框将不再出现。但是,如果用户选择信任它一次 - 它会出现在下一次启动时。出于安全原因,您无法以编程方式停止它。

标签: java security user-interface applet certificate


【解决方案1】:

您可以通过编程方式检查 JAR 文件的证书和签名,就像 JVM 在加载小程序时所做的那样。这并不容易,但至少乍一看,你必须这样做:

  1. 使用隐藏的小程序下载您的 JAR 并验证其证书,就像小程序查看器一样。您可以使用 java.security.cert 包手动执行此操作。弄清楚如何做到这一点的最佳方法是JarSigner source code,尤其是verifyJar()。比如:

    // download the JAR
    URL url = new URL("jar:http://mywebsite.com/myjar.jar!/");
    JarURLConnection jarConnection = (JarURLConnection)url.openConnection();
    // get the certificates and other security stuff
    CodeSigners[] codeSigners = jarConnection.getJarEntry().getCodeSigners();
    Certificate[] certificates = jarConnection.getJarEntry().getCertificates();
    // verify the signatures
    // don't know the code, but you can analyze JarSigner example at http://download.oracle.com/javase/tutorial/security/toolfilex/rstep2.html
    
  2. 使用LiveConnect(可能是别的东西?)设置一个cookie,这样您就可以知道“用户是否已经在之前的会话中允许了证书”。

  3. 启动您的小程序,可能取决于 (1) 存储在 (2) 中创建的 cookie 中的结果。

我没有考虑那么多,所以可能有更好的方法。祝你好运,回帖!

【讨论】:

  • 我以为 JarSigner 只用于签署小程序?我在源代码中找不到如何访问最终用户受信任的证书。我不太熟悉证书和密钥库的工作原理,甚至不知道密钥库到底是什么。当我对我的小程序进行自签名时,我在我的开发机器上创建了一个密钥库并运行 JarSigner 来对其进行签名。当我在我的网站上部署小程序时,用户选择接受或拒绝权限请求。这只是一个应用程序设置,有点像“记住我的密码”吗?或者它是否存储在某处的“密钥库”中。
  • @terence:JarSigner 代码具有签名和验证方法。函数verifyJar() 就是这样做的。如果您不熟悉密钥库/证书的工作原理,我强烈推荐像 Signed AppletsVerifying a Signature 这样的教程。此外,当您部署一个小程序时,接受/拒绝是一个应用程序设置,但它是由 JVM 存储的,而不是您(不完全确定在哪里)。不是密钥库;只保存键,不保存设置。
猜你喜欢
  • 1970-01-01
  • 2015-08-07
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
  • 1970-01-01
  • 2014-07-18
  • 2013-08-31
  • 1970-01-01
相关资源
最近更新 更多