Ir para o conteúdo

Autenticação Kerberos do SQL Server

Este guia descreve como configurar uma conexão de banco de dados para autenticar com o Microsoft SQL Server usando autenticação de cache de ticket Kerberos (kinit).

Nota

Esta configuração é suportada apenas para agentes privados do Jitterbit.

Nota

O comportamento da autenticação Kerberos e SQL Server pode variar dependendo da configuração do Microsoft Active Directory, resolução de DNS, roteamento de rede e outros fatores específicos do ambiente.

Pré-requisitos

Antes de começar, certifique-se de que o seguinte esteja em vigor:

  1. Um agente privado do Jitterbit.

  2. Acesso à rede para o seguinte:

  3. Uma conta de usuário válida do Active Directory.

  4. Um Nome de Principal de Serviço (SPN) configurado no Active Directory para o SQL Server no seguinte formato:

     MSSQLSvc/<SQL_SERVER_HOST>:<PORT>
    

Etapa 1: Garantir a resolução de DNS para o KDC

O Kerberos requer uma resolução de DNS adequada para localizar o KDC.

Linux

Em alguns ambientes, o DNS pode precisar ser ajustado. Substitua os seguintes espaços reservados pelos seus valores:

  • <AD_DNS_IP>: O servidor DNS que pode resolver o domínio do Active Directory.
  • <SECONDARY_DNS_IP>: Um servidor DNS de fallback opcional.

Esta é uma configuração temporária. Execute esses comandos novamente cada vez que o contêiner reiniciar:

cat > /etc/resolv.conf <<EOF
nameserver <AD_DNS_IP>
nameserver <SECONDARY_DNS_IP>
EOF

Windows

Se o dispositivo que executa o agente privado do Windows já estiver associado ao mesmo domínio que o KDC, nenhuma configuração adicional é necessária. Caso contrário, adicione as entradas necessárias ao C:\Windows\System32\drivers\etc\hosts para que o dispositivo possa resolver os nomes do KDC e do SQL Server.

Etapa 2: Instalar utilitários de cliente Kerberos

Linux

O host do agente privado deve ter as ferramentas do Kerberos instaladas. Essas ferramentas são necessárias para criar o cache de tickets e para validar a comunicação com o KDC e a criação de tickets de serviço.

Execute os seguintes comandos para instalar krb5-user:

apt-get update
apt-get install krb5-user

Isso instala o seguinte:

  • kinit
  • klist
  • Bibliotecas do Kerberos

Windows

As ferramentas do Kerberos estão disponíveis nativamente no Windows. Se não estiverem instaladas, faça o download em https://ist.mit.edu/mit-apps/kerberos-win.

Passo 3: Testar a resolução de DNS

Verifique se o agente consegue resolver o nome do host do KDC.

Linux

Execute o seguinte comando para instalar utilitários de DNS:

apt-get update
apt-get install dnsutils

Em seguida, teste a resolução de DNS:

nslookup <DOMAIN_CONTROLLER_HOSTNAME>

Exemplo

nslookup ad.dev.local

Windows

Execute o seguinte comando para testar a resolução de nomes:

ping <DOMAIN_CONTROLLER_HOSTNAME>

Exemplo

ping ad.dev.local

Se a resolução falhar, a autenticação do Kerberos não funcionará.

Passo 4: Criar o arquivo de configuração do Kerberos (krb5.conf)

Linux

Use o seguinte comando para criar ou editar o arquivo de configuração em /etc/krb5.conf:

vi /etc/krb5.conf

Conteúdo de exemplo

[libdefaults]
default_realm = DEV.LOCAL
rdns = false
dns_lookup_kdc = false
dns_lookup_realm = false
[realms]
DEV.LOCAL = {
kdc = ad.dev.local
admin_server = ad.dev.local
}
[domain_realm]
.dev.local = DEV.LOCAL
dev.local = DEV.LOCAL

Windows

