Estou criando meu próprio serviço que se comunica usando sockets e SSL. Ele precisa de um certificado para funcionar, mas o certificado está atualmente bloqueado por uma senha.
Posso pensar em duas maneiras de consertar isso. Ou fazer com que o certificado não exija uma senha. Ou armazenar a senha do certificado em um arquivo separado, que o serviço pode ler para desbloquear o certificado.
Ambas as opções parecem uma má ideia. Qual é a melhor prática aqui?
Além disso, estou usando o OpenRC, não o systemd.
O HashiCorp Vault, o AWS Secrets Manager, o Google Cloud Secret Manager ou o keyctl do LINUX armazenam e gerenciam com segurança informações confidenciais com criptografia, controle de acesso e registro de auditoria.
Não é recomendado remover a senha de um certificado para uso de alta segurança, pois expõe a chave privada. Em vez disso, use o Passphrase File do OpenSSL ou o OpenRC para inicialização segura. Esses métodos ajudam a gerenciar segredos com segurança sem armazená-los em texto simples ou comprometer a segurança. Para casos de uso críticos, integre-se a um sistema de gerenciamento de segredos dedicado para manipular dados confidenciais com segurança em tempo de execução.
Bem, essa não é uma boa solução, porque se você acha que pode tornar essa senha segura e ilegível para outras pessoas, você pode fazer o mesmo com o certificado e não terá problemas em primeiro lugar.
Você está certo em sentir que ambas as opções são subótimas, porque elas dão acesso ao certificado (não criptografado) em repouso (alguém poderia argumentar que você teria criptografia de disco completo se essa fosse sua preocupação, mas isso apenas "muda o mesmo problema para mais adiante"). Em tempo de execução, o problema está lá, de qualquer forma: se você assumir que seu sistema não tem falhas de segurança surpreendentes, então somente o root (ou o proprietário especificamente designado daquele arquivo) poderia ler seu certificado não criptografado do arquivo. E o root poderia muito bem anexar um depurador ao serviço, para ler o certificado diretamente da memória do processo, onde ele tem que ficar.
Então,
A única solução aqui é não dar ao computador acesso ao material da chave secreta, o que leva a módulos de segurança de hardware, ou pelo menos à computação em enclave — ambos provavelmente fora do alcance do seu aplicativo.
Você realmente deveria ler a resposta de Kiyomizu sobre como pelo menos mitigar o risco de que alguma imagem de VM na nuvem seja abusada como meio de obter acesso ao certificado sem ser notado.