Configurando o JCE

Use as informações nos tópicos a seguir para configurar o provedor JCE de Gerenciamento de Chaves Dedicadas.

Definindo a Variável de Ambiente para o Provedor JCE

Defina a seguinte variável de ambiente para usar o Provedor JCE:

LD_LIBRARY_PATH: Esta variável deve incluir o caminho para o diretório que contém o arquivo ocidkmsjca.so. O uso dessa variável permite que o JCE localize as bibliotecas java nativas necessárias para se comunicar com o HSM. Para instalações padrão, o diretório é /opt/oci/hsm/lib.

Adicionar o Provedor JCE à Segurança Java

Você deve adicionar o provedor JCE à configuração de segurança Java do seu sistema usando um dos métodos descritos nesta seção.

Para editar o arquivo de Segurança Java

No JAVA_HOME, adicione o provedor de segurança OCI Dedicated KMS ao final da lista de provedores de segurança. A entrada do profissional de saúde é a seguinte:

security.provider.<list-number>=com.oracle.dkms.jce.provider.DedicatedKmsProvider
  1. Abra o arquivo java.security em um editor. Por exemplo, execute este comando para abrir o arquivo no editor VIM:

    $ vim /usr/lib/jvm/java-11-openjdk/conf/security/java.security
  2. Adicione a entrada ao final da lista de provedores de segurança no arquivo. No exemplo a seguir, a entrada é adicionada como security.provider.13:

    $ vim /usr/lib/jvm/java-11-openjdk/conf/security/java.security
    security.provider.1=SUN
    security.provider.2=SunRsaSign
    security.provider.3=SunEC
    security.provider.4=SunJSSE
    security.provider.5=SunJCE
    security.provider.6=SunJGSS
    security.provider.7=SunSASL
    security.provider.8=XMLDSig
    security.provider.9=SunPCSC
    security.provider.10=JdkLDAP
    security.provider.11=JdkSASL
    security.provider.12=SunPKCS11
    security.provider.13=com.oracle.dkms.jce.provider.DedicatedKmsProvider
Para carregar dinamicamente o provedor JCE em aplicativos Java

Use o método addProvider na classe Java de Segurança para adicionar o Provedor JCE, da seguinte forma:

DedicatedKmsProvider provider =  new DedicatedKmsProvider();
Security.addProvider(provider);

Consulte addProvider na documentação do Java para obter mais informações.

Autenticação

Os usuários são autenticados para log-in no HSM por credenciais recuperadas de várias origens em uma ordem de prioridade específica. Se forem encontradas credenciais válidas em qualquer origem, o log-in será concluído. Se nenhuma credencial válida for encontrada, o log-in falhará.

Origens de Credenciais e Ordem de Prioridade

As credenciais de log-in são fornecidas pelos seguintes mecanismos:

  1. CallbackHandler: Se isso for fornecido, ele recuperará credenciais dinamicamente. Por exemplo:

    public class CustomCallbackHandler implements CallbackHandler {
        private final String username;
        private final char[] password;
     
        public CustomCallbackHandler(String username, char[] password) {
            this.username = username;
            this.password = password;
        }
     
        @Override
        public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
            for (Callback callback : callbacks) {
                if (callback instanceof NameCallback) {
                    ((NameCallback) callback).setName(username);
                } else if (callback instanceof PasswordCallback) {
                    ((PasswordCallback) callback).setPassword(password);
                } else {
                    throw new UnsupportedCallbackException(callback, "Unsupported callback type");
                }
            }
        }
    }            
    
    DedicatedKmsProvider provider = new DedicatedKmsProvider();
    Security.addProvider(provider);
    CustomCallbackHandler handler = new CustomCallbackHandler(crypto_user, cupassword.toCharArray());
    provider.login(null, handler);
  2. Arquivo HsmCredentials.properties: O aplicativo verifica um arquivo de propriedades chamado HsmCredentials.properties no classpath. Se o arquivo existir e contiver credenciais válidas, elas serão usadas para autenticação. Esse arquivo deve conter o seguinte:

    • HSM_USER = crypto_user
    • HSM_PASSWORD = palavra-chave
  3. Propriedades do sistema Java: Se as credenciais não forem encontradas no arquivo de propriedades, as propriedades do Sistema Java serão verificadas. Espera-se que os valores HSM_USER e HSM_PASSWORD sejam definidos como propriedades do sistema. Você pode defini-los usando flags -D ao executar aplicativos java. Por exemplo

    -DHSM_USER=crypto_user 
    -DHSM_PASSWORD=cupassword
  4. Variáveis de ambiente do Sistema Operacional (prioridade mais baixa): Se as credenciais não forem encontradas nas propriedades do sistema Java, elas poderão ser recuperadas das variáveis de ambiente, se as variáveis de ambiente forem definidas. Defina os valores HSM_USER e HSM_PASSWORD como variáveis de ambiente e exporte-os conforme mostrado no seguinte exemplo:

    export HSM_USER=crypto_user 
    export HSM_PASSWORD=cupassword