Pular para o conteúdo principal

Armazenamento de chaves em HSM Kryptus

observação

Os repositórios de chaves Kryptus são compatíveis com todas as plataformas suportadas.

Para armazenar chaves em um HSM Kryptus kNET, use as seguintes configurações:

  • Type: Kryptus
  • Host: endereço IP ou nome do host do VHSM
  • Port: porta HTTPS do VHSM (não a porta TTLV)

Se você pretende usar o HSM para armazenar chaves de AC, informe as credenciais de um usuário comum (não um usuário VCO) nas seguintes configurações:

  • RootUsername
  • RootPassword

Se você pretende usar o HSM para armazenar chaves de usuário protegidas por PIN (normalmente em conjunto com o módulo Lacuna PSC), informe as credenciais de um usuário VCO (não um usuário comum) nas seguintes configurações:

  • VcoUsername
  • VcoPassword
observação

Se você pretende usar o mesmo VHSM para os dois casos de uso, defina as 4 configurações. No entanto, isso seria muito incomum, já que é recomendado manter as chaves de AC e as chaves de usuário em VHSMs separados.

Exemplo de configuração (arquivo .ini ou .conf):

[KeyStores:MyKryptusHsm]
Type=Kryptus
Host=10.1.2.3
Port=50000
RootUsername=SOME_REGULAR_USER
RootPassword=SOME_PASSWORD
VcoUsername=SOME_VCO_USER
VcoPassword=SOME_PASSWORD

Exemplo de configuração (variáveis de ambiente):

KeyStores__MyKryptusHsm__Type=Kryptus
KeyStores__MyKryptusHsm__Host=10.1.2.3
KeyStores__MyKryptusHsm__Port=50000
KeyStores__MyKryptusHsm__RootUsername=SOME_REGULAR_USER
KeyStores__MyKryptusHsm__RootPassword=SOME_PASSWORD
KeyStores__MyKryptusHsm__VcoUsername=SOME_VCO_USER
KeyStores__MyKryptusHsm__VcoPassword=SOME_PASSWORD

Exemplo de configuração (arquivo .json):

"KeyStores": {
"MyKryptusHsm": {
"Type": "Kryptus",
"Host": "10.1.2.3",
"Port": 50000,
"RootUsername": "SOME_REGULAR_USER",
"RootPassword": "SOME_PASSWORD",
"VcoUsername": "SOME_VCO_USER",
"VcoPassword": "SOME_PASSWORD"
}
}
observação

Observe que o valor de Port mostrado acima é apenas um exemplo. Não há valor padrão para esta configuração: ele depende inteiramente da configuração do seu VHSM.

Solução de problemas​

Você pode encontrar o seguinte erro ao usar um repositório de chaves Kryptus no Ubuntu 20.04:

System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
---> System.Security.Authentication.AuthenticationException: Authentication failed, see inner exception.
---> Interop+OpenSsl+SslException: SSL Handshake failed with OpenSSL error - SSL_ERROR_SSL.
---> Interop+Crypto+OpenSslCryptographicException: error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
--- End of inner exception stack trace ---
at Interop.OpenSsl.DoSslHandshake(SafeSslHandle context, ReadOnlySpan`1 input, Byte[]& sendBuf, Int32& sendCount)
at System.Net.Security.SslStreamPal.HandshakeInternal(SafeFreeCredentials credential, SafeDeleteSslContext& context, ReadOnlySpan`1 inputBuffer, Byte[]& outputBptions sslAuthenticationOptions)
--- End of inner exception stack trace ---
at System.Net.Security.SslStream.ForceAuthenticationAsync[TIOAdapter](TIOAdapter adapter, Boolean receiveFirst, Byte[] reAuthenticationData, Boolean isApm)
at System.Net.Http.ConnectHelper.EstablishSslConnectionAsync(SslClientAuthenticationOptions sslOptions, HttpRequestMessage request, Boolean async, Stream streamllationToken)
--- End of inner exception stack trace ---
at System.Net.Http.ConnectHelper.EstablishSslConnectionAsync(SslClientAuthenticationOptions sslOptions, HttpRequestMessage request, Boolean async, Stream streamllationToken)
at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
...

Nesse caso, edite o arquivo de configuração do OpenSSL:

nano /etc/ssl/openssl.cnf

Adicione o seguinte no início do arquivo:

#
# This is part 1/2 of a workaround for SSL handshake issues with Kryptus HSMs, for more info
# see https://docs.lacunasoftware.com/articles/amplia/on-premises/key-stores/kryptus
#
openssl_conf = default_conf

Em seguida, adicione o seguinte no final do arquivo:

#
# This is part 2/2 of a workaround for SSL handshake issues with Kryptus HSMs, for more info
# see https://docs.lacunasoftware.com/articles/amplia/on-premises/key-stores/kryptus
#
[default_conf]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT:@SECLEVEL=1

Para mais informações, consulte a issue relacionada no repositório do .NET runtime.

Veja também​

Ver em Markdown