Como importar um certificado.cer para um teclado java?

Durante o desenvolvimento de um cliente webservice Java, deparei-me com um problema. Autenticação para o serviço 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 webservice está no formato .cer. Quando inspeciono o arquivo usando um editor de texto, ele tem o seguinte conteúdo:

-----BEGIN CERTIFICATE-----
[Some base64 encoded data]
-----END CERTIFICATE-----

posso importar este ficheiro como um certificado no Internet Explorer (sem ter de introduzir uma senha!) e usá-lo para autenticar com o serviço web.

fui capaz de importar este certificado para um teclado primeiro removendo a primeira e a última linha, convertendo para linhas novas do unix e rodando um descodificador base64. O ficheiro resultante pode ser importado para uma sequência de teclas (usando o comando keytool). Quando eu listar os itens no teclado, este item é do tipo trustedCertEntry. Por causa deste tipo de entrada (?) Eu não posso usar este certificado para autenticar com o webservice. Começo a pensar que o certificado fornecido é público. certificado que está a ser usado para Autenticação...

uma solução que encontrei é importar o certificado no IE e exportá-lo como um ficheiro .pfx. Este arquivo pode ser carregado como um teclado e pode ser usado para autenticar com o webservice. No entanto, não posso esperar que os meus clientes executem estes passos sempre que recebem um novo certificado. Então eu gostaria de carregar o arquivo .cer diretamente em Java. Alguma ideia?

informação adicional: a empresa por trás do serviço web disse-me que o certificado deve ser solicitado (usando IE & o site) do PC e do usuário que iria importar o certificado mais tarde.

Author: Steven Vascellaro, 2010-12-01

8 answers

    Se quiser autenticar-se, precisa da chave privada. Não há outra opção.
  • um certificado é uma chave pública com propriedades extras (como nome da empresa, País, etc...) que é assinado por alguma Autoridade Certificadora que garante que as propriedades anexadas são verdadeiras.
  • .Os ficheiros CER são certificados e não têm a chave privada. A chave privada é fornecida com A.Ficheiro de teclado PFX normalmente. Se você realmente autenticar é porque você já tinha importado o privado.
  • Normalmente podes importar .Certificados CER sem quaisquer problemas com

    keytool -importcert -file certificate.cer -keystore keystore.jks -alias "Alias"
    
 238
Author: lujop, 2015-08-21 11:56:56

Importar .cer o ficheiro do certificado obtido do navegador (abra o url e escave para mais detalhes) para cacerts keystore em java_home\jre\lib\security funcionou para mim, em vez de tentativas de gerar e usar o meu próprio keystore.

  1. vai para o teu java_home\jre\lib\security
  2. (Windows ) abrir a linha de comandos do administrador com cmd e CTRL+SHIFT+ENTER
  3. executar a ferramenta de chaves para importar o certificado:
    • (Substituir yourAliasName e path\to\certificate.cer respectivamente)

 ..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias yourAliasName -file path\to\certificate.cer

Desta forma, você não tem que especificar quaisquer opções adicionais JVM e o certificado deve ser reconhecido pelo JRE.

 49
Author: jediz, 2017-10-06 16:46:27
Aqui está o código que tenho usado para importação programaticamente .o cer entra num novo teclado.
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
//VERY IMPORTANT.  SOME OF THESE EXIST IN MORE THAN ONE PACKAGE!
import java.security.GeneralSecurityException;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;

//Put everything after here in your function.
KeyStore trustStore  = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null);//Make an empty store
InputStream fis = /* insert your file path here */;
BufferedInputStream bis = new BufferedInputStream(fis);

CertificateFactory cf = CertificateFactory.getInstance("X.509");

while (bis.available() > 0) {
    Certificate cert = cf.generateCertificate(bis);
    trustStore.setCertificateEntry("fiddler"+bis.available(), cert);
}
 42
Author: Patrick M, 2012-09-17 05:49:15
Não devias ter de fazer alterações ao certificado. Tem a certeza que está a executar o comando de importação correcto?

O seguinte funciona para mim:

keytool -import -alias joe -file mycert.cer -keystore mycerts -storepass changeit

Onde está o mycert.cer contém:

