Como criar um certificado com keytool?

Eu já olhei em 4 (sim, quatro) tutoriais e ainda não entendi como fazer isso funcionar.

Depois de configurar um segundo ouvinte HTTP configurado para HTTPS no meu servidor Glassfish 4.1.1, estou tentando criar um certificado, portanto, não recebo erros de segurança no meu navegador. O problema é que eu simplesmente não uso o keytool corretamente; isso só atrapalha e gera erros estranhos, seja o que for que eu faça. Por exemplo, ele não encontra alguns dos comandos que muitos guias recomendam.

Eu posso adivinhar que a ferramenta mudou no Java 8 ou outra coisa, eu realmente não sei.

A coisa é: eu quero criar um certificado, exportá-lo para o meu servidor Glassfish e ter HTTPS corretamente implementado e funcionando para fins de teste. O que devo fazer para isso?

EDIT: Sério, eu estou em apuros por causa disso. Eu simplesmente não consigo fazer nada: a senha cacerts não é o “changeit” típico, não consigo colocar minhas chaves fora do keystore e, portanto, não posso fazer nada com certificados.

Se tudo que você precisa fazer é criar um par de certificados auto-assinados … eu posso ser capaz de ajudar.

Em uma máquina Microsoft Windows:

  • Crie um diretório vazio e salve o script abaixo (GenTestCerts.ps1).
  • Edite o script e altere os valores de Alias ​​(e outras variables) para o que precisar.
  • Execute o script.

Copie o certificado do servidor (tomcat.server.net.p12) para onde quer que seu servidor espere que ele esteja.

Copie o Trust Store (truststore.p12) para onde quer que seu servidor espere que ele esteja.

Instale o certificado admin (tomcat-admin.p12) em sua Windows Key Store, aceitando a raiz na seção Autoridades de Certificação Raiz Confiáveis.

