Pergunta

Uma pergunta simples com uma resposta bastante complicada:

Como você assina um Java Midlet para poder carregá-lo em um telefone celular com menos solicitações de segurança?

Foi útil?

Solução

Obtenha o software necessário

  1. SDK Java (JDK) de Sol (você já deveria ter isso)
  2. Kit de ferramentas sem fio Java (WTK) também de Sol
  3. Opcionalmente, obtenha e instale Formiga e Antena para permitir que você automatize sua construção (eu recomendo fortemente estes)

Importe um certificado existente (se você tiver um)

  1. Se você comprou um certificado da Verisign (ou de outro provedor), precisará importar o certificado para o seu keystore J2SE.
  2. Tente usar o seguinte comando keytool -import -alias {myalias} -file {mycertificate} (Não consegui testar isso porque não tenho um certificado adequado)
  3. Correr keytool -list para ver seu novo certificado
  4. Em seguida, você deve exportar o certificado para poder importá-lo para o seu telefone
  5. Correr keytool -export -alias {myalias} -file mycertificate.crt
  6. Importe o certificado para o seu telefone (veja detalhes abaixo)

Criar e importar um novo certificado (teste)

  1. Você precisa usar ferramenta-chave (do JDK)
  2. Eu usei o seguinte comando keytool -genkey -alias {myalias} -keyalg RSA -validity 365
  3. Isso solicitará uma senha do keystore, digite sua senha do keystore (se você tiver um keystore existente) ou aquela que deseja usar, se ainda não tiver uma
  4. Preencha todas as instruções sobre localização/nome da empresa, etc.
  5. Correr keytool -list para ver seu novo certificado
  6. Em seguida, você deve exportar o certificado para poder importá-lo para o seu telefone
  7. Correr keytool -export -alias {myalias} -file mycertificate.crt
  8. Importe o certificado para o seu telefone (veja detalhes abaixo)
C:\j2sdk1.4.2_08\bin>keytool -genkey -alias company -keyalg RSA -validity 365
Enter keystore password: password
What is your first and last name? [Unknown]: My Name
What is the name of your organizational unit? [Unknown]: company
What is the name of your organization? [Unknown]: company
What is the name of your City or Locality? [Unknown]: location
What is the name of your State or Province? [Unknown]: location2
What is the two-letter country code for this unit? [Unknown]: GB
Is CN=My Name, OU=company, O=company, L=location, ST=location2, C=GB correct? [no]: yes
Enter key password for (RETURN if same as keystore password):

Construir e empacotar o aplicativo

  1. Usar javac para construir seu MIDlet prestando atenção especial às opções classpath e bootclasspath (caso contrário a pré-verificação falhará).Também defini o alvo como 1.1 e a origem como 1.3
  2. Gere seu arquivo JAD Os atributos críticos no JAD são Midlet-Jar-Url, Midlet-Jar-Size e Midlet-Permissions, também incluímos Midlet-icon, microedição-configuração, microedição-perfil, name midlet, Midlet-Push-1 , Midlet-icon, Midlet description e Midlet-Version
  3. Gere o arquivo MANIFEST.MF com base em seu JAD, você deve remover MIDlet-Jar-Size e MIDlet-Jar-URL
  4. Ambas as tarefas podem ser concluídas usando a tarefa wtkJad Antenna
  5. Empacote e pré-verifique o aplicativo usando a tarefa de antena wtkPackage, você deve definir as propriedades classpath e bootclasspath corretamente, caso contrário, a pré-verificação falhará

Assine o aplicativo

  1. Assine o aplicativo usando jarsigner
  2. Correr jarsigner -keystore {mykeystore} -storepass (mypassword} {myjar} {myalias}
  3. Agora que você tem um jar assinado, precisa atualizar o MIDlet-Jar-Size no seu JAD
  4. Agora adicione o certificado ao JAD usando JadTool.jar do WTC
  5. Correr java -jar JadTool.jar -addcert -alias {myalias} -storepass {mypassword} -keystore {mykeystore} -inputjad {myinputjad} -outputjad {myoutputjad}
  6. Agora adicione a assinatura ao JAD novamente usando JadTool.jar
  7. Correr java -jar JadTool.jar -addjarsig -alias {myalias} -jarfile {myjar} -storepass {mypassword} -keypass {mypassword} -keystore {mykeystore} -inputjad {myinputjad} -outputjad {myoutputjad}