-----BEGIN CERTIFICATE-----
MIIFUTCCBDmgAwIBAgIHK4FgDiVqczANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
BhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAY
...
RLJKd+SjxhLMD2pznKxC/Ztkkcoxaw9u0zVPOPrUtsE/X68Vmv6AEHJ+lWnUaWlf
zLpfMEvelFPYH4NT9mV5wuQ1Pgurf/ydBhPizc0uOCvd6UddJS5rPfVWnuFkgQOk
WmD+yvuojwsL38LPbtrC8SZgPKT3grnLwKu18nm3UN2isuciKPF2spNEFnmCUWDc
MMicbud3twMSO6Zbm3lx6CToNFzP
-----END CERTIFICATE-----
 16
Author: dogbane, 2010-12-01 14:53:51

O certificado que já tem é 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 web possa autenticar o servidor.

Mas se, além disso, você precisa realizar autenticação de cliente com SSL, então você precisa obter o seu próprio certificado, para autenticar o seu cliente de serviço web. Para isso, você precisa criar um pedido de certificado; o processo envolve a criação de sua própria chave privada, e a chave pública correspondente, e anexar essa chave pública juntamente com algumas de suas informações (e-mail, nome, nome de domínio, etc) a um arquivo que é chamado de pedido de certificado. Em seguida, enviar a solicitação de certificado para a empresa, que já pediram-lhe para ele, e eles vão criar o certificado, ao assinar a chave pública com a sua chave privada, e eles vão enviar-lhe de volta um X509 arquivo com o certificado, que você pode agora adicionar ao seu armazenamento de chaves, e você estará pronto para se conectar a um serviço da web a usar o SSL que necessita de autenticação do cliente.

Para gerar o seu pedido de certificado, use "keytool-certreq-alias-ficheiro-teclado-Teclado-Teclado-Teclado ". Envia o ficheiro resultante para a empresa que o vai assinar.

Quando recuperar o seu certificado, execute "keytool-importcert-alias-keypass-keystore".

Pode ser necessário usar-câmara de ar em ambos os casos se o teclado estiver protegido (o que é uma boa ideia).

 6
Author: Chochos, 2010-12-01 16:21:40

Está disponível uma ferramenta GUI de código aberto em keystore-explorer.org

KeyStore Explorer

KeyStore Explorer é uma interface gráfica de código aberto para o Java command-line utilities keytool e jarsigner. KeyStore Explorer apresenta a sua funcionalidade, e muito mais, através de uma gráfica intuitiva interface.

Os ecrãs seguintes ajudarão (são do sítio oficial)

O ecrã por omissão que obtém ao executar o comando:

shantha@shantha:~$./Downloads/kse-521/kse.sh

enter image description here

E ir para a opção Examine e Examine a URL e depois dar o URL da web que deseja importar.

A janela do resultado será como em baixo se indicar o link do site do google. enter image description here

Este é um caso de uso e o resto é para o Utilizador(todos os créditos vão para o keystore-explorer.org)

 5
Author: Shantha Kumara, 2017-11-27 06:50:32

Aqui está um programa que usei para enviar em lote um monte de ficheiros crt na pasta actual para o teclado java. Basta gravar isto na mesma pasta que o seu certificado, e executá-lo assim:

./import_all_certs.sh

Import_all_certs.sh

KEYSTORE="$(/usr/libexec/java_home)/jre/lib/security/cacerts";

function running_as_root()
{
  if [ "$EUID" -ne 0 ]
    then echo "NO"
    exit
  fi

  echo "YES"
}

function import_certs_to_java_keystore
{
  for crt in *.crt; do 
    echo prepping $crt 
    keytool -import -file $crt -storepass changeit -noprompt --alias alias__${crt} -keystore $KEYSTORE
    echo 
  done
}

if [ "$(running_as_root)" == "YES" ]
then
  import_certs_to_java_keystore
else
  echo "This script needs to be run as root!"
fi
 3
Author: Brad Parks, 2017-03-02 19:01:34
É assim que isto funciona para mim:
  1. Salvar como .txt Os dados do certificado no seguinte formato num editor de texto

    -----INICIAR O CERTIFICADO----- [dados serializados pela microsoft] ----- CERTIFICADO FINAL-----

  2. abrir o navegador chrome (este passo também pode funcionar com outros navegadores) configuração > mostrar a configuração avançada > HTTPS/SSL > gerir os certificados Importa o .txt no Passo 1
  3. Seleccione e exporte esse certificado em formato codificado Base-64. Poupa - me .cer
  4. agora pode usar o keytool ou o Portecle para o Importar para a sua tecla java
 2
Author: code4kix, 2015-09-25 19:40:23