Assinatura de jars

6 respostas
B

Bom dia,

galera to com um problemão aqui… preciso assinar 26 arquivos da pasta lib do meu projeto. Por linha de comando eu ate consigo, mas por questões de praticidade e economia de tempo, ao atualizar o projeto eu já tento assinar pelo NetBeans 6.7.1 e é ai que a coisa complica… Dos 26 jars ele assina apenas 22, LOGO, ao executar via web start surge o erro: Os jars não foram assinados com o mesmo certificados
Os 4 jars recebem outrou tipo de assinatura, assim eu fico com 2 certificados diferentes 0o
Preciso mesmo é assinar todos pelo NetBeans, mas não sei o que esta acontecendo

Obrigado.

6 Respostas

B

Dei uma pesquisada aqui, e acho q tem q modificar as tags em jnlp-impl.xml para "FORÇAR" o NetBeans assinar determinado jar.. mas não sei onde modificar exatamente..

<!-- Security -->
    
    <target name="-security-props-check">
        <condition property="jnlp.signed.true">
            <istrue value="${jnlp.signed}"/>
        </condition>
    </target>
    
    <target name="-jnlp-init-keystore" depends="-jnlp-init-keystore-props,-check-keystore-exists" unless="jnlp.signjar.keystore.exists">
        <echo message="${application.vendor}" file="${helper.file}"/>
        <loadfile property="application.vendor.filtered" srcfile="${helper.file}">
            <filterchain>
                <deletecharacters chars=","/>
            </filterchain>
        </loadfile>
        <delete file="${helper.file}"/>
        <property name="jnlp.signjar.vendor" value="CN=${application.vendor.filtered}"/>
        <echo message="Going to create default keystore in ${jnlp.signjar.keystore}"/>
        <genkey dname="${jnlp.signjar.vendor}" alias="${jnlp.signjar.alias}" keystore="${jnlp.signjar.keystore}"
            storepass="${jnlp.signjar.storepass}" keypass="${jnlp.signjar.keypass}"/>
    </target>
    
    <target name="-check-keystore-exists">
        <available property="jnlp.signjar.keystore.exists" file="${jnlp.signjar.keystore}"/>
    </target> 
    
    <target name="-jnlp-init-keystore-props">
        <property name="jnlp.signjar.keystore" value="${basedir}/build/roberto.ks"/>
        <property name="jnlp.signjar.storepass" value="cateto"/>
        <property name="jnlp.signjar.keypass" value="cateto"/>
        <property name="jnlp.signjar.alias" value="roberto"/>
    </target>

    <!-- Signing -->

    <target name="-test-signjars-task-available">
        <available property="signjars.task.available" 
            classname="org.netbeans.modules.javawebstart.anttasks.SignJarsTask" 
            classpath="${libs.JWSAntTasks.classpath}"/>
    </target> 
    
    <target name="-check-signing-possible" depends="-security-props-check,-test-signjars-task-available,-unavailable-signjars-task">
        <condition property="jnlp.signed.true+signjars.task.available">
            <and>
                <isset property="jnlp.signed.true"/>
                <isset property="signjars.task.available"/>
            </and>
        </condition>
    </target>
    
    <target name="-unavailable-signjars-task" depends="-test-signjars-task-available" unless="signjars.task.available">
        <echo message="Task required to sign JAR file is missing, probably the library 'JWS Ant Tasks' is missing either from shared folder or from IDE installation. JAR files will not be signed."/>
    </target>
    
    <target name="sign-jars" depends="-jnlp-init-keystore,-check-signing-possible" if="jnlp.signed.true+signjars.task.available">
        <taskdef name="sign-jars" classname="org.netbeans.modules.javawebstart.anttasks.SignJarsTask" 
            classpath="${libs.JWSAntTasks.classpath}"/>
        <sign-jars keystore="${jnlp.signjar.keystore}" storepass="${jnlp.signjar.storepass}" 
                keypass="${jnlp.signjar.keypass}" alias="${jnlp.signjar.alias}" mainjar="${dist.jar}" destdir="dist"
                codebase="${jnlp.codebase.value}" signedjarsprop="jnlp.signed.jars"
                componentsprop="jnlp.components">
            <fileset dir="dist/lib">
                <include name="*.jar"/>
            </fileset>
        </sign-jars>
    </target>

Alguém pode me ajudar, por favor !
Obrigado

J

Eu assino o jar fora do NB usando essa tag:

<signjar alias="${project.key.alias}" storepass="${project.key.password}" keystore = "${project.key.keystore}" lazy="true" verbose="false" jar="${dist.dir}/${project.name}.jar" > </signjar>
Tente localizar onde você poderia adicionar esses dados.

B

javer, mas ai só de construir o projeto ele já assina ou eu teria que fazer esse procedimento à parte ?

obrigado por enquanto.

J

Você tem que localizar onde ele executa o projeto (depois de construir), a assinatura deve ser feita antes de executar o projeto.

B

intendi, eu tentei adicionar essa tag em build.xml no meu projeto:

<target name="-post-jar"> <signjar keypass="cateto" alias="af" jar="${dist.jar}" keystore="afKeystore" storepass="cateto"/> </target>

e assim, ao construir o projeto no NB as biblitecas ele não assina

Na verdade, eu sempre assinei os jars quando eu configurava para WebStart mas agora ele simplesmente “ignora” 3 bibliotecas e gera o erro: os jars devem ser assinados pelo mesmo certificado… Nessas 3 bibliotecas, em META-INF existe dois arquivos SUN-MICR.DSA e SUN-MICR.SF, enquanto todas as outras tem ROBERTO.DSA e ROBERTO.SF

B

javer:
Eu assino o jar fora do NB usando essa tag:

<signjar alias="${project.key.alias}" storepass="${project.key.password}" keystore = "${project.key.keystore}" lazy="true" verbose="false" jar="${dist.dir}/${project.name}.jar" > </signjar>
Tente localizar onde você poderia adicionar esses dados.

Onde você coloca exatamente essa tag… ?
tentei muito aqui mas até agora nada =/

e o curioso é que quando contruo o projeto no nb, ele gera DOIS arquivos jnlp (launch.jnlp e jnlpcomponent1.jnlp). E no arquivo jnlpcomponent.jnlp ele declara JUSTAMENTE os jars que ele não consegue assinar :?

Criado 20 de novembro de 2009
Ultima resposta 24 de nov. de 2009
Respostas 6
Participantes 2