Instalando um certificado SSL no Tomcat (Windows)

  1. Para adquirir um certificado SSL é necessário gerar uma requisição da assinatura do certificado (CSR - Certificate Signing Request) que é um arquivo criptografado que contém a chave pública, nome, localidade e URL (endereço Web) de sua organização. Na criação de um CSR deverá ser informado um arquivo inexistente em um caminho válido, este arquivo é o Keystore e o CSR é o inicio do Keystore. Para gerar o CSR utilize a ferramenta Keytool do SDK localizada em C:\Program Files\Java\jdk1.5.0_02\bin

Exemplo:

Comando

keytool -genkey -alias certificado -keyalg RSA -keystore C:\Certificado\Keystore\definaonome.kdb

Preenchimento dos dados

What is your first and last name? This is the Common Name Field - The Fully Qualified Domain Name MUST be entered here
[Unknown]: www.dominio.com.br
What is the name of your organizational unit?
[Global Sign]: Razão da Empresa
What is the name of your organization?
[Global Sign]: Razão da Empresa
What is the name of your City or Locality?
[London]: Cidade
What is the name of your State or Province?
[London]: Estado
What is the two-letter country code for this unit?
[GB]: País

Notas

  • Lembrando que o caminho para o Keystore C:\Certificado\Keystore é válido e o arquivo definaonome.kdb não existe e será gerado com o CSR após a execução do comando.

  • Fazer imediatamente um backup do arquivo C:\Certificado\Keystore\definaonome.kdb, pois o certificado será gerado para apenas essa chave plública e no caso de perda do arquivo ocassionando uma nova geração.

  • Na criação do Keystore é solicitado a criação de uma senha, a mesma será utilizada durante todo o processo de implatação do certificado, portando guarde a senha para uma futura consulta.

  • No comando é utilizado o parâmetro -alias certificado, quando receber o certificado da certificadora, o certificado deverá ser importado para o alias certificado.

  1. A requisição foi gerada dentro do keystore informado, agora é o hora de gerar o arquivo CSR com os dados da requisição que está no keystore. O arquivo será utilizado para efetuar o pedido do certificado juntamente com a certificadora. Algumas certificadoras possibilitam a inclução direta do arquivo na solicitação on-line do certificado e outras disponibilizam um campo para ser incluído o conteúdo do arquivo csr gerado, o conteúdo completo desde -----BEGIN NEW CERTIFICATE REQUEST----- até -----END NEW CERTIFICATE REQUEST-----

Exemplo:

Comando

keytool -certreq -keyalg RSA -alias certificado -file C:\Certificado\Keystore\definaonome.csr -keystore C:\Certificado\Keystore\nomedefinidonocomando1.kdb

Notas

  • No comando é utilizado o parâmetro -alias certificado, este alias obviamente tem que ser o mesmo alias utilizado no comando do passo 1.

  • O caminho para o .csr C:\Certificado\Keystore é válido e o arquivo definaonome.csr não existe e será gerado com após a execução do comando.

  • A senha solicitada na execução do comando a senha do keystore que foi cadastrada no comando do passo 1.

  1. Efetuar o pedido online do certificado juntamente com a certificadora seguindo as instruções do próprio site.

  2. Todo certificado SSL segue uma estrutura, uma sequência, que se resume em gerado para e gerado por. Exemplo, o certificado gerado para www.dominio.com.br foi gerado por Certificadora Intermediario e o certificado gerado para Certificadora Intermediario foi gerado por Certificadora Root, portanto para o funcionamento do seu certificado é necessário instalar (importar para o keystore) todos os certificados que fazem parte da estrutura, também conhecidos como raizes do certificado. Obviamente que cada certificadora segue uma estrutura diferente. Para você identificar a estrutura correta do seu certificado (.cer - formato texto) abra o seu certificado (dois cliques), na aba detalhes (mostrar tudo), localize o campo assunto (subject); neste campo estão as informações gerado para, localize o campo emissor (Issuer); neste campo estão as informações gerado por; sendo assim até chegar ao certificado root da certificadora. Enquanto você aguarda da certificadora a validação do seu CSR e a geração do seu certificado podemos ir instalando (importando) as raizes do certificado.

Exemplo:

Comandos

keytool -import -keystore C:\Certificado\Keystore\nomedefinidonocomando1.kdb -alias Root -trustcacerts -file C:\Certificado\Certificadora\root.cer

keytool -import -keystore C:\Certificado\Keystore\nomedefinidonocomando1.kdb -alias Primary -trustcacerts -file C:\Certificado\Certificadora\intermediario.cer

Notas

  • Sempre começar pelo root, e depois ir seguindo a sequência.

  • Os certificados raízes estão disponíveis no site das certificadoras.

  • Os certificados raízes deverão ser importados para o keystore gerado no comando do passo 1.

  • A senha solicitada na execução do comando a senha do keystore que foi cadastrada no comando do passo 1.

  • Cada certificado raiz é importado para um alias diferente.

  1. O seu certificado pode ser enviado de diversas formas pela certificadora, algumas enviam o arquivo .cer .pem .crt e outras encaminham no corpo do e-mail. Para os casos dos arquivos é só salvar o arquivo e instalar (importar), para os casos que o certificado está no corpo do e-mail basta copiar o conteúdo desde -----BEGIN CERTIFICATE----- até -----END CERTIFICATE----- e através do notepad salvar um arquivo com este conteúdo no formato .cer .crt .pem. Com o certificado em mãos é hora de instalar (importar) para o mesmo keystore gerado no comando do passo 1 e para o mesmo alias utilizado no comando do passo 1.

