Sessões
São detalhadas abaixo as configurações para controle de balanceamento de carga e cache de sessões.
Variável | Descrição Rápida |
---|---|
HSM_DISABLE_SESSION_CACHE |
Desabilita (valor em 1) o cache de sessão. |
HSM_LOAD_BALANCE_LIST |
Caminho do arquivo com a lista de HSMs para o balanceamento. |
HSM_LB_FILE_REFRESH_INTERVAL |
Intervalo (em segundos) de atualização do arquivo de balanceamento. |
HSM_BALANCE_SUSPEND_TIME |
Tempo (em segundos) de suspensão automática de um HSM não responsivo da lisa de balanceamento. |
HSM_PIX_HTTP_CONN_REFRESH_INTERVAL |
Intervalo (em segundos) de atualização do carregamento dos objetos do HSM nas operações de Pix request(POST/GET/DELETE). |
Cache de Sessão
Variável de ambiente a ser definida: HSM_DISABLE_SESSION_CACHE
Valor | Cache de Sessões |
---|---|
Não definida | habilitado |
0 | habilitado |
1 | desabilitado |
Somente desabilite o cache de sessões se tiver certeza que a aplicação será de alguma forma beneficiada com esta configuração.
Para mais detalhes consulte o tópico Cache de Sessão.
Em conjunto com o balanceamento funciona um sistema de cache de sessões, visando aperfeiçoar o uso de banda de rede e alocação/desalocação de recursos no HSM e no servidor da aplicação. Quando a aplicação solicita o término da sessão ao HSM, ela é finalizada logicamente (para a aplicação a sessão foi fechada com sucesso); a biblioteca do HSM (carregada no espaço de endereço do processo da aplicação) mantém por um determinado tempo a sessão física com o HSM; se uma nova sessão for solicitada, a biblioteca reutiliza aquela sessão física (re-autenticando localmente o usuário). Ao reutilizar uma sessão já estabelecida há um ganho por não se fazer novamente a negociação da sessão física, principalmente se a aplicação estiver usando sessões cifradas (TLS). O tipo da nova sessão (aberta ou cifrada) deve ser o mesmo da sessão física existente. Caso a sessão física no cache não seja reutilizada dentro do tempo de espera, ela é fisicamente encerrada.
O cache de sessões tem as seguintes características:
- Intra-processo: o cache é feito por processo. Isso significa que 2 aplicações em uma mesma máquina terão um cache cada uma, sem compartilhar sessões entre os processos;
- Centralizado: implementado na biblioteca do HSM. Desta forma o cache é habilitado em um ponto central e todas as outras bibliotecas dependentes dela herdarão a funcionalidade;
- Transparente: para habilitar o cache de sessões é necessário apenas habilitar uma variável de ambiente. Não há necessidade de alteração na aplicação.
Observações:
- Sessões com autenticação de 2o. fator não entram no cache. Um exemplo é o uso de OTP;
- O cache de sessões pode ser ignorado, em uma determinada sessão, usando a flag CACHE_BYPASS em DOpenSesssion;
- O cache de sessões é habilitado por padrão;
- Uma sessão pode ser forçada a ser removida do cache utilizando a flag CLOSE_PHYSICALLY em DCloseSession;
- Pode ser utilizado juntamente com o balanceamento de carga.
- O tempo de espera até a sessão ser descartada pela biblioteca é de 04 minutos.
Um fluxo do cache de sessões pode ser representado como na figura abaixo:
---
title: Fluxo de cache de sessões
---
%%{ init: { 'flowchart': { 'curve': 'basis' }} }%%
sequenceDiagram
autonumber
participant app as Aplicação
participant lib as Biblioteca
participant hsm as HSM
app ->> lib: Início da sessão 1
activate app
lib ->> hsm: Abre sessão
activate lib
activate hsm
loop Sessão 1
%% necessário manter o espaço após o spi: (ou usar um text)
app -->> lib: Requisição
lib -->> app: Resposta
end
app ->> lib: Fim da sessão 1
deactivate app
Note right of lib: A sessão física<br>permanece aberta
app ->> lib: Início da sessão 2
activate app
Note right of lib: A sessão existente<br>é reutilizada
loop Sessão 2
%% necessário manter o espaço após o spi: (ou usar um text)
app -->> lib: Requisição
lib -->> app: Resposta
end
app ->> lib: Fim da sessão 2
deactivate app
deactivate lib
deactivate hsm
Balanceamento de Carga
Variável de ambiente a ser definida: HSM_LOAD_BALANCE_LIST
Valor | Balanceamento de Carga |
---|---|
Não definida | desabilitado |
nome do arquivo | usa a lista de HSMs |
Contem o caminho e nome do arquivo com a lista de endereços IPs e portas dos HSMs. Em cada linha do arquivo deve ser indicado o endereço e a porta (usar 4433) de um HSM. Até dezesseis endereços podem ser informadas. O arquivo deverá ser em formato texto ASCII com o seguinte formato no conteúdo:
<endereco_ip_1> <porta>
<endereco_ip_2> <porta>
...
<endereco_ip_16> <porta>
Exemplo:
10.0.20.1 4433
10.0.20.2 4433
Para utilizar este esquema ativo-passivo crie cada lista de HSMs em um arquivo com o formato indicado acima, e no valor da variável de ambiente indique todos os arquivos, com o caminho completo, separando conforme o padrão do sistema operacional onde estiver executando a aplicação, ;
para Windows e :
para Unix/Linux.
O Dinamo dispõe de um mecanismo de balanceamento de carga, permitindo maior disponibilidade do ambiente e desempenho para as aplicações. É possível ter até 16 (dezesseis) unidades do Dinamo em sistema de balanceamento de carga, com a mesma quantidade de sessões em cada um dos equipamentos. O balanceamento de carga é transparente para a aplicação, ou seja, uma vez habilitado o balanceamento no ambiente, a aplicação se beneficia sem precisar de qualquer alteração.
O balanceamento funciona num esquema tipo round-robin, distribuindo conexões circularmente entre os HSM configurados para balanceamento. A unidade de balanceamento é a sessão com o HSM, independente da carga ou das APIs utilizadas em cada sessão e também da taxa de utilização de recursos em cada HSM. O HSM que vai estabelecer a sessão com a aplicação é definido pela estrutura de balanceamento e não pela aplicação. O esquema do balanceamento funciona por processo, ou seja, dentro de cada processo são suas sessões que serão balanceadas; caso dois processos rodem ao mesmo tempo, cada um terá uma estrutura de balanceamento separada e independente.
Caso a aplicação esteja utilizando objetos armazenados no HSM, é preciso que o objeto exista em todos os HSMs. O recomendado é que um HSM seja preparado inicialmente com todos os objetos usados pela aplicação e a partir dele seja gerado um backup, que será restaurado em todos os demais HSMs que fazem parte do conjunto de balanceamento.
Atenção
O balanceamento não pode ser usado por aplicações que criam objetos dentro da sessão, precisam persistir estes objetos entre sessões mas não utilizam o mecanismo de replicação do HSM, pois neste caso a criação do objeto não é replicada entre os HSMs e não há garantia que a próxima sessão será dirigida ao HSM onde o objeto foi criado. Para aplicações que criam objetos que devem persistir entre sessões, e o mecanismo de replicação do HSM não seja utilizado, é função da aplicação manter um mecanismo de sincronização entre as bases dos HSMs participantes do balanceamento. Tal mecanismo pode ser baseado por exemplo na exportação e importação de objetos.
O balanceamento de carga e o cache de sessões são habilitados por intermédio de variáveis de ambiente. Se a definição das variável de ambiente tiver escopo de sistema (system wide), todas as aplicações são beneficiadas pela estrutura de balanceamento e/ou cache (pois os processos herdam as definições de variáveis de ambiente do sistema). Também é possível fazer uma configuração definindo a variável de ambiente apenas para o processo particular de uma aplicação. Consulte a documentação do sistema operacional para detalhes sobre criação e escopo de variáveis de ambiente.
O balanceamento de carga m as seguintes características:
- Intra-processo: o balanceamento de carga é feito por processo. Isso significa que 2 aplicações em uma mesma máquina terão conjuntos de balanceamento distintos;
- Centralizado: implementado na biblioteca do HSM. Desta forma o balanceamento é habilitado em um ponto central e todas as outras bibliotecas dependentes dela herdarão a funcionalidade
- Transparente: para habilitar o balanceamento é necessário apenas habilitar uma variável de ambiente. Não é necessário nenhuma alteração de código fonte da aplicação
Um diagrama estrutural do mecanismos de balanceamento de carga é mostrado na figura abaixo:
---
title: Balanceamento de carga
---
%%{ init: { 'flowchart': { 'curve': 'basis' } } }%%
flowchart LR
classDef red_s stroke:#f00
s1.1[Sessão 1]
s2.1[Sessão 2]
sn.1[Sessão n]
lib1((biblioteca<br>fa:fa-list-ol)):::red_s
s1.2[Sessão 1]
s2.2[Sessão 2]
sn.2[Sessão n]
lib2((biblioteca<br>fa:fa-list-ol)):::red_s
hsm1[fa:fa-network-wired HSM 1]
hsm2[fa:fa-network-wired HSM 2]
hsmn[fa:fa-network-wired HSM n]
subgraph Processo 1
s1.1 --> lib1
s2.1 --> lib1
sn.1 --> lib1
end
subgraph Processo 2
s1.2 --> lib2
s2.2 --> lib2
sn.2 --> lib2
end
%%subgraph Pool de HSMs
hsm1:::red_s
hsm2:::red_s
hsmn:::red_s
%%end
lib1 -...-> hsm1
lib1 -...-> hsm2
lib1 -...-> hsmn
lib2 -...-> hsm1
lib2 -...-> hsm2
lib2 -...-> hsmn
Intervalo de Atualização
Variável de ambiente a ser definida: HSM_LB_FILE_REFRESH_INTERVAL
Valor | Intervalo de atualização |
---|---|
Não definida | somente na inicialização da biblioteca. |
0 | somente na inicialização da biblioteca. |
n | recarga (em segundos) da lista de balanceamento. |
As listas carregadas são as definidas na variável de ambiente HSM_LOAD_BALANCE_LIST
.
Caso os arquivos da lista de balanceamento estejam corrompidos, inválidos a lista de balanceamento alterada não será atualizada.
Caso a lista de balanceamento alterada esteja igual a lista de balanceamento atual a atualização não será efetuada, para evitar o recarregamento desnecessário da lista de balanceamento.
Caso a lista de balanceamento seja atualizada, as sessões atuais serão marcadas para serem finalizadas ao término das operações e as novas sessões serão criadas utilizando a nova lista de balanceamento.
Tempo de Suspensão
Variável de ambiente a ser definida: HSM_BALANCE_SUSPEND_TIME
Valor | Tempo de Suspensão |
---|---|
Não definida | tempo de suspensão default de 120 segundos. |
n | tempo em segundos de suspensão. |
Durante a operação da biblioteca com balanceamento de carga pode acontecer de um ou mais dos endereços indicados na lista não conseguir estabelecer sessão com a aplicação. Neste caso a biblioteca vai retirar temporariamente da lista de balanceamento o endereço problemático e vai tentar uma nova conexão vencido este prazo.
Intervalo de Pix Request
Variável de ambiente a ser definida: HSM_PIX_HTTP_CONN_REFRESH_INTERVAL
Valor | Intervalo de atualização |
---|---|
Não definida | atualiza os objetos a cada operação de Pix Request. |
0 | atualiza os objetos a cada operação de Pix Request. |
n | recarga (em segundos) da lista de balanceamento. |
Em cada operação Pix Request (Requisições HTTP POST, GET e DELETE) é feito o carregamento dos objetos armazenados no HSM (handle de chave privada, certificado e cadeia do peer) para poder realizar o fechamento do túnel TLS.
A vantagem do recarregamento dos objetos à cada operação de Pix Request é que permite que, caso o objeto seja alterado, ele seja recarregado já na proxima operação. Por outro lado, estes recarregamento frequente causa um custo de performance desnecessário.
A vantagem de definir um intervalo de tempo para que haja o recarregamento dos objetos do HSM nas operações de Pix Request é um ganho de performance. Isto permite uma melhoria na performance com o custo de ter que esperar no máximo o tempo de recarga definido na variável de ambiente para que os novos objetos sejam recarregados. Como normalmente a troca de chaves e certificados é feita com pouca frequência, é possível configurar um intervalo para que os objetos sejam carregados com impacto reduzido.