Segurança

Este manual tem como objetivo orientar administradores de sistema sobre como aumentar a segurança de uma instalação do SACI.

Canal seguro de comunicação

Fazer com que toda a comunicação com o SACI seja feita através de uma conexão segura aumenta significativamente a segurança do sistema, pois dentre outras coisas dificulta a aplicação de ataques do tipo "eavesdropping" (bisbilhotagem).

Atenção: é aconselhável um estudo de desempenho a fim de encontrar um balanço ideal entre segurança e desempenho, já que uma conexão segura (com dados encriptados) afeta negativamente a velocidade de transmissão.

Instalação do OpenSSL

Essa ferramenta é uma implementação em código-aberto dos protocolos SSL e TLS, e está disponível em praticamente todos os sistemas operacionais.

Para verificar se OpenSSL já está instalado no seu sistema, execute no terminal o comando:

openssl version

A saída deve ser do tipo "OpenSSL 0.9.8o 01 Jun 2010". Caso OpenSSL não esteja instalado, execute o comando:

sudo apt-get install openssl

Preparação do ambiente para a geração de certificados

  • Criação das pastas para a autoridade certificadora (CA)

    Crie as seguintes pastas usando os comandos:

    cd /etc

    sudo mkdir my_ssl

    cd my_ssl

    sudo mkdir myCA

    cd myCA

    sudo mkdir private //chave privada de autenticação

    sudo mkdir certs //certificados emitidos

    sudo mkdir newcerts //certificados novos

    sudo mkdir crl //certificados revogados

  • Arquivo de configuração

    Copie o arquivo de configuração básica do OpenSSL usando os comandos:

    cd /etc/my_ssl

    sudo cp /etc/ssl/openssl.cnf openssl.my.cnf

  • Arquivos de fonte de dados

    Crie dois novos arquivos (index.txt e serial) para que eles sirvam como fontes de dados para o OpenSSL. Execute os comandos:

    cd /etc/my_ssl/myCA

    sudo touch index.txt serial

    echo '01' | sudo tee serial

Criação do certificado raiz e sua chave privada

Aviso: os comandos seguintes devem ser realizados no diretório da CA (no exemplo, /etc/my_ssl/myCA).

O próximo comando criará um certificado raiz auto-assinado pela sua própria CA e válido por 5 anos:

sudo openssl req -config ../openssl.my.cnf -new -x509 -extensions v3_ca -keyout private/myca.key -out certs/myca.crt -days 1825

Serão pedidos os dados:

  • senha (pass phrase): forneça uma senha forte, com ao menos 8 caracteres e com caracteres especiais, minúsculos, maiúsculos e numéricos
  • país (country name): sigla do país com dois caracteres (ex: BR)
  • estado (state): nome completo do Estado (ex: Estado XYZ)
  • localidade (locality): nome completo da localidade (ex: Cidade XYZ)
  • organização (organization): nome completo da organização (ex: Fundação Universidade XYZ)
  • unidade organizacional (organization unit): nome completo da unidade organizacional (ex: Secretaria ABC)
  • nome (common name): nome completo do administrador da CA (ex: João da Silva)
  • e-mail (e-mail address): joao.silva@xyz.br

Confira se o arquivo "private/myca.key" foi criado corretamente antes de prosseguir.

Configuração do OpenSSL para usar o certificado raiz e a chave privada criados

Edite o arquivo /etc/my_ssl/openssl.my.cnf e na seção [ CA_default ] mude as seguintes configurações:

dir = ./myCA //a pasta do SSL é a mesma onde está a CA

certificate = $dir/certs/myca.crt //onde está o Certificado Raiz da CA

private_key = $dir/private/myca.key //onde está a Chave Privada da CA

Geração de um "keystore"

Uma vez criada a CA, é necessário criar um "keystore", que é o local onde são armazenados um ou mais certificados para que possam ser usados pelas aplicações. Isso pode ser feito usando o utilitário "keytool" que vem junto ao Java Development Kit (JDK).

Assumindo que o nome da aplicação seja "SACI" e o local onde o keystore será armazenado em "/home/saci/keystore", execute:

sudo keytool -genkey -alias SACI -keyalg RSA -keystore /home/saci/keystore

Serão pediso os dados:

  • senha (password): forneça uma senha forte, com ao menos 8 caracteres e com caracteres especiais, minúsculos, maiúsculos e numéricos
  • nome (first and last name): nome e sobrenome (ex: comunicacao.ufscar.br)
  • unidade organizacional (organization unit): nome completo da unidade organizacional (ex: Coordenadoria QWERTY)
  • organização (organization): nome completo da organização (ex: Fundação Universidade XYZ)
  • localidade (locality): nome completo da localidade (ex: Cidade ASD)
  • estado (state): nome completo do Estado (ex: Estado XYZ)
  • país (country name): sigla do país com dois caracteres (ex: BR)
  • confirme com "yes"
  • confirme que a senha da chave SACI é a mesma do keystore (essa é uma limitação das implementações atuais do Java EE)

Configuração do Tomcat

Uma vez criado um keystore, é possível usá-lo junto ao Tomcat para que uma conexão segura seja disponibilizada. A pasta em que o Tomcat está instalado será referenciada daqui em diante por CATALINA_HOME.

Edite o o arquivo CATALINA_HOME/conf/server.xml: procure pelo elemento "Connector" configurado para a porta 8443 (port="8443") e remova os comentários. Nesse mesmo elemento, adicione os atributos:

keystoreFile="/home/saci/keystore" keystorePass="(senha gerada no passo 1.5)"

Importação do certificado para o keystore

  • Requisição de certificação

    A próxima etapa é requerer à CA uma certificação para que o SACI seja assinado. Execute o comando:

    sudo keytool -certreq -keyalg RSA -alias SACI -file /home/saci/certreq.csr -keystore /home/saci/keystore

    Forneça a senha do keystore. Após isso, será criada a requisição "certreq.csr".

  • Assinatura do certificado pela CA

    Na pasta onde está a configuração do OpenSSL (ex: /etc/my_ssl), execute o comando:

    sudo openssl ca -config openssl.my.cnf -policy policy_anything -out ./myCA/certs/SACI.crt -infiles /home/saci/certreq.csr

    Confirme as duas perguntas seguintes com "Y". Em caso de sucesso, na pasta /etc/my_ssl/myCA/certs será gerado o arquivo SACI.crt contendo o certificado da aplicação assinado.

  • Importação dos certificados
    • Para importar o certificado raiz, execute o comando:

      sudo keytool -import -alias root -keystore /home/saci/keystore -trustcacerts -file /etc/my_ssl/myCA/certs/myca.crt

      Confirme com "yes" e o certificado raiz será adicionado ao keystore.

    • Para importar o certificado da aplicação (SACI.crt), copie-o para um local seguro (ex: /home/saci), remova o conteúdo até (mas não incluindo) a expressão -----BEGIN CERTIFICATE----- e execute o comando

      sudo keytool -import -alias tomcat -keystore /home/saci/keystore -file /home/saci/SACI.crt

      O certificado da aplicação SACI será adicionado ao keystore.

Teste o SACI

Para testar o SACI e confirmar que a conexão segura está ativada, reinicie o Tomcat, limpe o projeto no Netbeans e em seguida o execute. Ele deverá abrir o SACI já redirecionado em uma conexão segura.