【问题标题】:How to put Permissions and Codebase attributes into third-party jar's manifest?如何将权限和代码库属性放入第三方 jar 的清单中?
【发布时间】:2013-09-10 18:06:15
【问题描述】:

Java™ SE Development Kit 7, Update 25 (JDK 7u25) 中所述, 如果使用 Java Web Start 部署的应用程序的清单文件没有Preventing RIAs from Being Repurposed 中描述的 Permissions 和 Codebase 属性,则会在控制台中打印一条警告。

对于我的 JAR,添加属性很简单;对于没有数字签名的第三方 jar 来说,这甚至是微不足道的:修改清单并签名(与我的 JAR 相同)。 如果我有第三方数字签名的 jar 怎么办?在验证过程中似乎使用了整个清单文件的哈希,因此在不使使用jarsigner—JAR Signing and Verification Tool 应用的签名无效的情况下,可能无法修改清单。

这是对的吗?有什么解决办法吗?

【问题讨论】:

  • 由于jarsigner 允许JAR 文件有多个签名,你尝试一下会发生什么?
  • 我可以修改清单并退出使第三方签名无效的 jar。这里的问题是有问题的 jar 是 BoucyCastle 提供程序,如果未验证 BC 签名,则 JRE 不信任提供程序。
  • 您的签名BoucyCastle如何使原始签名无效?
  • 我修改了清单:我必须添加 Permissions 和 Codebase 属性。
  • 您是否要求BouncyCastle 维护人员添加属性或尝试构建您自己的签名 JAR?

标签: java java-7 java-web-start jnlp


【解决方案1】:

为此,我制作了一个小蚂蚁脚本。这个想法很简单:

  • 每个罐子

    • 在临时目录中提取内容
    • re-jar 不包括 *.RSA 和 *.SF 文件(也添加权限)
    • 用我自己的证书签名

    <property name="keystore" value="../keystores/store/keystore.jks" />
    <property name="storetype" value="jks" />
    <property name="storepass" value="password" />
    <property name="keypass" value="${storepass}" />
    
    <target name="unsign-all">
        <foreach target="_re-jar" param="currentFile" parallel="false">
            <path>
                <fileset dir="WebContent/dir_contains_jars" casesensitive="yes">
                    <include name="**/*.jar" />
                </fileset>
            </path>
        </foreach>
    
        <move todir="WebContent/dir_contains_jars" overwrite="true">
            <fileset dir="WebContent/dir_contains_jars.tmp" casesensitive="yes">
                <include name="**/*.jar" />
            </fileset>
        </move>
    
        <delete dir="WebContent/dir_contains_jars.tmp" />
    </target>
    
    <target name="sign-all">
        <apply executable="C:\Program Files\Java\jdk1.7.0_45\bin\jarsigner">
            <arg line="-keystore ${keystore} -storetype ${storetype} -storepass ${storepass} -keypass ${keypass}" />
            <srcfile />
            <arg line="alias_name" />
    
            <fileset dir="WebContent/dir_contains_jars" casesensitive="yes">
                <include name="**/*.jar" />
            </fileset>
        </apply>
    </target>
    
    <target name="_re-jar">
        <basename property="filename" file="${currentFile}" />
    
        <jar destfile="WebContent/dir_contains_jars.tmp/${filename}">
            <zipfileset src="${currentFile}">
                <exclude name="META-INF/**.RSA" />
                <exclude name="META-INF/**.SF" />
            </zipfileset>
            <manifest>
                <attribute name="Permissions" value="all-permissions" />
                <attribute name="Codebase" value="*" />
                <attribute name="Application-Name" value="jnlpApplicationName" />
            </manifest>
        </jar>
    </target>
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    相关资源
    最近更新 更多