Erro na ferramenta: Não foram encontrados certificados que atendiam a todos os critérios fornecidos com um aplicativo da Windows Store?

294

Estou tentando assinar um pacote appx do Windows 8 com um arquivo pfx que tenho. Estou usando um comando assim:

signtool.exe sign /fd sha256 /f "key.pfx" "app.appx"

E a partir disso, recebo:

Erro SignTool: Não foram encontrados certificados que atendiam a todos os critérios especificados.

Quais "critérios" não estou cumprindo? Isso é apenas para teste, portanto, esses são certificados autoassinados. Tentei importar a chave e depois assiná-la, mas sempre resulta no mesmo erro. Como faço para corrigir isso?

Earlz
fonte
Eu acho que Signtoolestá tentando encontrar o certificado no armazenamento de certificados raiz confiáveis ​​e você não tem certificados de assinatura de código lá.
crea7or
15
Eu tive esse erro era porque o certificado que foi usado para a assinatura expirou
Mark Homer
1
Eu tive um problema semelhante e postei uma resposta aqui. Espero que isto ajude.
SurenSaluka

Respostas:

590

Ao obter esse erro pelo Visual Studio, foi porque havia uma configuração de certificado de assinatura para corresponder ao computador em que foi originalmente desenvolvido.

Você pode verificar isso acessando as propriedades do projeto> guia assinatura e verificando os detalhes do certificado.

Você pode desmarcar a opção "Assinar os manifestos do ClickOnce" para desativar a assinatura.

Propriedades de assinatura

Se você não deseja desativar esta opção, precisará instalar o certificado.

JDandChips
fonte
12
Apenas para adicionar o que o @JDandChips sugeriu: Para fins de depuração e teste, você também pode usar um certificado de teste temporário clicando no botão 'Criar certificado de teste', mostrado na imagem acima.
nam
O que você quer dizer com "instalar o certificado"?
precisa
Na minha situação, o certificado estava disponível na máquina em que foi originalmente desenvolvido, para que eu pudesse escolher "Selecionar do arquivo ..." para instalar o certificado ausente. Como alternativa, você sempre pode criar um novo e usar isso!
JDandChips
@JDandChips Como você cria um novo certificado?
Erotavlas
3
Para iniciantes do VS. Certifique-se de clicar com o botão direito do mouse no projeto, não na solução, pois isso abrirá um menu totalmente diferente!
B5A7
109

Tente com / debug. 1,2 Como em:

signtool sign /debug /f mypfxfile.pfx /p <password> (mydllexectuable).exe

Isso ajudará você a descobrir o que está acontecendo. Você deve obter uma saída como esta:

The following certificates were considered:
    Issued to: <issuer>
    Issued by: <certificate authority> Class 2 Primary Intermediate Server CA
    Expires:   Sun Mar 01 14:18:23 2015
    SHA1 hash: DD0000000000000000000000000000000000D93E

    Issued to: <certificate authority> Certification Authority
    Issued by: <certificate authority> Certification Authority
    Expires:   Wed Sep 17 12:46:36 2036
    SHA1 hash: 3E0000000000000000000000000000000000000F

After EKU filter, 2 certs were left.
After expiry filter, 2 certs were left.
After Private Key filter, 0 certs were left.
SignTool Error: No certificates were found that met all the given criteria.

Você pode ver qual filtro está fazendo com que seu certificado não funcione ou se nenhum certificado foi considerado.

Mudei os hashes e outras informações, mas você deve entender. Espero que isto ajude.


1 Observe: signtoolé específico sobre onde a /debugopção é colocada. Ele precisa ir atrás da signdeclaração.
2 Observe também: a /debugopção funciona apenas com algumas versões do signtool. A versão WDK tem a opção, enquanto a versão do Windows SDK não.

Daniel
fonte
3
Funciona para mim. Não que eu entenda a resposta do signtool, mas / debug fez o que deveria. Voto a favor!
Noelicus
1
Este comando é específico de onde você coloca o / debug Se você o colocar fora de ordem, ele relatará um erro.
Daniel
12
/ debug funciona apenas para versões específicas do signtool.exe. O que acompanha o WDK fornece essa opção, o do Windows SDK não.
Paul Kertscher 24/02
3
Além disso, / debug deve ir após o sinal da ferramenta, não no meio.
Denis V
Mostra que meu certificado expirou. Bom trabalho.
avantprime 02/09/2015
36

Sempre verifique primeiro a data de validade do seu certificado, porque a maioria dos certificados tem uma data de validade. No meu caso, o certificado expirou e eu estava tentando criar um projeto.

