Durante o desenvolvimento de um cliente de serviço web Java, encontrei um problema. A autenticação para o serviço da web está usando um certificado de cliente, um nome de usuário e uma senha. O certificado de cliente que recebi da empresa por trás do serviço da web está em .cer
formato. Quando inspeciono o arquivo usando um editor de texto, ele possui o seguinte conteúdo:
-----BEGIN CERTIFICATE-----
[Some base64 encoded data]
-----END CERTIFICATE-----
Posso importar esse arquivo como um certificado no Internet Explorer (sem precisar digitar uma senha!) E usá-lo para autenticar no serviço da web.
Consegui importar esse certificado para um keystore, eliminando primeiro a primeira e a última linha, convertendo em novas linhas unix e executando uma decodificação base64. O arquivo resultante pode ser importado para um keystore (usando o keytool
comando). Quando eu listar as entradas no armazenamento de chaves, essa entrada é do tipo trustedCertEntry
. Devido a esse tipo de entrada (?), Não posso usar este certificado para autenticar com o serviço da web. Estou começando a pensar que o certificado fornecido é um certificado público que está sendo usado para autenticação ...
Uma solução alternativa que encontrei é importar o certificado no IE e exportá-lo como um .pfx
arquivo. Este arquivo pode ser carregado como um keystore e pode ser usado para autenticar com o serviço da web. No entanto, não posso esperar que meus clientes executem essas etapas sempre que receberem um novo certificado. Então, eu gostaria de carregar o .cer
arquivo diretamente no Java. Alguma ideia?
Informações adicionais: a empresa responsável pelo serviço da web me disse que o certificado deveria ser solicitado (usando o IE e o site) do PC e do usuário que importaria o certificado posteriormente.
fonte
A importação do
.cer
arquivo de certificado baixado do navegador (abra o URL e procure por detalhes) no keystore do cacertsjava_home\jre\lib\security
funcionou para mim, em oposição às tentativas de gerar e usar meu próprio keystore.java_home\jre\lib\security
cmd
e CTRL+ SHIFT+ENTERyourAliasName
epath\to\certificate.cer
respectivamente)Dessa forma, você não precisa especificar nenhuma opção adicional da JVM e o certificado deve ser reconhecido pelo JRE.
fonte
java_home\jdk_x.xx\jre\lib\security
Para um caminho absoluto, use barra invertida, por exemplo,"C:\myCert.crt"
aspas são opcionais se o caminho não contiver espaços em branco.Aqui está o código que eu tenho usado para importar programaticamente arquivos .cer para um novo KeyStore.
fonte
Você não precisa fazer alterações no certificado. Tem certeza de que está executando o comando de importação correto?
O seguinte funciona para mim:
onde mycert.cer contém:
fonte
Uma ferramenta GUI de código aberto está disponível em keystore-explorer.org
As telas a seguir ajudarão (são do site oficial)
Tela padrão que você obtém executando o comando:
E vá para
Examine
eExamine a URL
opção e, em seguida, dar o URL da web que você deseja importar.A janela de resultados será como abaixo se você der o link do site do google.
Esse é um dos casos de uso e o restante depende do usuário (todos os créditos estão no keystore-explorer.org )
fonte
O certificado que você já possui provavelmente é o certificado do servidor ou o certificado usado para assinar o certificado do servidor. Você precisará dele para que seu cliente de serviço da web possa autenticar o servidor.
Mas se, além disso, você precisar executar autenticação de cliente com SSL, precisará obter seu próprio certificado para autenticar seu cliente de serviço da web. Para isso, você precisa criar uma solicitação de certificado; o processo envolve a criação de sua própria chave privada e a chave pública correspondente e a anexação dessa chave pública juntamente com algumas informações (email, nome, nome de domínio etc.) a um arquivo chamado solicitação de certificado. Em seguida, você envia a solicitação de certificado para a empresa que já solicitou, e eles criarão seu certificado assinando sua chave pública com sua chave privada e enviarão de volta um arquivo X509 com seu certificado, que você pode agora adicione ao seu keystore e você estará pronto para se conectar a um serviço da Web usando SSL, exigindo autenticação do cliente.
Para gerar sua solicitação de certificado, use "keytool -certreq -alias -file -keypass -keystore". Envie o arquivo resultante para a empresa que o assinará.
Quando você receber seu certificado de volta, execute "keytool -importcert -alias -keypass -keystore".
Pode ser necessário usar -storepass nos dois casos, se o keystore estiver protegido (o que é uma boa ideia).
fonte
Aqui está um script que eu usei para importar em lote um monte de arquivos crt no diretório atual para o keystore java. Salve isso na mesma pasta que o seu certificado e execute-o da seguinte maneira:
import_all_certs.sh
fonte
Veja como isso funcionou para mim:
fonte