Implantação

  1. Implante-o em um servidor web com os tipos MIME configurados corretamente e baixe-o para o seu telefone e será um aplicativo de terceiros confiável
  2. Você também pode implantar aplicativos em telefones enviando JAR e JAD para o telefone por Bluetooth ou infravermelho ou por um cabo, dependendo dos recursos do telefone.Nos telefones Nokia, os arquivos aparecem na sua caixa de entrada SMS

Instalando o certificado no telefone

  1. Importe o certificado para o seu telefone, no Windows XP SP2, eu poderia fazer isso clicando com o botão direito do lado do arquivo e selecionando "Enviar para o Bluetooth Disposition", você também poderá enviar arquivos por cabo ou infravermelho (IR).Observação:Eu não encontrei de qualquer maneira de importar um certificado em um telefone da série 40
  2. Depois que o certificado é instalado, ele precisa ser autorizado para "instalação do aplicativo".No meu telefone (Nokia 6680), isso está em ferramentas-> Configurações-> Gerenciamento de certificados-> Configurações de confiança, liguei tudo, mas acho que "instalação do aplicativo" é tudo o que você precisa

Problemas comuns

  1. Aplicativo não instalado usando o JAD:O aplicativo só será confiável se for instalado usando o JAD; o aplicativo ainda será instalado a partir do jar, mas não será confiável.
  2. Configurações de confiança do aplicativo não definidas:Depois que seu aplicativo estiver instalado, você precisará especificar quanta confiança será dada a ele (ele não recebe todas as permissões por padrão).Em um telefone Nokia Série 60, eles são encontrados no aplicativo.Gerente.
  3. Certificado raiz ausente no telefone:O certificado Java Verified e/ou certificados Verisign estão faltando em alguns telefones, verifique em Ferramentas-> Configurações-> Gerenciamento de certificados para obter o certificado relevante
  4. Falha na autorização:- Há uma série de possíveis razões por trás disso, aqui estão as que encontrei
    1. Certificado ausente no telefone, verifique novamente se o seu certificado está instalado e foi marcado como confiável para instalações de aplicativos no Gerenciamento de certificados
    2. Reinício:Desinstale o aplicativo completamente e reinicie o telefone, tente retirar a bateria e o SIM também, muitas vezes as coisas ficam complicadas, especialmente se você reinstalou muito sem desinstalar primeiro
    3. Incompatibilidade JAD/JAR:Verifique novamente o tamanho do aplicativo no JAD, lembre-se de que o número de bytes é importante, NÃO o tamanho do disco
    4. Cache do navegador:Se você estiver instalando remotamente, limpe o cache do navegador antes de instalar
    5. Ouvi, mas não verifiquei, que quebras de linha no MIDlet-Permissions pode causar problemas, mas parece-me ok no Nokia 6680/6630/6230i (pode depender do firmware?)
    6. O MIDlet-Permissions atributo é a causa de muitos problemas (especialmente porque a documentação geralmente está errada/ausente ou diferente dependendo do telefone), tente omiti-lo primeiro e adicione permissões uma de cada vez.Alguns telefones reclamarão de permissões que não suportam, outros irão ignorá-las
  5. Há um bug em alguns firmwares anteriores do Nokia 6600 que impedem a instalação de MIDlets confiáveis
  6. Certificado ainda não válido:Se você mesmo gerou o certificado, ele pode ter uma data de início de validade amanhã, e também se as datas do seu PC e telefone forem diferentes, você pode estar fora do período de validade do certificado
  7. Sem gerenciamento de certificados em telefones Série 40, você pode instalar um aplicativo assinado, mas o comportamento é estranho com certificados autoassinados
  8. Problemas do JadTool:Eu não tive nenhum desses problemas, mas muitas outras pessoas tiveram
    1. "Tenho problemas se tento usar o jadtool manualmente.Eu tenho uma cadeia de certificados e não consigo adicionar o segundo certificado ao arquivo JAD usando qualquer jadtool WTK.A parte interessante, porém, é que posso assinar o midlet com êxito usando qualquer uma das mesmas interfaces GUI do WTK - eles adicionam o segundo certificado corretamente.Meus passos:
      1. Use 1.4.2_06 jarsigner.exe para assinar o jar
      2. Use jadtool WTK (2.2 ou 2.3 beta) para addcert com certnum 1
      3. Se eu chamar jadtool para addcert com certnum 2, o mesmo certificado será inserido como certificado 1-2, presumo que estou fazendo algo incorreto, pois a interface gráfica do WTK parece estar funcionando bem "
    2. "Recebi uma postagem no grupo de notícias KVM sobre o assunto que afirma que há um bug no jadtool e o autor afirma ter enviado um relatório de bug e postado um patch: http://archives.java.sun.com/cgi-bin/wa?A2=ind0508&L=kvm-interest&F=&S=&P=9858 Uma observação interessante que também foi postada foi que os parâmetros do certificado JAD são estáticos, então, depois de obtê-los corretamente do WTK, você pode colocá-los estaticamente no script ant.
    3. "Estou tentando assinar um MIdlet para o dispositivo Nokia 6620.Estou usando um certificado Verisign Code Signing que, na verdade, contém dois certificados (usuário e CA intermediário).Estou usando a ferramenta de assinatura WTK 2.2.Você sabe se esta ferramenta suporta dois certificados ao assinar?A assinatura é adicionada ao arquivo JAD com dois certificados, mas tenho recebido um erro de segurança durante a instalação.Verifiquei o dispositivo e há diferentes certificados raiz instalados para Verisign, mas ele ainda falha!
    4. "Se desejar, você pode baixar o kit de desenvolvedor sprintpcs, pois ele suporta certificados duplos (http://developer.sprintpcs.com).No entanto, nunca consegui esse certificado para funcionar no telefone Nokia (6620/cingular), embora funcione em telefones sprint (com root de desenvolvedor habilitado).No final das contas, só consegui fazer as coisas funcionarem criando o certificado conforme descrito neste blog e instalando-o no telefone.Estranhamente, mesmo que o certificado raiz do meu certificado assinado por versign *estivesse* no telefone 6620, ele ainda assim nunca instalaria meu MIDlet como você imagina que deveria."
  9. Telefones antigos (6230/i, 6682) não suportam certificados x509, o WPKI foi sugerido como uma possível solução, mas não investiguei isso
  10. Conexões de soquete podem ser problemáticas (http://discussion.forum.nokia.com/forum/showthread.php?t=68306 ) possivelmente devido à infraestrutura WAP e aos serviços prestados por um operador.HTTP é um protocolo muito mais seguro de usar
  11. "Fique online e verifique a validade da inscrição":Sim não.Se eu clicar no botão sim do telefone, recebo o seguinte erro:"Certificado revogado para este aplicativo" e a instalação falha.Para corrigir isso, vá para Ferramentas -> Gerenciador -> Menu -> Configurações -> Verificação de certificado online [Ativado / Desativado / Obrigatório] Há também uma configuração de endereço padrão.Se a configuração de controle on-line for necessária, a verificação falhará se não houver endereço padrão.ver http://discussion.forum.nokia.com/forum/showthread.php?t=71071

Domínios Confiáveis

  1. Existem 4 domínios de confiança diferentes no MIDP2 (fabricante, operador, terceiro confiável e não confiável).Terceiros de confiança são os únicos que realmente nos servem. Oferece as seguintes opções no meu Nokia 6680 (Vodafone UK):
  2. Acesso à rede:Não é permitido, pergunte todas as vezes, peça mensagens pela primeira vez:Não permitido, pergunte sempre App Início automático:Não permitido, Pergunte sempre, Pergunte pela primeira vez Conectividade:Não permitido, Pergunte sempre, Pergunte pela primeira vez, Sempre permitido Multimédia:Não permitido, Pergunte sempre, Pergunte pela primeira vez Leia os dados do usuário:Não permitido, Pergunte sempre, Pergunte pela primeira vez, Sempre permitido Editar dados do usuário:Não permitido, Perguntar sempre, Perguntar na primeira vez, Sempre permitido
  3. Essas configurações são definidas pela operadora e pelo fabricante do telefone e, portanto, variam entre o telefone, o fabricante e a operadora.

Problemas não resolvidos

  1. Consegui assinar o JAD com este formato usando os utilitários J2ME WTK, mas ao tentar instalá-lo no dispositivo recebo uma mensagem "Falha na autenticação do aplicativo 909".

Exemplo de JAD

MIDlet-Jar-URL: MyApp.jar
MIDlet-Jar-Size: 201365
MIDlet-Name: MyApp
MIDlet-Vendor: EC1M
MicroEdition-Profile: MIDP-2.0
MicroEdition-Configuration: CLDC-1.1
MIDlet-Icon: logo.png
MIDlet-Push-1: sms://:6553,net.ec1m.MyApp.midp.MyAppMIDlet,*
MIDlet-Description: MyApp MIDlet
MIDlet-Permissions: javax.microedition.io.PushRegistry,javax.microedition.io.Connector.sms...
MIDlet-Version: 1.0.67 MIDlet-1: MyApp, logo.png,net.ec1m.MyApp.midp.MyAppMIDlet
MIDlet-Certificate-1-1: MIICODCCAaECBEKqpfswDQYJKoZIhvcNAQEEBQAwYz...=
MIDlet-Jar-RSA-SHA1: EUsAch/.../hEZOsJsiCjBOhNs/3FSw4=

Exemplo de manifesto

Manifest-Version: 1.0
MIDlet-Name: MyApp  
Created-By: 1.4.2_05-b04 (Sun Microsystems Inc.)
MIDlet-Push-1: sms://:6553,net.ec1m.MyApp.midp.MyAppMIDlet,*
MIDlet-1: MyApp, logo.png, net.ec1m.MyApp.midp.MyAppMIDlet
MicroEdition-Configuration: CLDC-1.1
Ant-Version: Apache Ant 1.6.2
MIDlet-Icon: logo.png
MIDlet-Vendor: EC1M
MIDlet-Permissions: javax.microedition...
MIDlet-Version: 1.0.67
MicroEdition-Profile: MIDP-2.0
MIDlet-Description: MyApp MIDlet

Exemplo de arquivo de construção AntEu coloquei o nosso EC1M arquivo de construção ant em nosso site para (espero) tornar tudo isso um pouco mais fácil para você.Outros recursosEsse Perguntas frequentes no Fórum Nokia vale a pena ler.

Outras dicas

Etapa 1: Crie solicitação de RSE que possa ser aumentada por

1) Creating keystore and using that generate CSR file.
2) Perform steps given by certificate authority and download CSR and private key files.

