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.
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"
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.
- vai para o teu
java_home\jre\lib\security
- (Windows ) abrir a linha de comandos do administrador com
cmd
e CTRL+SHIFT+ENTER - executar a ferramenta de chaves para importar o certificado:
- (Substituir
yourAliasName
epath\to\certificate.cer
respectivamente)
- (Substituir
..\..\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.
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);
}
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-----
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).
Está disponível uma ferramenta GUI de código aberto em keystore-explorer.org
Os ecrãs seguintes ajudarão (são do sítio oficial)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.
O ecrã por omissão que obtém ao executar o comando:
shantha@shantha:~$./Downloads/kse-521/kse.sh
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.
Este é um caso de uso e o resto é para o Utilizador(todos os créditos vão para o keystore-explorer.org)
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
- Salvar como .txt Os dados do certificado no seguinte formato num editor de texto
-----INICIAR O CERTIFICADO----- [dados serializados pela microsoft] ----- CERTIFICADO FINAL-----
- 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
- Seleccione e exporte esse certificado em formato codificado Base-64. Poupa - me .cer
- agora pode usar o keytool ou o Portecle para o Importar para a sua tecla java