2013-09-06 2 views
4

Как указано в Java™ SE Development Kit 7, Update 25 (JDK 7u25), , на консоли отображается предупреждение, если файл манифеста приложения, развернутого с использованием Java Web Start, не имеет разрешений атрибутов Codebase, описанных в Preventing RIAs from Being Repurposed.Как разместить разрешения и атрибуты Codebase в манифесте сторонних баннеров?

Для моих JAR тривиально добавлять свойства; это даже тривиально для сторонних банок, которые не имеют цифровой подписи: модифицируйте манифест и знак (то же, что и мои JAR). Что делать, если у меня есть сторонние банки с цифровой подписью? Кажется, что в процессе проверки используется хэш всего файла манифеста, поэтому может быть невозможно изменить манифест без аннулирования подписи, примененной с использованием jarsigner—JAR Signing and Verification Tool.

Это право? Есть ли решение?

+0

Как 'jarsigner' позволяет * несколько подписей для JAR файла *, что происходит, что вы попробовать? – trashgod

+0

Я могу модифицировать манифест и уйти в отставку, не признавая личность третьей стороны. Проблема заключается в том, что данный сосуд является поставщиком BoucyCastle, и если подпись BC не проверена, JRE не доверяет провайдеру. –

+0

Как ваше подписание 'BoucyCastle' аннулирует оригинальную подпись? – trashgod

ответ

0

Я сделал для этого небольшой скрипт для муравьев. идея проста:

  • для каждой баночки

    • содержания экстракта в временном каталоге
    • повторно банки за исключением * .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> 
    

Смежные вопросы