Eu gerencio alguns serviços de PKI, então esse é um problema familiar.
Sempre que possível, armazenamos as chaves CA em uma máquina autônoma. Isso é interno à rede da nossa empresa e hospeda serviços limitados, se houver algum. Os processos de solicitação e assinatura são abstraídos uns dos outros por meio de um protocolo simples e um pouco de pressionamento manual do botão. Com o tempo, as soluções que usamos se encaixam em dois campos:
-
Algo tão simples quanto um POST HTTPS que envia o CSR a um recurso interno, solicita uma senha e retorna os dados do CRT.
-
APIs unidirecionais sob medida e um pouco mais sofisticadas para extrair solicitações e empurrar os certificados de volta. O que na verdade consiste em uma tríade de sistemas, cada qual dividida para executar uma parte muito específica do ciclo de vida da PKI - ponto de coleta do usuário final, gerenciamento de licenças e assinatura.
Francamente, eu não aconselharia seguir este último, a menos que você tenha muito tempo ou um bom business case. Você poderia replicar algo como o primeiro. Alternativamente, como diz womble , você pode achar que seu escopo não garante isso; se você estiver confiante sobre o seu serviço na web e decidir que os danos não seriam muito difundidos.
Uma dessas razões que o dano não seria tão disseminado é que o seu plano atual inclui a criação de chaves privadas do cliente você mesmo. Isso sugere que, caso o servidor da Web seja comprometido, mesmo sem a chave CA presente, alguém terá acesso a certificados de cliente válidos e chaves privadas associadas com acesso aos seus serviços de qualquer maneira. O que pode muito bem preceder a segurança da sua CA. O ideal é que os clientes criem e sejam responsáveis por suas próprias chaves privadas.