garoto prodígio
fonte
2
Para verificar a validade do certificado, vá para a linha de comandos, navegue até onde está o seu certificado e digite certutil -dump mycertificate.pfx. Observe a última entrada, pois as primeiras são a CA, não o seu certificado de assinatura de código.
precisa saber é o seguinte
23

Se você não precisa assinar o aplicativo, clique com o botão direito do mouse no seu projeto

Project Properties -> Signing -> uncheck "Sign the ClickOnce Manifest"

Além disso, como sugere este artigo da MS,

Se você estiver usando o Visual Studio 2008 e segmentando o .NET 3.5 e usando atualizações automáticas, poderá alterar o certificado e implantar uma nova versão,

nPcomp
fonte
1
Você também pode clicar em criar certificado de teste para continuar. Obrigado
MindRoasterMir 26/04
16

basta desmarcar a opção 'Assine o clique uma vez manifestado' na guia de assinatura nas propriedades do projeto, ele removerá o erro e você poderá criar um novo a partir daí.

Sourav Sharma
fonte
15

Obteve o mesmo problema, verificou-se que a chave privada do certificado não tinha permissão.
Para corrigir - abra o gerenciamento de certificação, encontre seu certificado, clique com o botão direito do mouse -> Gerenciar chaves privadas e, em segurança, verifique se o usuário foi adicionado e recebeu permissões, que o corrigiram para mim.

user3740240
fonte
15

No meu caso, tenho o tipo errado de certificado que estou tentando associar.
Eu tinha "Autenticação de servidor" em vez de "Assinatura de código" .
Você poderá ver isso no snap ao certificado na seção Finalidade pretendida.
Depois disso, tudo funciona bem.

maridob
fonte
1
Sim, ou seja, eu estava lutando por 2 dias procurando esta resposta.
Hakan Fıstık
14

Caso alguém mais se depare com isso: Meu problema acabou sendo que eu precisava executar o prompt de comando como administrador antes de usar o aplicativo signtool.exe. Então tudo funciona maravilhosamente.

Dave
fonte
11
Não ajudou no meu caso.
bgplaya
1
Estou executando o signtool do VS2015 como um script e estava enfrentando o mesmo problema. Corri o VS2015 como administrador eo signtool foi capaz de assinar o meu arquivo>
hamaney
10

Eu tive o mesmo problema no desenvolvimento de aplicativos de console e, como solução rápida ,

project propertiesentão

clique na signingguia e desmarque "Assine o ClickOnce Manifest".

Descrição da imagem:

insira a descrição da imagem aqui

insira a descrição da imagem aqui

FYI Você também pode ver esta solução de vídeo em menos de um minuto . A foto acima é tirada do vídeo.

Muhammad Faizan Khan
fonte
1
Você também pode clicar em criar certificado de teste para continuar. Obrigado
MindRoasterMir 26/04
9

Resolvi isso usando o /smsinalizador para especificar a procura na loja de máquinas em vez do padrão, que é minha loja (Usuário local). Além disso, pode ajudar a ativar a depuração do signtool usando /debug.

jle
fonte
8

Eu tive esse problema e não tenho certeza de qual etapa abaixo fez funcionar, mas espero que isso ajude outra pessoa ... foi isso que eu fiz:

  • Instale o certificado baixado (.crt) nos certificados (eu o coloco no armazenamento "pessoal") - clique com o botão direito do mouse no arquivo .crt e clique em Instalar certificado .
  • Execute certmgr.msce exporte o certificado (encontrado em qualquer loja que você usou na 1ª etapa) como um arquivo pfx incluindo chave privada e propriedades estendidas (provavelmente desnecessárias)
  • Use o arquivo .pfx exportado ao assinar seu projeto
  • Exemplo signtool: em signtool sign /f "c:\mycert.pfx" /p mypassword /d "description" /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetPath)
    que a senha é igual à fornecida durante a Exportação
noelicus
fonte
1
Obrigado, isso fez o truque. Eu estava usando o .crtarquivo que o Comodo forneceu em vez de instalar o certificado e depois exportá-lo .pfx.
Joshua Pinter
1
Muito obrigado!
Bruno Soares
6

Estou com o mesmo problema, lendo algumas respostas (postadas aqui), vi meu certificado expirado.

Basta criar um novo no meu projeto inicial. Em seguida, no gerenciador de certificados excluiu o certificado expirado.

Agora tudo compila bem.

Juan Pablo Gomez
fonte
5

Os critérios incluem nome da conta (cuja chave privada está associada), domínio, empresa, data de validade, finalidades pretendidas, entre outras coisas.

