Ao importar um certificado de dispositivo/chave privada por meio do CERTLM, a GUI parece escolher um provedor de serviços de criptografia (CSP) obsoleto chamado "Microsoft Strong Cryptographic Provider"; Gostaria de saber se existe uma maneira de alterar isso para "Provedor de armazenamento de chaves de software da Microsoft" por meio do assistente ou da política de grupo ou (outros meios).
Mais detalhes: Um fornecedor me pediu para importar um PFX para um armazenamento de certificados de máquina local do Windows 11 por meio da seguinte sintaxe de comando de linha:
certutil -csp "Microsoft Software Key Storage Provider" -importpfx MyPathToCertificate.pfx NoExport
Isso funcionou muito bem com o software deles, porém quando tentei importar o mesmo PFX anteriormente, usei CERTLM (GUI) para importar o certificado para o mesmo local (máquina local/loja pessoal). Isso pareceu funcionar na época (o certificado apareceu lá), mas causou erros de descriptografia conforme indicado nos registros do fornecedor.
Veja como importei através do CERTLM:
- Iniciei o Prompt de Comando via UAC/Escolher Certificados (máquina local)
- Importei o PFX usando as opções padrão para a loja Pessoal
Depois de executar o seguinte comando:
Certutil -store My
Notei que o certificado tinha a seguinte linha:
Provider = Microsoft Strong Cryptographic Provider
enquanto o comando certutil escolheu explicitamente "Microsoft Software Key Storage Provider"
De acordo com https://www.pkisolutions.com/understanding-microsoft-crypto-providers/ "Microsoft Strong Cryptographic Provider" é um provedor legado obsoleto, enquanto "Microsoft Software Key Storage Provider" é uma escolha moderna e preferida para trabalhar com novas chaves .
O CSP diferente explica por que o aplicativo do fornecedor não estava funcionando após a importação original e entendo por que a MS escolheria um provedor "antigo" como padrão para compatibilidade com versões anteriores, mas estou curioso para saber se existem maneiras de especificar o CSP ao executar a importação através do CERTLM daqui para frente.
A resposta curta à sua pergunta: não, você não pode especificar o provedor durante a importação na GUI do MMC, você deve usar o certutil.
Os certificados MMC (
certmgr.msc
ecertlm.msc
) tentam importar chaves para o mesmo provedor conforme especificado no arquivo PKCS#12 como atributo (as máquinas Windows definem esse atributo durante a exportação do certificado para PFX e a lógica de importação respeita esse atributo). Se o provedor não for especificado ou não estiver disponível, as chaves serão importadas para o CSP legado. A razão é que em 2023 existem muitos aplicativos que não oferecem suporte a provedores de GNV e o CERTLM usa o provedor mais compatível.Se você quiser usar um provedor diferente, deverá usar o parâmetro
certutil -importPFX
with-csp
.Crypt32 teve a melhor resposta curta, mas tentarei embelezar com algumas dicas adicionais:
Resposta: Você não precisa escolher
"Microsoft Software Key Storage Provider"
se o certificado original foi criado com o mesmo provedor e exportado através do CERTLM como um PFX. E se você precisar especificar seu provedor, poderá substituí-lo (por exemplo, comcertutil -importPFX
parâmetro-csp
).Mais detalhes: Se você está apenas começando como eu, talvez tenha lido a documentação da Microsoft aqui , que fornece uma maneira de criar certificados autoassinados por meio do PowerShell e do
New-SelfSignedCertificate
comando.Tudo o que li online sugeriu que o
New-SelfSignedCertificate
comando cria certificados"Microsoft Software Key Storage Provider"
como provedor por padrão. No entanto, ao seguir as etapas do documento da Microsoft, você acaba sendoMicrosoft Strong Cryptographic Provider
seu provedor. Por que?O problema é a seguinte linha:
KeySpec = 'Signature'
De acordo com a documentação da Microsoft sobre o próprio comando PS , o KeySpec é essencialmente uma propriedade legada:
Ao incluir um valor para KeySpec, acabamos criando um certificado que usa o provedor legado padrão (
Microsoft Strong Cryptographic Provider
).Como nós consertamos isso? Basta substituir essa propriedade pelas duas seguintes:
O exemplo final é mais ou menos assim:
E se você executar este comando depois disso:
certutil -user -store My
Você deverá ver uma linha que dizProvider = Microsoft Software Key Storage Provider
depois desse certificado.