Eu tenho isso em uma configuração do ActiveMQ:
<sslContext>
<sslContext keyStore="file:/home/alex/work/amq/broker.ks"
keyStorePassword="password" trustStore="file:${activemq.base}/conf/broker.ts"
trustStorePassword="password"/>
</sslContext>
Eu tenho um par de certificados X.509 e um arquivo de chave.
Como importo esses dois para usá-los nos conectores SSL e SSL + stomp? Todos os exemplos que eu poderia pesquisar no google sempre geram a chave eles mesmos, mas eu já tenho uma chave.
eu tentei
keytool -import -keystore ./broker.ks -file mycert.crt
mas isso importa apenas o certificado e não o arquivo de chave e resulta em
2009-05-25 13:16:24,270 [localhost:61612] ERROR TransportConnector - Could not accept connection : No available certificate or key corresponds to the SSL cipher suites which are enabled.
Tentei concatenar o certificado e a chave, mas obtive o mesmo resultado.
Como importo a chave?
Respostas:
Acredite ou não, o keytool não fornece funcionalidades básicas, como a importação de chave privada para o keystore. Você pode tentar esta solução alternativa ao mesclar o arquivo PKSC12 com chave privada em um keystore.
Ou apenas use o KeyMan mais fácil de usar da IBM para manipulação de keystore em vez de keytool.exe.
fonte
Eu usei as duas etapas a seguir que encontrei nos comentários / postagens vinculados nas outras respostas:
Etapa 1: Converter o certificado x.509 e a chave em um arquivo pkcs12
Nota: Certifique-se de colocar uma senha no arquivo pkcs12 - caso contrário, você receberá uma exceção de ponteiro nulo ao tentar importá-lo. (Caso alguém mais tenha essa dor de cabeça). ( Obrigado jocull! )
Nota 2: convém adicionar a
-chain
opção para preservar a cadeia completa de certificados. ( Obrigado Mafuba )Etapa 2: Converter o arquivo pkcs12 em um keystore Java
Acabado
OPCIONAL Etapa zero: criar certificado autoassinado
Felicidades!
fonte
-CAfile ca.crt -caname root
não gerou corretamente os certificados da CA. Em vez disso, eu usei-certfile concatenedCAFiles.pem
-chain
argumento com o openssl para incluir a cadeia completa de certificados no seu arquivo pfx / p12, se você desejar no seu armazenamento de chaves.pvk2pfx
(uma ferramenta VS padrão disponível nocmd
prompt VS ) emitirá um -.pfx
equivalente a a.p12
. O conselho de @ jocull ainda é relevante; coloque uma senha nela. Não éopenssl
necessário..p12
chave, a senha do.p12.
Tomcat original falharájava.security.UnrecoverableKeyException: Cannot recover key
. Em outras palavras: se você precisa executar-deststorepass changeit -srcstorepass some-password
com diferentes senhas, então você deve incluir-destkeypass changeit
(com mesma senha-deststorepass
)O Keytool no Java 6 possui este recurso: Importando chaves privadas para um keystore Java usando o keytool
Aqui estão os detalhes básicos desse post.
Converta o certificado existente em um PKCS12 usando o OpenSSL. Uma senha é necessária quando solicitada ou o segundo passo irá reclamar.
Converta o PKCS12 em um arquivo Java Keystore.
fonte
E mais um:
fonte
Primeiro converta para p12:
Crie um novo JKS a partir da p12:
fonte
Sim, é realmente um fato triste que o keytool não tenha funcionalidade para importar uma chave privada.
Para constar, no final eu fui com a solução descrita aqui
fonte
No meu caso, eu tinha um arquivo pem que continha dois certificados e uma chave privada criptografada para ser usada na autenticação SSL mútua. Então, meu arquivo pem ficou assim:
Aqui está o que eu fiz:
Divida o arquivo em três arquivos separados, para que cada um contenha apenas uma entrada, começando com "--- BEGIN .." e terminando com "--- END ..". Vamos supor que agora temos três arquivos: cert1.pem cert2.pem e pkey.pem
Converta pkey.pem no formato DER usando o openssl e a seguinte sintaxe:
openssl pkcs8 -topk8 -nocrypt -in pkey.pem -inform PEM -out pkey.der -outform DER
Observe que, se a chave privada estiver criptografada, você precisará fornecer uma senha (obtenha-a do fornecedor do arquivo pem original) para converter para o formato DER, o openssl solicitará a senha da seguinte maneira: "insira um phraze de senha para pkey .pem: "Se a conversão for bem sucedida, você receberá um novo arquivo chamado" pkey.der "
Crie um novo armazenamento de chaves java e importe a chave privada e os certificados:
(opcional) Verifique o conteúdo do seu novo armazenamento de chaves:
keytool -list -keystore mykeystore -storepass password
(opcional) Teste seus certificados e chave privada do seu novo armazenamento de chaves em seu servidor SSL: (convém ativar a depuração como uma opção de VM: -Djavax.net.debug = all)
Por fim, registre seus certificados no HttpsURLConnection se planeja usá-lo:
fonte
HttpsURLConnection
vez de tentar escrever o seu próprio. (Outro problema com o seu exemplo é que você está usando o mesmo armazenamento de chaves como um armazenamento de chave e um truststore, o que nem sempre é uma boa idéia ...)Usando certificados Let's Encrypt
Supondo que você tenha criado seus certificados e chaves privadas com o Let's Encrypt em
/etc/letsencrypt/live/you.com
:1. Crie um arquivo PKCS # 12
Isso combina seu certificado SSL
fullchain.pem
e sua chave privadaprivkey.pem
em um único arquivopkcs.p12
,.Você será solicitado a fornecer uma senha para
pkcs.p12
.A
export
opção especifica que um arquivo PKCS # 12 será criado em vez de analisado (a partir do manual ).2. Crie o keystore Java
Se
keystore.jks
não existir, ele será criado contendo opkcs.12
arquivo criado acima. Caso contrário, você importarápkcs.12
para o keystore existente.Essas instruções são derivadas desta postagem do blog .
Veja mais sobre os diferentes tipos de arquivos do
/etc/letsencrypt/live/you.com/
.fonte
Com base nas respostas acima, veja como criar um novo keystore para seu servidor da Web baseado em Java, a partir de um certificado Comodo e uma chave privada criados de forma independente usando o keytool (requer JDK 1.6+)
Emita este comando e, no prompt de senha, digite somepass - 'server.crt' é o certificado do seu servidor e 'server.key' é a chave privada usada para emitir o CSR:
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name www.yourdomain.com -CAfile AddTrustExternalCARoot.crt -caname "AddTrust External CA Root"
Em seguida, use o keytool para converter o keystore p12 em um keystore jks:
keytool -importkeystore -deststorepass somepass -destkeypass somepass -destkeystore keystore.jks -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass somepass
Importe os outros dois certificados raiz / intermediários que você recebeu do Comodo:
Importe COMODORSAAddTrustCA.crt:
keytool -import -trustcacerts -alias cert1 -file COMODORSAAddTrustCA.crt -keystore keystore.jks
Importe COMODORSADomainValidationSecureServerCA.crt:
keytool -import -trustcacerts -alias cert2 -file COMODORSADomainValidationSecureServerCA.crt -keystore keystore.jks
fonte
Você pode usar estas etapas para importar a chave para um keystore existente. As instruções são combinadas a partir de respostas neste tópico e em outros sites. Essas instruções funcionaram para mim (o keystore java):
openssl pkcs12 -export -in yourserver.crt -inkey yourkey.key -out server.p12 -name somename -certfile yourca.crt -caname root
(Se necessário, coloque a opção -chain. Colocar isso falhou para mim). Isso solicitará a senha - você deve fornecer a senha correta, caso contrário, ocorrerá um erro (erro de cabeçalho ou erro de preenchimento, etc.).
*.jks
execução do arquivo:keytool -importkeystore -srckeystore server.p12 -srcstoretype PKCS12 -destkeystore yourexistingjavakeystore.jks -deststoretype JKS -deststorepass existingjavastorepassword -destkeypass existingjavastorepassword
(Muito importante - não deixe de fora os parâmetros deststorepass e destkeypass.)
fonte
As respostas anteriores apontam corretamente que você só pode fazer isso com as ferramentas JDK padrão convertendo o arquivo JKS no formato PKCS # 12 primeiro. Se você estiver interessado, montei um utilitário compacto para importar chaves derivadas do OpenSSL em um keystore no formato JKS sem precisar converter o keystore no PKCS # 12 primeiro: http://commandlinefanatic.com/cgi-bin/showarticle. cgi? article = art049
Você usaria o utilitário vinculado assim:
(assine o CSR, volte para localhost.cer)
fonte
Se você possui um arquivo PEM (por exemplo
server.pem
) contendo:então você pode importar o certificado e a chave para um keystore JKS assim:
1 ) Copie a chave privada do arquivo PEM em um arquivo ascii (por exemplo
server.key
)2 ) Copie o certificado do arquivo PEM para um arquivo ascii (por exemplo
server.crt
)3 ) Exporte o certificado e a chave para um arquivo PKCS12:
-CAfile
opção .winpty
ao início do comando para que a senha de exportação possa ser inserida.4 ) Converta o arquivo PKCS12 em um keystore JKS:
srcstorepass
senha deve corresponder à senha de exportação da etapa 3)fonte
O que eu estava tentando conseguir era usar a chave privada e o certificado já fornecidos para assinar a mensagem que estava indo para algum lugar que precisava ter certeza de que a mensagem vinha de mim (as chaves privadas assinam enquanto as chaves públicas criptografam).
Então, se você já possui um arquivo .key e um arquivo .crt?
Tente o seguinte:
Etapa 1: Converta a chave e o certificado em arquivo .p12
Etapa 2: importe a chave e crie um arquivo .jsk com um único comando
Etapa 3: no seu java:
Se você precisar assinar alguma sequência usando esta chave, faça o seguinte:
Etapa 1: Converta o texto que você deseja criptografar
Etapa 2: obter a chave privada codificada em base64
Referências:
Programa final
fonte
Basta criar um keystore PKCS12, o Java pode usá-lo diretamente agora. De fato, se você listar um keystore no estilo Java, o próprio keytool o alertará para o fato de que o PKCS12 agora é o formato preferido.
Você deve ter recebido todos os três arquivos (server.crt, server.key, ca.crt) do seu provedor de certificados. Não sei ao certo o que "-caname root" realmente significa, mas parece ter que ser especificado dessa maneira.
No código Java, certifique-se de especificar o tipo certo de keystore.
Tenho meu certificado SSL emitido comodo.com funcionando bem no NanoHTTPD dessa maneira.
fonte
em um caso de curva elíptica e responder à pergunta importar um certificado x509 e uma chave privada existentes no keystore Java , consulte também este segmento Como ler a chave privada EC em java, no formato de arquivo .pem
fonte