Exemplo:

Comando

keytool -import -trustcacerts -keystore C:\Certificado\Keystore\nomedefinidonocomando1.kdb -alias certificado -file C:\Certificado\Certificadora\meucertificado.cer

Notas

  • A senha solicitada na execução do comando a senha do keystore que foi cadastrada no comando do passo 1.

  • No comando é utilizado o parâmetro -alias certificado, o certificado deverá ser importado para o alias utilizado na criação do CSR no comando do passo 1.

  1. É interessante visualizar os certificados instalados (importados) no keystore, para conferir o sucesso da instalação.

Exemplo:

Comando

keytool -list -keystore C:\Certificado\Keystore\nomedefinidonocomando1.kdb -v > C:\Certificado\list.txt

Keystore type: jks
Keystore provider: SUN

Your keystore contains 3 entries

Alias name: client
Creation date: 12/07/2007
Entry type: keyEntry
Certificate chain length: 3



Alias name: root
Creation date: 12/07/2007
Entry type: trustedCertEntry



Alias name: primary
Creation date: 12/07/2007
Entry type: trustedCertEntry



Notas

  • O caminho de saída do comando é válido e o arquivo list.txt não existe e será gerado após a execução do comando.

  • A senha solicitada na execução do comando a senha do keystore que foi cadastrada no comando do passo 1.

  1. Após a devida instalação (importação) do certificado e suas raízes para o keystore é hora de configurar o keystore no Tomcat e habilitar o conector SSL.

Exemplo:

Configuração

Editar o arquivo C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf\server.xml
Excluir o trecho abaixo

Incluir o trecho abaixo

Alterar tudo que for 8443 para 443, ctrl + h
Salvar e iniciar o servico do tomcat

Notas

  • keystoreFile=“C:\Certificado\Keystore\nomedefinidonocomando1.kdb” é o caminho do keystore gerado no comando do passo 1.

  • keystorePass=“senhadokeystore” é a senha do keystore que foi cadastrada no comando do passo 1.

  • O Tomcat disponibiliza uma documentação em http://localhost/docs/ssl-howto.html ou http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html, fique atento as instruções pois há uma pegadinha ou um erro na documentação. Na documentação o exemplo é:

<-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->

Mas existem duas coisas que não estão claras

<-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
A inclusão dessa linha no server.xml não irá funcionar, pois a mesma está comentada de maneira incorreta o certo é:

A criação do conector está comentada, ou seja não irá funcionar.

Sr. Renato…

Só perguntando, porque o post é muito comprido e não o li direito.

Você está precisando de ajuda (você seguiu o tutorial mas teve algum problema), ou então está dizendo que o tutorial tem algum erro e está comentando sobre os problemas?

[quote=thingol]Sr. Renato…

Só perguntando, porque o post é muito comprido e não o li direito.

Você está precisando de ajuda (você seguiu o tutorial mas teve algum problema), ou então está dizendo que o tutorial tem algum erro e está comentando sobre os problemas?
[/quote]

po thingol, nao seria interessante ler o post dele e depois comentar??

Ele fez um mini-tutorial de como fazer para instalar um certificado ssl no windows.

É que ele não tinha sido muito claro.
Uma vez eu vi um tutorial sobre instalação de certificados no Tomcat, pensei que ele tinha feito um “paste” desse tutorial, e posto um comentário em cima.
Mas na verdade ele estava dizendo que a documentação original do Tomcat está com erros.

[quote=thingol]É que ele não tinha sido muito claro.
Uma vez eu vi um tutorial sobre instalação de certificados no Tomcat, pensei que ele tinha feito um “paste” desse tutorial, e posto um comentário em cima.
Mas na verdade ele estava dizendo que a documentação original do Tomcat está com erros.

[/quote]

:wink:

É q ultimamente o pessoal anda estressado aqui sabe e me surpreendi quendo vi q era vc que tinha falado aquilo. :shock:

:wink:

E então pessoal,

To tentando seguir esse how-to aqui, mas cheguei nesse erro… alguma idéia?

17/08/2007 15:22:28 org.apache.coyote.http11.Http11BaseProtocol start
SEVERE: Error starting endpoint
java.io.IOException: Cannot recover key
        at org.apache.tomcat.util.net.jsse.JSSE14SocketFactory.init(JSSE14SocketFactory.java:126)
        at org.apache.tomcat.util.net.jsse.JSSESocketFactory.createSocket(JSSESocketFactory.java:89)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.initEndpoint(PoolTcpEndpoint.java:293)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.startEndpoint(PoolTcpEndpoint.java:313)
        at org.apache.coyote.http11.Http11BaseProtocol.start(Http11BaseProtocol.java:151)
        at org.apache.coyote.http11.Http11Protocol.start(Http11Protocol.java:76)
        at org.apache.catalina.connector.Connector.start(Connector.java:1090)
        at org.apache.catalina.core.StandardService.start(StandardService.java:457)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)