Não, o seu armazenamento de chaves NÃO contém uma chave privada. Veja onde diz trustedCertEntry
? Um certificado confiável NÃO é uma chave privada, é apenas um certificado e um certificado não é uma chave privada. Um servidor SSL / TLS requer uma chave privada e a cadeia de certificados correspondente; um certificado sozinho não pode ser usado para executar o protocolo, portanto, seu servidor não pode aceitar nenhuma conexão HTTPS e, portanto, qualquer navegador que tente se conectar com HTTPS (provavelmente após ser redirecionado de HTTPS) falhará. Um P7B não contém uma chave privada, embora possa conter vários certificados enquanto um CER normalmente contém apenas um. (Em contraste, um cliente geralmente precisa apenas do (s) certificado (s) 'raiz' da CA e não da chave privada, a menos que a opção 'autenticação do cliente' seja usada.
Você precisa de um privateKeyEntry
que contenha a chave privada E uma cadeia de certificados para essa chave e seus nomes de host desejados . Existem duas maneiras (com um variante) para fazer isso para Java:
1: Use keytool
para gerar uma nova chave privada (com certificado autoassinado fictício) em um JKS e crie uma CSR (Solicitação de Assinatura de Certificado, ou apenas Solicitação de Certificado) para ela. Envie o CSR e outras coisas, conforme necessário, como o pagamento a uma Autoridade de Certificação (CA) para obter um certificado adequado, geralmente acompanhado de pelo menos um certificado 'intermediário' ou 'intermediário' que pode ser necessário para os clientes confiarem no certificado. Use keytool
para importar o certificado / cadeia para o mesmo JKS e entrada que já contém a chave privada (substituindo o certificado auto-assinado fictício); opcionalmente, você também pode importar o (s) certificado (s) da cadeia como entradas de confiança.
O método 1 é canônico e é descrito, geralmente de forma repetida, no site de cada fornecedor certificado que eu já vi, tanto CAs quanto revendedores; Eu não sei como você perdeu todos eles. Observe que essas descrições geralmente se referem ao Tomcat, o servidor da Web baseado em Java mais usado; o componente do servidor web Jboss, agora marcado como Wildfly, é na verdade uma bifurcação do Tomcat. Aqui estão os dois primeiros google me encontra:
* link
* link
2A: Use outras ferramentas (como Windows ou MacOS ou OpenSSL) para gerar uma chave privada e obter um certificado adequado, geralmente usando um CSR, de uma CA e incluindo sua cadeia. Conforme aplicável, exporte / converta / combine a cadeia privada e a cadeia de certificados em um arquivo PKCS12 (também chamado de PFX no Microsoft-land) e, provavelmente, use keytool -importkeystore
para converter o PKCS12 em JKS. (No Java 8, em muitos casos, é possível usar um PKCS12 diretamente, sem convertê-lo em JKS, e espera-se que o Java 9 incentive isso.)
2B: Se você já tiver um certificado / cadeia gerado por chave privada e obtido com outras ferramentas, apenas coloque-os em um PKCS12 e provavelmente converta em JKS como acima.
Observe que algumas outras GUIs, como Microsoft, MacOS e Firefox, concentram-se no certificado: elas exibem um certificado confiável como apenas 'certificado' e uma combinação de chave privada + certificado como 'certificado com chave privada'. Mas a diferença ainda é vital; um servidor deve ter a chave privada e tentar usar um 'certificado sem chave privada' falhar. Java, em vez disso, tem diferentes tipos de entradas de keystore - embora, para alguns keystores, esses tipos não sejam armazenados diretamente.