8.6.3. Habilitação da Criptografia do FIPS 140-2 para o SSL no Red Hat Enterprise Linux 6

Esta tarefa descreve como configurar o contêiner da web (JBoss Web) do JBoss EAP 6 para a criptografia compatível com o FIPS 140-2 para o SSL. Esta tarefa descreve apenas as etapas para o Red Hat Enterprise Linux 6.
Esta tarefa usa a biblioteca Mozilla NSS no modo FIPS para este recurso.

Pré-requisitos

Procedimento 8.3. Habilitação da Criptografia Compatível FIPS 140-2 para o SSL

  1. Criação do banco de dados

    Crie o banco de dados NSS num diretório de propriedade do usuário jboss.
    $ mkdir -p  /usr/share/jboss-as/nssdb
    $ chown jboss /usr/share/jboss-as/nssdb 
    $ modutil -create -dbdir /usr/share/jboss-as/nssdb
    
  2. Criação do arquivo de configuração NSS

    Crie um novo arquivo do texto com o mesmo nome nss_pkcsll_fips.cfg no diretório /usr/share/jboss-as com os seguintes conteúdos:
    name = nss-fips
    nssLibraryDirectory=/usr/lib64
    nssSecmodDirectory=/usr/share/jboss-as/nssdb
    nssModule = fips
    
    O arquivo de configuração NSS deve especificar:
    • um nome;
    • o diretório onde a biblioteca está localizada, e;
    • o diretório onde o banco de dados NSS foi criado, conforme na etapa 1.
    Caso você esteja executando uma versão de 64 bites do Red Hat Enterprise Linux 6, então determine o nssLibraryDirectory para /usr/lib, ao invés do /usr/lib64.
  3. Habilitação do provedor SunPKCS11

    Edite o arquivo da configuração java.security para o seu JRE ($JAVA_HOME/jre/lib/security/java.security) e adicione a seguinte linha:
    security.provider.1=sun.security.pkcs11.SunPKCS11  /usr/share/jboss-as/nss_pkcsll_fips.cfg
    
    Perceba que o arquivo de configuração especificado nesta linha é o arquivo criado na etapa 2.
    Quaisquer outras linhas security.provider.X neste arquivo devem possuir o valor do X aumentado para um, com o objetivo de garantir que este provedor possui prioridade.
  4. Habilitação do modo FIPS para a biblioteca NSS

    Execute o comando modutil conforme apresentado para habilitar o modo FIPS:
    modutil -fips true -dbdir /usr/share/jboss-as/nssdb
    Perceba que o diretório especificado aqui é o mesmo criado na etapa 1.
    Você pode obter um erro da biblioteca de segurança no ponto
  5. Altere a senha no token FIPS

    Determine a senha no token FIPS usando o seguinte comando. Perceba que o nome do token deve ser NSS FIPS 140-2 Certificate DB.
    modutil -changepw "NSS FIPS 140-2 Certificate DB" -dbdir /usr/share/jboss-as/nssdb
    A senha usada para o token FIPS deve ser uma senha compatível com o FIPS.
  6. Crie um certificado usando as ferramentas NSS

    Insira o seguinte comando para criar um certificado usando as ferramentas NSS.
    certutil -S -k rsa -n jbossweb  -t "u,u,u" -x -s "CN=localhost, OU=MYOU, O=MYORG, L=MYCITY, ST=MYSTATE, C=MY" -d /usr/share/jboss-as/nssdb
  7. Configure o conector HTTPS para o uso do PKCS11 keystore

    Adicione o conector usando o seguinte comando no JBoss CLI Tool:
    /subsystem=web/connector=https/:add(socket-binding=https,scheme=https,protocol=HTTP/1.1,secure=true)
    
    Adicione a configuração SSL com o seguinte comando, substituindo a SENHA pela senha compatível com o FIPS da etapa 5.
    /subsystem=web/connector=https/ssl=configuration:add(name=https,password=PASSWORD,keystore-type=PCKS11,
    cipher-suite="SSL_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,
    TLS_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
    TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,
    TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,
    TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
    TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,
    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
    TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,
    TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
    TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_anon_WITH_AES_128_CBC_SHA,
    TLS_ECDH_anon_WITH_AES_256_CBC_SHA")
    
  8. Verificação

    Verifique se o JVM pode ler a chave privada a partir do PKCS11 pela execução do seguinte comando:
    keytool -list -storetype pkcs11
    

Exemplo 8.3. A configuração XMl para o conector HTTPS usando o FIPS compatível

<connector name="https" protocol="HTTP/1.1" scheme="https" socket-binding="https" secure="true">
  <ssl name="https" password="****" 
      cipher-suite="SSL_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,
         TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
         TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,
         TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,
         TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
         TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,
         TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
         TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,
         TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,
         TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
         TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_anon_WITH_AES_128_CBC_SHA,
         TLS_ECDH_anon_WITH_AES_256_CBC_SHA"
      keystore-type="PKCS11"/>
</connector>
Perceba que o atributo cipher-suite possui quebras de linha inseridas para facilitar a leitura.