Há algum tempo, comprei um certificado EV de assinatura de código da DigiCert. Eu já tinha um eToken USB, então selecionei um método de entrega onde o baixei do site deles. O pedido exigiu que eu anexasse um CSR, que gerei por meio do Certificate Utility para Windows. Em nenhum momento houve qualquer interação usando o eToken de hardware existente e ele nem estava conectado, então sei que a chave privada deve ter sido armazenada na máquina Windows, que gerou o CSR, e não no eToken USB.
Quando eles me enviaram os links de download, eu simplesmente os importei para o DigiCert Certificate Utility deles. O que significa que o certificado e a chave privada agora residem no meu PC, não no meu eToken USB.
Parece que nem preciso que o dispositivo eToken assine o código, o que me faz pensar, qual era o objetivo do eToken em primeiro lugar para esse método de entrega específico? Eu deveria exportar a chave privada e o certificado e importá-los para o eToken USB e depois excluí-los da minha máquina? Supondo que o único trabalho do eToken seja armazenar uma chave privada que não pode ser exportada facilmente, por que há uma opção para entregar um certificado EV por meio de um link de download e por que consegui gerar CSR com um programa utilitário sem anexar o eToken USB?
O certificado não é a chave privada. É uma versão assinada da chave pública . O método de entrega do certificado, portanto, não tem relação com onde ou como a chave privada é armazenada.
Não há nada no CSR que indique onde a chave privada foi gerada. (E o aplicativo DigiCert é uma ferramenta de uso geral; não se limita especificamente ao uso do eToken.)
Alguns tokens de hardware suportam "atestação de chave", onde o próprio dispositivo produz um CSR com sua própria assinatura como prova de que a chave privada foi de fato gerada no dispositivo, e algumas CAs exigem tais atestados. Por exemplo, a Sectigo – se bem me lembro – suporta emissão baseada em CSR de certificados EV apenas com tokens muito específicos (Yubikey principalmente), pois esses são os únicos que suportam atestação de chave.
Mas outras CAs, como a DigiCert aparentemente, podem deixar como responsabilidade do usuário garantir que a chave seja gerada com segurança.
Veja o que as regras do Fórum CA/B dizem sobre isso:
Então, enquanto a Sectigo, por exemplo, se limita às opções a) ou b), talvez o "(mas não se limita a)" dê à DigiCert liberdade suficiente para aceitar qualquer CSR e dizer "o cliente assinou um contrato que exige que ele armazene o produto com segurança, então não é mais problema nosso".
Essa seria uma maneira possível de configurar o eToken, mas não necessariamente a maneira ideal.
Ao gerar um CSR para um eToken com a máxima segurança em mente, o ideal é que isso seja feito usando uma ferramenta compatível com eToken, com o token conectado. Isso permite que a geração do CSR aconteça dentro do token, de modo que a chave privada também seja criada dentro do token e nunca saia do token durante toda a vida útil do certificado.
Entretanto, a segurança máxima pode exigir um comprometimento em termos de disponibilidade: se o token estiver danificado e a chave privada estiver bloqueada dentro do token, não poderá haver backup da chave privada e, portanto, um novo certificado precisará ser criado.
Ao permitir a criação de certificados compatíveis com eToken sem envolver o token real, a CA torna possível que você importe a mesma chave privada para dois ou mais eTokens, permitindo uma substituição fácil se um único eToken falhar. O outro lado é que você terá que garantir a segurança do processo de geração de chaves e configuração do eToken. A maneira recomendada seria fazer isso em um sistema airgapped que pode ser totalmente apagado assim que o(s) eToken(s) forem testados e considerados bons.
Nem o CSR nem o certificado resultante precisam ser mantidos em segredo: na verdade, seus clientes precisarão de uma cópia do certificado para poderem validar as assinaturas de código que você gera usando a chave privada. É por isso que entregar o certificado por meio de um link de download não é um problema.
Como a CA nunca obtém sua chave privada, você tem certeza de que ela não pode vazá-la para ninguém.