Crie o arquivo krb5.conf usando a mesma estrutura mostrada acima. Escolha um local que o agente privado possa acessar sem exigir privilégios elevados, como:

C:\Jitterbit\kerberos

Parâmetros de configuração

[libdefaults]

  • default_realm: O nome do domínio do Active Directory em letras maiúsculas.
  • rdns = false: Impede problemas de pesquisa reversa de DNS.
  • dns_lookup_kdc = false: Desabilita a descoberta automática do KDC via DNS.
  • dns_lookup_realm = false: Desabilita a descoberta automática do reino via DNS.

[realms]

  • kdc: O nome do host do controlador de domínio.
  • admin_server: O controlador de domínio para operações administrativas.

[domain_realm]

Mapeia domínios DNS para o reino Kerberos.

Passo 5: Crie o arquivo de configuração JAAS

A autenticação Kerberos requer um arquivo de configuração do Serviço de Autenticação e Autorização Java (JAAS).

Linux

Execute o seguinte comando para criar o diretório:

mkdir -p /opt/jitterbit/kerberos

Execute o seguinte comando para criar o arquivo de configuração:

vi /opt/jitterbit/kerberos/jaas.conf

Conteúdo de exemplo

com.sun.security.jgss.krb5.initiate {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
useKeyTab=false
storeKey=false
isInitiator=true
doNotPrompt=true
renewTGT=false
debug=true
refreshKrb5Config=true;
};

SQLJDBCDriver {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
useKeyTab=false
storeKey=false
isInitiator=true
doNotPrompt=true
renewTGT=false
debug=true
refreshKrb5Config=true;
};

Windows

Crie o arquivo jaas.conf usando a mesma estrutura mostrada acima. Escolha um local que o agente privado possa acessar sem exigir privilégios elevados, como:

C:\Jitterbit\kerberos

Referência de parâmetros JAAS

  • useTicketCache=true: Usa o ticket Kerberos obtido via kinit.
  • useKeyTab=false: Não usa um arquivo keytab.
  • storeKey=false: Não armazena uma chave secreta.
  • isInitiator=true: Configura este cliente como o iniciador da autenticação.
  • doNotPrompt=true: Não solicita uma senha.
  • renewTGT=false: Não renova automaticamente o Ticket Granting Ticket (TGT).
  • debug=true: Habilita logs de depuração do Kerberos. (Opcional)
  • refreshKrb5Config=true: Recarrega a configuração do Kerberos dinamicamente.

Defina permissões de arquivo (somente Linux)

A autenticação Kerberos requer permissões de arquivo adequadas para funcionar corretamente. Se os arquivos não forem legíveis, a autenticação falhará com o seguinte erro:

Could not initialize class com.microsoft.sqlserver.jdbc.KerbAuthentication

Execute os seguintes comandos para definir as permissões necessárias:

chmod 644 /opt/jitterbit/kerberos/jaas.conf
chmod 644 /etc/krb5.conf
chmod 644 /tmp/krb5cc_agent

Passo 6: Configure o Tomcat (setenv.sh)

Linux

Use o seguinte comando para abrir o script de inicialização do Tomcat em /opt/jitterbit/tomcat/bin/setenv.sh:

vi /opt/jitterbit/tomcat/bin/setenv.sh

Conteúdo de exemplo

#!/bin/sh
JAVA_OPTS="$JAVA_OPTS \
-Djava.security.krb5.conf=/etc/krb5.conf \
-Dsun.security.jgss.native=true \
-Djava.security.auth.login.config=/opt/jitterbit/kerberos/jaas.conf \
-Dsun.security.krb5.debug=true \
-Djavax.security.auth.useSubjectCredsOnly=false"

export KRB5CCNAME=/tmp/krb5cc_agent
export JAVA_OPTS

Windows

Para o agente privado do Windows, não é necessário criar um arquivo setenv.sh. Em vez disso, adicione os parâmetros JAVA_OPTS mostrados acima seguindo as instruções em Configurar opções Java para agentes privados.