Etapa2: forneça suas informações à autoridade de certificação para verificação.

Etapa 3: Você receberá um certificado para assinatura de código.

Etapa 4: você precisa baixar o certificado intermediário junto com o certificado raiz.

Etapa 5: Agora você terá Your_Domain_Name.crt, intcertca.crt, trustedroot.crt

Now you need to create a chained certificate by combining all above certificates.

1) Open a text editor (such as wordpad) and paste the entire body of each certificate into one text file in the following order:

    The Primary Certificate - your_domain_name.crt
    The Intermediate Certificate - IntCertCA.crt
    The Root Certificate - TrustedRoot.crt
    Make sure to include the beginning and end tags on each certificate. The result should look like this:

    -----BEGIN CERTIFICATE----- 
    (Your Primary SSL certificate: your_domain_name.crt) 
    -----END CERTIFICATE----- 
    -----BEGIN CERTIFICATE----- 
    (Your Intermediate certificate: IntCertCA.crt) 
    -----END CERTIFICATE----- 
    -----BEGIN CERTIFICATE----- 
    (Your Root certificate: TrustedRoot.crt) 
    -----END CERTIFICATE-----

    Save the combined file as your_domain_name.pem. The .pem file is now ready to use.

Etapa 6: Importar chave privada para o seu your_domain_name.pem

    openssl pkcs12 -export -in your_domain_name.pem -inkey your_private_key.key -out output_file_name.p12 -name your_alias


    NOTE: PLEASE REMOVE \ FROM FOLLOWING COMMANDS AND EXECUTE ( \ IS BASICALLY COMMAND CONTINUETY )

Etapa 7: Crie keystore a partir de output_file_name.p12

    keytool -importkeystore \
     -deststorepass changeit -destkeypass changeit -destkeystore your_domain_keystore.ks \
     -srckeystore output_file_name.p12 -srcstoretype PKCS12 -srcstorepass your_store_password \
     -alias your_alias

Etapa 8: Nota: Por favor, faça o backup do seu arquivo JAD antes de acionar os seguintes comandos.

    Add your certificates to your your_midlet_name.jad file.

    java -jar JadTool.jar -addcert -alias your_alias \
    -storepass your_store_password \
    -keystore your_domain_keystore.ks \
    -inputjad your_midlet_name.jad -outputjad your_midlet_name.jad      

Etapa 9: Nota: Por favor, faça o backup do seu arquivo JAD antes de acionar os seguintes comandos.

    Sign your midlet, also use your_midlet_name.jad file generated from Step8.

    java -jar JadTool.jar -addjarsig \
    -alias your_store_password \
    -storepass your_store_password \
    -keypass your_store_password \
    -keystore your_domain_keystore.ks \
    -inputjad your_midlet_name.jad -outputjad your_midlet_name.jad
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top