Asp.net Certificado digital - (Privatekey erro "Keyset does not exist" ou "Conjunto de chaves não encontrada")
Bom Dia Pessoal!
Passei um sufoco para assinar as NF-E ou Nfse pelo fato que não estar conseguindo pegar a "PrivateKey" dentro do certificado.
Bom para resolver o problema fiz os seguintes passos. (Windows 7)
1) Iniciar > Executar > mmc.exe dentro dele vá em Arquivo > "Adicionar/remover snap-in", procure por "Certificados" > Adicionar > Conta de Computador > Computador Local > Concluir > OK
2) Caso o certificado que você irá usar para assinar as notas eletrônicas não esteja em Certificaso > Pessoal > Certificados clique sobre a pasta Certificados e com o botão direito > "Todas as tarefas" > Importar.
3) Importando o Certficado > Avançar> "Selecione o arquivo..." Avançar> Informe a senha e marque a opção "Marcar essa chave como exportável...", Avançar > Avançar > Concluir.
4)Agora que seu certificado foi importando vamos dar permissão para o IIS acessar esse certificado vá em "C:\Users\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys" (w7) com o botão direito sobre "MachineKeys" > Propriedades > Segurança > Editar. Adicione os usuario "IIS_USRS" e "IURS" deixe as configurações padrão. "Ler & Executar", "Listar conteúdo da pasta" e "Leitura".
5) Agora vamos pegar o nome do certificado para utilizar no código, volte no mmc.exe na pasta Certificaso > Pessoal > Certificados dois cliques sobre o certificado que irá utilizar vá na aba Detalhes opção Requetente, copie o texto abaixo e transforme esse texto todo em uma uníca linha separando por virgula cada quebra de linha e removendo o espaço dentro o sinal de "=" exemplo:
CN = EMPRESA DE COMPUTADORES LTDA:99999999000999
OU = PROVEDORA SISTEMAS LTDA
OU = OUTRA INFORMACAO
O = EMPRESA PROPRIETARIA
C = BR
OU = PROVEDORA SISTEMAS LTDA
OU = OUTRA INFORMACAO
O = EMPRESA PROPRIETARIA
C = BR
transformado:
"CN=EMPRESA DE COMPUTADORES LTDA:99999999000999, OU=PROVEDORA SISTEMAS LTDA, OU=OUTRA INFORMACAO, O=EMPRESA PROPRIETARIA, C=BR"
6) Agora que estamos com o nome do certificado e com as configurações corretas vamos para o código que irá procurar no repositório "X509Store" o certificado.
C#
string nomeCertificado = "CN=EMPRESA DE COMPUTADORES LTDA:99999999000999, OU=PROVEDORA SISTEMAS LTDA, OU=OUTRA INFORMACAO, O=EMPRESA PROPRIETARIA, C=BR"
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2Collection colecaoCertificados = store.Certificates.Find(X509FindType.FindBySubjectDistinguishedName, nomeCertificado, false);
X509Certificate2 certificado = colecaoCertificados[0];
Ps. importante se precisar atualizar o certificado é necessário remover as permissões do usuário IIS_USRS e IUSRS remover o certificado antigo, adicionar o novo e dar novamente permissão, porque se esses usuário estiverem com permissão quando você adicionar o certificado ele não importará a PrivateKey.
Windows 7 : C:\Users\All Users\Application Data\Microsoft\Crypto\RSA
usuários: IIS_USRS e IUSRS
Windows 2003: C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA
usuário: Nesse caso vá no IIS, olhe na sua aplicação qual o pool ela usa, depois vá em Application Pool e em propriedade > Identity veja qual a conta está sedo usada para esse pool, caso seja "Network Service" então de permissão aos "Services" caso seja configurado outro usário, então esse deve ter acesso a pasta.
Abraços!
t+
Hoje encontrei essa dica mas não testei ainda.
t+
Hoje encontrei essa dica mas não testei ainda.
I found the culprit.
I installed the WinHttpCertCfg tool and granted access to the private key of the certificate.
The command I used is this:
WinHttpCertCfg.exe -g -c LOCAL_MACHINE\MY -s "" -a EVERYONE
I installed the WinHttpCertCfg tool and granted access to the private key of the certificate.
The command I used is this:
WinHttpCertCfg.exe -g -c LOCAL_MACHINE\MY -s "" -a EVERYONE
Comentários
Postar um comentário