Existem muitos motivos possíveis para esse erro ocorrer, alguns já foram listados. Aqui está outra dica: Ao importar um certificado, certifique-se de trabalhar com o arquivo original recebido da autoridade de certificação (CA) , ou então algumas das propriedades podem ser perdidas.

Exemplo: recentemente tentei importar um certificado exportado de uma conta diferente na mesma máquina. O certificado tornou-se visível para minha conta, mas não estava associado à minha conta e, como resultado, signtoolse recusou a reconhecê-lo sem fornecer explicitamente o nome do arquivo e uma senha. Que, quando feito como parte do processo de compilação e gravado explicitamente em um arquivo em lotes ou arquivo de origem, pode não ser suficientemente seguro. (A importação do certificado original emitido pela CA o resolveu.)

Simon Hawkin
fonte
4

Eu tive a mesma mensagem " Após o filtro de chave privada, restam 0 certs " e passei grande parte da minha vida tentando descobrir o que a mensagem significava.

O problema era que eu havia instalado o certificado incorretamente no repositório de certificados do Windows, portanto não havia chave privada associada ao certificado de assinatura de código.

O que eu deveria ter feito foi o seguinte:

  1. Usando o Firefox ou o Internet Explorer, envie a solicitação ao emissor. Isso gera uma chave privada que é armazenada silenciosamente pelo navegador (uma caixa de diálogo aparece por uma fração de segundo no Firefox). Observe que outros navegadores podem não funcionar: sua vida é muito curta para descobrir se eles funcionam.

  2. Envie a solicitação, pule pelos aros e laços de validação do emissor, sacrifique uma cabra, ore aos deuses, envie uma declaração assinada por seus bisavós, etc.

  3. Faça o download do certificado (.crt) e importe-o para o mesmo navegador . O navegador agora possui a chave privada e o certificado .

  4. Exporte o certificado do navegador como um arquivo de troca de informações pessoais (.p12). Você será solicitado a fornecer uma senha para proteger este arquivo.

  5. Mantenha uma cópia de backup do arquivo .p12.

  6. Execute o Gerenciador de Certificados (certmgr.msc), clique com o botão direito do mouse no armazenamento de certificados pessoais , selecione Todas as tarefas / Importar ... e importe o arquivo .p12 para o Windows. Você será solicitado a senha usada para proteger o arquivo. Nesse momento, dependendo dos requisitos de segurança, você pode marcar a chave como exportável para restaurar uma cópia da loja do Windows. Você também pode marcar que uma senha é necessária antes do uso, se desejar interromper scripts em lote.

  7. Execute a ferramenta signool com sucesso, respire aliviado e pondere quanto da sua vida você desperdiçou devido a mensagens de erro incorretas e documentação insuficiente ou ausente.

MZB
fonte
2

Eu tive esse problema também, tentei muito. Usei o SDK e a assinatura do Visual Studio, mas em todos os lugares recebi "Não foram encontrados certificados que atendam a todos os critérios".

Solução: lembre-se de que, se "depois do filtro de chave privada": '0 esquerda' aparecer com a opção signtool sign / debug ..., a causa é que o seu PC não possui a CA na loja. Para resolver isso, instale primeiro a CA (no meu caso, um arquivo .crt) e execute o sinal novamente. Deve funcionar agora!

O Signtool somente pode ser usado com uma autoridade de certificação solicitada e de propriedade do mesmo PC.

John Schellingerhout
fonte
Não tive problemas ao usar o signtool com uma CA que veio de outro PC.
bparker
2

Meu problema acabou sendo que eu não entendia as opções da ferramenta de ferramentas. Eu havia fornecido a opção / n com algo que não correspondia ao meu certificado. Quando tirei isso, ele parou de reclamar.

Silwing
fonte
2

Eu tive um problema semelhante: o nome do computador foi alterado e o certificado expirou. Consegui resolver esse problema criando um novo certificado de teste.

No Visual Studio, clique com o botão direito do mouse no projeto no Solution Explorer. Selecione propriedades. Selecione a janela de propriedades Entrando. Clique em "Criar certificado de teste ....". Digite as informações da senha para o certificado de teste e clique em ok.

nate_weldon
fonte
2

Com / debug, quando você recebe esta mensagem "Após o filtro de chave privada, restam 0 certs.", Um motivo pode ser que o arquivo pfx não tenha a chave privada. Ao exportar o certificado instalado para o arquivo pfx, ative a caixa de seleção para incluir também a chave privada.

Prabhakaran Rajagopal
fonte
1

Vá para project propertiese desmarque todos os campos do Firmantes de iniciar a compilação

ionsofa
fonte