Ao definir KRB5CCNAME, observe o caminho, pois será necessário especificá-lo novamente no Passo 8 ao criar o cache de tickets.

Se o teste de conexão retornar um erro mencionando jgss ou gss, tente o seguinte:

  1. Remova o parâmetro -Dsun.security.jgss.native=true.
  2. Adicione udp_preference_limit = 1 à seção [libdefaults] do krb5.conf.
  3. Reinicie o agente para que as alterações tenham efeito.

Referência de parâmetros

  • java.security.krb5.conf: O caminho para o arquivo de configuração do Kerberos.
  • sun.security.jgss.native=true: Habilita a implementação nativa dos Serviços de Segurança Genéricos (GSS).
  • java.security.auth.login.config: O caminho para o arquivo de configuração JAAS.
  • sun.security.krb5.debug=true: Habilita logs de depuração do Kerberos (opcional).
  • javax.security.auth.useSubjectCredsOnly=false: Permite o uso de credenciais externas.

Passo 7: Reiniciar o agente privado

Após qualquer alteração de configuração, reinicie o agente privado.

Linux

Execute o seguinte comando para reiniciar o agente:

sudo jitterbit restart

Se estiver usando um agente Docker, reinicie o contêiner:

docker restart <CONTAINER_NAME>

Após reiniciar, repita o Passo 1.

Windows

Para reiniciar o agente privado do Windows, use os atalhos de parar e iniciar criados durante a instalação do agente:

Stop Jitterbit Services
Start Jitterbit Services

Passo 8: Obter um ticket Kerberos

Esta configuração utiliza um cache de tickets Kerberos, que é dependente do usuário. Os seguintes comandos criam um cache de tickets que o Tomcat acessa em tempo de execução. Você pode ser solicitado a inserir uma senha.

Linux

Execute o seguinte comando para criar o cache de tickets:

kinit -c /tmp/krb5cc_agent <USER>@<REALM>

Verifique se o ticket foi criado:

klist -c /tmp/krb5cc_agent

Windows

No Windows, use o mesmo caminho especificado para KRB5CCNAME no Passo 6.

Execute o seguinte comando para criar o cache de tickets:

kinit -c <TICKET_CACHE_PATH> <USER>@<REALM>

Verifique se o ticket foi criado:

klist -c <TICKET_CACHE_PATH>

Se nenhum ticket aparecer, a autenticação falhará.

Nota

Os tickets Kerberos expiram. Execute kinit novamente para renovar o ticket conforme necessário.

Etapa 9: Configurar a conexão com o banco de dados

Configure a conexão com o banco de dados com as seguintes configurações:

  1. Tipo de driver: Selecione JDBC.
  2. Driver: Selecione SQL Server (Microsoft).
  3. Nome do servidor: Insira o nome, URL ou endereço IP do SQL Server.
  4. Nome do banco de dados: Insira o nome do banco de dados de destino.
  5. Login e Senha: Deixe esses campos em branco.
  6. Em Configurações opcionais, selecione a caixa de seleção Usar string de conexão e insira o seguinte:

    jdbc:sqlserver://<SQL_SERVER_HOST>:<PORT>;databaseName=<DATABASE>;integratedSecurity=true;authenticationScheme=JavaKerberos;encrypt=false
    

Configure a string de conexão usando os seguintes valores:

  • <SQL_SERVER_HOST>: O nome de domínio totalmente qualificado (FQDN) do SQL Server.
  • <PORT>: O número da porta do SQL Server, tipicamente 1433.
  • <DATABASE>: O nome do banco de dados de destino.
  • encrypt: Defina como true ou false dependendo do seu ambiente.
  • trustServerCertificate=true: Necessário se estiver usando Segurança de Camada de Transporte (TLS) sem uma autoridade certificadora (CA) confiável.