像任何优秀的系统管理员一样,我让我的服务器和桌面端保持最新状态并一直打补丁。 但是,最近的 Java 更新破坏了我在 Dell、ASUS、IBM、HP、Supermicro 和 FreeNAS 迷你服务器上的 IPMI KVM Java Applet。 您将收到如下错误:
未签名的应用程序请求不受限制地访问系统。 以下资源使用弱签名算法 MD5withRSA 进行签名,并被视为未签名。
错误继续如下:
<?xml version="1.0" encoding="UTF-8"?> <jnlp spec="1.0+" codebase="https://192.168.2.92:80/Java"> <information> <title>JViewer</title> <vendor>American Megatrends, Inc.</vendor> <description kind="one-line">JViewer Console Redirection Application</description> <description kind="tooltip">JViewer Console Redirection Application</description> <description kind="short"> JViewer enables a user to view the video display of managed server via KVM. It also enables the user to redirect his local keyboard, mouse for managing the server remotely. </description> </information> <security> <all-permissions/> </security> <resources> <j2se version="1.5+"/> <jar href="release/JViewer.jar"/> </resources> <resources> <j2se version="1.5+"/> <jar href="release/JViewer-SOC.jar"/> </resources> <resources os="Windows" arch="x86"> <j2se version="1.5+"/> <nativelib href="release/Win32.jar"/> </resources> <resources os="Windows" arch="amd64"> <j2se version="1.5+"/> <nativelib href="release/Win64.jar"/> </resources> <resources os="Linux" arch="x86"> <j2se version="1.5+"/> <nativelib href="release/Linux_x86_32.jar"/> </resources> <resources os="Linux" arch="i386"> <j2se version="1.5+"/> <nativelib href="release/Linux_x86_32.jar"/> </resources> <resources os="Linux" arch="x86_64"> <j2se version="1.5+"/> <nativelib href="release/Linux_x86_64.jar"/> </resources> <resources os="Linux" arch="amd64"> <j2se version="1.5+"/> <nativelib href="release/Linux_x86_64.jar"/> </resources> <resources os="Mac OS X" arch="i386"> <j2se version="1.5+"/> <nativelib href="release/Mac32.jar"/> </resources> <resources os="Mac OS X" arch="x86_64"> <j2se version="1.5+"/> <nativelib href="release/Mac64.jar"/> </resources> <application-desc> <argument>-apptype</argument> <argument>JViewer</argument> <argument>-hostname</argument> <argument>192.168.2.92</argument> <argument>-kvmtoken</argument> <argument>rjhWlxU7CiPFlKUE</argument> <argument>-kvmsecure</argument> <argument>0</argument> <argument>-kvmport</argument> <argument>80</argument> <argument>-vmsecure</argument> <argument>0</argument> <argument>-cdstate</argument> <argument>1</argument> <argument>-fdstate</argument> <argument>1</argument> <argument>-hdstate</argument> <argument>1</argument> <argument>-cdnum</argument> <argument>1</argument> <argument>-fdnum</argument> <argument>1</argument> <argument>-hdnum</argument> <argument>1</argument> <argument>-userpriv</argument> <argument>4</argument> <argument>-lang</argument> <argument>EN</argument> <argument>-websecureport</argument> <argument>443</argument> <argument>-singleportenabled</argument> <argument>1</argument> <argument>-webcookie</argument> <argument>yqvHjIVRoAPUDLjNGVUEHq6PNiXUEEjN000</argument> </application-desc> </jnlp>
MD5 添加到 jdk.jar.disabledAlgorithms 安全属性
Oracle 对 MD5 签名 JAR 文件的方式添加了新限制 验证:
此 JDK 版本对如何验证 MD5 签名的 JAR 文件引入了新限制。 如果签名的 JAR 文件使用 MD5,签名验证操作将忽略签名并将 JAR 视为未签名。 这可能发生在以下使用签名 JAR 文件的应用程序类型中:
小程序或 Web Start 应用程序
在启用了 SecurityManager 的情况下运行并配置了策略文件的独立或服务器应用程序,该文件根据 JAR 文件的代码签名者授予权限。
禁用算法的列表通过 java.security 文件中的安全属性 jdk.jar.disabledAlgorithms 进行控制。 此属性包含加密签名的 JAR 文件的禁用算法和密钥大小的列表。
修改相应文件
您需要找到一个名为 java.security 的文件并注释掉 jdk.jar.disabledAlgorithms 行,来自:
jdk.jar.disabledAlgorithms=MD2, MD5, RSA keySize < 1024
到:
#jdk.jar.disabledAlgorithms=MD2, MD5, RSA keySize < 1024
在 Linux/macOS 和类 Unix 系统上,可以使用如下 find 命令来定位名为 java.security 的文件:
$ sudo find / -iname java.security
或者
$ locate java.security
在我的 macOS 上,我在以下位置找到了文件并编辑了 vim 命令
$ sudo vi /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/java.security
长期解决方案
我认为从长远来看,硬件供应商必须修复他们的 BMC/IPMI 固件。 一些供应商开始支持基于 HTML 5 的 IPMI/BMC 客户端。 HTML5 客户端将为我们所有人替换基于 Java 浏览器的插件。