<# This sample Windows PowerShell script will: 1.) Create a Certificate Authority 2.) Create a Server Certificate signed by the Certificate Authority 3.) Create a Client Certificate signed by the Certificate Authority 4.) Create a TrustStore containing the public Certificate Authority key The first section defines variables The second section does the work All Key Stores are PKCS12 The Server Certificate includes a Subject Alternative Name The command below uses the serverAlias as the serverDNS value, but may be changed to whatever you need You just have Java 7 (or higher) installed and keytool in your path #> <# Your Organizational Information #> $organizationalUnit="USN" $organization="NRL" $locality="Washington" $state="DC" $country="USA" <# Certificate Alias #> $authorityAlias="tomcat-root" $serverAlias="tomcat.server.net" $clientAlias="tomcat-admin" <# Subject Alternative Name #> $serverDNS="$serverAlias" <# Extensions #> $certAuthExtension="BasicConstraints:critical=ca:true,pathlen:10000" $altNameExtension="san=dns:$serverDNS" <# Trust Store #> $trustCertName="truststore" <# Key size and effective period #> $keySize="4096" $validity="365" <# Key and Store Password #> $certPassword="changeit" <# ------------------------------------------------------------------------------------------ #> <# ------------------ Use caution if you change anything below this line ------------------ #> <# ------------------------------------------------------------------------------------------ #> $authorityDN="CN=$authorityAlias,OU=$organizationalUnit,O=$organization,L=$locality,ST=$state,C=$country" $serverDN="CN=$serverAlias,OU=$organizationalUnit,O=$organization,L=$locality,ST=$state,C=$country" $clientDN="CN=$clientAlias,OU=$organizationalUnit,O=$organization,L=$locality,ST=$state,C=$country" rm "$authorityAlias.*" rm "$serverAlias.*" rm "$clientAlias.*" rm "$trustCertName.*" echo "" echo "Generating the Root Authority Certificate..." keytool -genkeypair -alias "$authorityAlias" -keyalg RSA -dname "$authorityDN" -ext "$certAuthExtension" ` -validity "$validity" -keysize "$keySize" -keystore "$authorityAlias.p12" -keypass "$certPassword" ` -storepass "$certPassword" -deststoretype pkcs12 echo "- Exporting Root Authority Certificate Public Key..." keytool -exportcert -rfc -alias "$authorityAlias" -file "$authorityAlias.cer" -keypass "$certPassword" ` -keystore "$authorityAlias.p12" -storepass "$certPassword" echo "" echo "Generating the Server Certificate..." echo "- Creating Key Pair" keytool -genkey -validity "$validity" -keysize "$keySize" -alias "$serverAlias" -keyalg RSA -dname "$serverDN" ` -ext "$altNameExtension" -keystore "$serverAlias.p12" -keypass "$certPassword" -storepass "$certPassword" ` -deststoretype pkcs12 echo "- Creating Certificate Signing Request" keytool -certreq -alias "$serverAlias" -ext "$altNameExtension" -keystore "$serverAlias.p12" -file "$serverAlias.csr" ` -keypass "$certPassword" -storepass "$certPassword" echo "- Signing Certificate" keytool -gencert -infile "$serverAlias.csr" -keystore "$authorityAlias.p12" -storepass "$certPassword" ` -alias "$authorityAlias" -ext "$altNameExtension" -outfile "$serverAlias.pem" echo "- Adding Certificate Authority Certificate to Keystore" keytool -import -trustcacerts -alias "$authorityAlias" -file "$authorityAlias.cer" -keystore "$serverAlias.p12" ` -storepass "$certPassword" -noprompt echo "- Adding Certificate to Keystore" keytool -import -keystore "$serverAlias.p12" -file "$serverAlias.pem" -alias "$serverAlias" -keypass "$certPassword" ` -storepass "$certPassword" -noprompt rm "$serverAlias.csr" rm "$serverAlias.pem" echo "" echo "Generating the Client Certificate..." echo "- Creating Key Pair" keytool -genkey -validity "$validity" -keysize "$keySize" -alias "$clientAlias" -keyalg RSA -dname "$clientDN" ` -keystore "$clientAlias.p12" -keypass "$certPassword" -storepass "$certPassword" -deststoretype pkcs12 echo "- Creating Certificate Signing Request" keytool -certreq -alias "$clientAlias" -keystore "$clientAlias.p12" -file "$clientAlias.csr" -keypass "$certPassword" ` -storepass "$certPassword" echo "- Signing Certificate" keytool -gencert -infile "$clientAlias.csr" -keystore "$authorityAlias.p12" -storepass "$certPassword" ` -alias "$authorityAlias" -outfile "$clientAlias.pem" echo "- Adding Certificate Authority Certificate to Keystore" keytool -import -trustcacerts -alias "$authorityAlias" -file "$authorityAlias.cer" -keystore "$clientAlias.p12" ` -storepass "$certPassword" -noprompt echo "- Adding Certificate to Keystore" keytool -import -keystore "$clientAlias.p12" -file "$clientAlias.pem" -alias "$clientAlias" -keypass "$certPassword" ` -storepass "$certPassword" -noprompt rm "$clientAlias.csr" rm "$clientAlias.pem" echo "" echo "Generating the Trust Store and put the Client Certificate in it..." keytool -importcert -alias "$authorityAlias" -file "$authorityAlias.cer" -keystore "$trustCertName.p12" ` -storepass "$certPassword" -noprompt echo "" echo "Removing Public Key Files..." rm "$authorityAlias.cer" 

Espero que isto ajude.

Melhor, Ace

Eu fiz isso em um gato muitos anos atrás, eu lembro de não acertar na primeira tentativa.

A menos que você queira gastar dinheiro (adivinhe que não há nenhum certificado grátis assinando sites por aí), eu recomendo um certificado auto-assinado.

Você já tentou este? http://docs.oracle.com/cd/E19798-01/821-1751/ghlgv/index.html