Acabamos de atualizar nossos projetos do Visual Studio 2008 para o Visual Studio 2010. Todos os nossos assemblies foram fortemente assinados usando um certificado de assinatura de código da Verisign . Desde a atualização, obtemos continuamente o seguinte erro:
Não é possível importar o seguinte arquivo de chave: companyname.pfx. O arquivo de chave pode estar protegido por senha. Para corrigir isso, tente importar o certificado novamente ou instale manualmente o certificado no CSP de nome forte com o seguinte nome de contêiner de chave: VS_KEY_3E185446540E7F7A
Isso acontece em algumas máquinas de desenvolvimento e não em outras. Alguns métodos usados para corrigir isso que funcionaram algumas vezes incluem:
- Reinstalando o arquivo de chave do Windows Explorer (clique com o botão direito do mouse no arquivo PFX e clique em Instalar)
- A instalação do Visual Studio 2010 em uma máquina nova pela primeira vez solicita a senha na primeira vez em que você abre o projeto e, em seguida, ele funciona. Em máquinas atualizadas a partir do Visual Studio 2008, você não recebe essa opção.
Tentei usar o utilitário SN.EXE (Strong Name Tool) para registrar a chave com o Strong Name CSP, conforme a mensagem de erro sugere, mas sempre que executo a ferramenta com alguma opção usando a versão que acompanha o Visual Studio 2010, SN .EXE apenas lista seus argumentos de linha de comando em vez de fazer qualquer coisa. Isso acontece independentemente dos argumentos que forneço.
Por que isso está acontecendo e quais são as etapas claras para corrigi-lo? Estou prestes a desistir das instalações do ClickOnce e da assinatura de código da Microsoft.
Descobri uma correção que ajuda você a criar com êxito em um ambiente de vários desenvolvedores:
Em vez de alterar a senha (que faz com que o arquivo .pfx seja alterado), selecione novamente o arquivo .pfx na caixa de combinação. Isso então chama a caixa de diálogo de senha. Após digitar a senha, o projeto será construído OK. Todo desenvolvedor pode fazer isso em sua máquina local sem modificar o arquivo .pfx.
Ainda estou tendo problemas para conseguir que os assemblies sejam assinados em nossa máquina do servidor de compilação. Estou recebendo o mesmo erro lá, no entanto, o uso do método sn.exe -i não resolve o problema do buildserver.
fonte
Eu tive o mesmo problema e excluir a loja e a leitura não funcionou. Eu tive que fazer o seguinte.
Obtenha uma cópia do OpenSSL . Está disponível para Windows . Ou use uma caixa Linux, pois todas elas praticamente a possuem.
Execute o seguinte para exportar para um arquivo de chave:
Em seguida, nas propriedades do projeto, você pode usar o arquivo PFX.
fonte
Eu falei muito cedo! A reconstrução trouxe os erros de volta ao jogo ...
Descobri que isso funciona - clique com o botão direito do mouse no Solution Explorer e exclua-o do projeto. Clique em Mostrar todos os arquivos , clique com o botão direito do mouse e agora inclua-o no projeto novamente. Agora desfazer alterações pendentes ...
Por alguma razão, isso resolveu o problema para mim e foi relativamente indolor!
fonte
Descobri que, em alguns casos, você deve tentar excluir essa chave antes de instalá-la. Faça o seguinte:
sn -d VS_XXXX
sn -i mykey.pfx VS_XXX
fonte
O VSCommands 2010 (plug-in do Visual Studio) pode corrigir isso automaticamente - basta clicar com o botão direito do mouse no erro e clicar em Aplicar correção no menu. Você pode obtê-lo na galeria do Visual Studio .
fonte
Depois de tentar todas essas soluções (e muito mais), descobri que o problema está em outro lugar. Para pessoas que passam pela mesma miséria que eu depois de comprar um certificado, compartilharei a solução para o meu problema.
Comportamento
Entendo que 'sign' aplica um nome forte e não um authenticode a uma DLL ou EXE. É por isso que signtool vai funcionar neste caso, mas 'sinal' no Visual Studio não funcionará.
Razão
No passado, eu tinha experiência com certificados da Verisign. Eles têm um
KeySpec=2
no certificado - que é usado com a funcionalidade 'assinar' no Visual Studio. Esses certificados funcionam bem para o Visual Studio e o signtool.Agora comprei certificados da Comodo, que estão incorretos
KeySpec=1
nos certificados de assinatura de código. Isso significa que esses certificados funcionam bem com signtool (authenticode), mas não com nomes fortes (o sinal suspenso).Solução
Existem duas maneiras de resolver esse problema:
sn -k [name].snk
. Assine o assembly usando o snk e depois use o signtool com seu certificado de assinatura de código para assinar o DLL / EXE com a assinatura authenticode. Embora isso pareça estranho, pelo que entendi, é uma maneira correta de lidar com certificados, porque nomes fortes têm um propósito diferente do authenticode (consulte também este link para obter detalhes sobre como isso funciona).KeySpec=2
. O procedimento para isso é detalhado aqui .Como quero usar vários nomes fortes, atualmente uso a opção (1), embora a opção (2) também funcione.
Para garantir que essa solução nunca se perca no futuro, eis o procedimento da solução 2:
KeySpec=1
) para um arquivo PFX. Nota: Faça o backup deste arquivo em um local seguro e teste se o arquivo pode ser importado ok em outra máquina, se você realmente quiser jogar em segurança!certutil -importPFX -user <pfxfilename> AT_SIGNATURE
Agora você deve ter um conjunto de chaves / certificado com
KeySpec=2
. Se necessário, agora você pode exportar isso para outro arquivo PFX usando o MMC novamente.fonte
Para resolver esse problema no Visual Studio 2012, clique com o botão direito do mouse no projeto, propriedades -> "assinatura" e desmarque a caixa "Assinar os manifestos do ClickOnce".
fonte
Selecionei novamente o arquivo Key (pfx) na caixa suspensa "Escolha um arquivo de chave de nome forte" e forneci a senha na janela pop-up "ENTER PASSWORD". Salvei meu projeto e reconstruiu.build com êxito.
Salve seu projeto e faça uma reconstrução.
Se receber a mensagem de erro: "Foi feita uma tentativa de referenciar um token que não existe", apenas ignore-o e Continue as etapas abaixo
Clique no botão 'Alterar senha':
Digite a senha original nas três caixas e clique em OK. Se você deseja alterar sua senha (ou se sua senha antiga não atender aos requisitos de complexidade), faça isso agora.
Salve seu projeto e faça uma reconstrução.
Mais informações..
fonte
Como solução alternativa, tentei executar o Visual Studio 2010 como administrador e funcionou para mim.
Eu espero que isso ajude.
fonte
Como autor original da solução alternativa no relatório de bug de conexão, há DUAS variantes desta mensagem (descobri mais tarde)
Para uma variante, você usa sn.exe (geralmente se estiver fazendo uma nomeação forte) para importar a chave para o armazenamento de nomeação forte.
A outra variante para a qual você usa o certmgr para importar é quando você está assinando um código para coisas como implantação clique uma vez (observe que você pode usar o mesmo certificado para os dois propósitos).
Espero que isto ajude.
fonte
Nada funcionou para mim, mas fui ver o gerenciador de certificados (mmc.exe). O certificado não foi importado na loja pessoal, então eu o importei manualmente e, em seguida, o projeto foi compilado.
Consulte Assinatura de manifesto ClickOnce e assinatura de assembly com nome forte usando a página de assinatura do Visual Studio Project Designer, assinando assemblies .
fonte
Selecionar novamente o arquivo da chave em uma caixa de combinação e digitar a senha ajuda nisso.
Mas é necessário fazer isso sempre que o arquivo-chave for alterado e parece não estar OK.
fonte
Eu tive o mesmo problema depois de mudar minha instalação do Windows para um SSD . Nenhuma das outras soluções funcionou para mim.
Minha solução foi abrir o arquivo do projeto no bloco de notas e remover todas as referências às teclas PFX. Depois que o arquivo for salvo, abra a solução no Visual Studio. Vá para projeto -> Propriedades -> Assinatura. Você não verá nenhuma chave listada na caixa de combinação 'escolha o arquivo de chave de nome forte'. Na caixa de combinação, navegue até a chave, selecione-a e seu projeto agora pode ser criado.
fonte
Meu problema era que o TFS Build Controller estava sendo executado como um serviço de rede e, por algum motivo, não entendi por que os certificados de serviço do Visual Studio Build Host não estavam sendo usados. Alterei a identidade do serviço de criação do Visual Studio para algo mais gerenciável, verifiquei se ele tinha direitos no servidor TFS e adicionei manualmente os certificados usando o MMC.
O problema também era que o MSBuild não pode adicionar os certificados protegidos por senha ao armazenamento.
fonte
Eu tive um problema semelhante, mas depois de selecionar o pfx em uma caixa de combinação "Arquivo de chave de nome forte" e digitar a senha, ainda recebi um erro semelhante (sem a parte do nome do contêiner):
Além disso, o painel de informações do certificado "Assine os manifestos do ClickOnce" não foi preenchido.
Eu fiz "Selecionar do arquivo ..." no meu pfx e resolveu o problema.
fonte
Todos os métodos descritos aqui não me ajudaram. Mas quando excluí o arquivo * .pfx do meu projeto e o adicionei à assinatura do assembly novamente, construí meu projeto sem nenhum erro! Não sei explicar os motivos. Mas funcionou para mim.
fonte
Ok, isso funcionou para mim. Abra a solução / projeto antigo como administrador no Visual Studio 2010 e abra a solução / projeto novo ou copiado. Como administrador, remova o arquivo pfk copiado na nova solução / projeto do Visual Studio 2010 e vá para as propriedades do projeto e desmarque-o.
Com os dois projetos abertos, copie e cole para o novo. Vá para as propriedades do projeto e selecione Build. Abri e fechei o Visual Studio e também após removê-lo do novo projeto construí-lo antes de copiá-lo do projeto antigo e selecioná-lo. Recebi o erro no início deste post primeiro quando copiei o projeto e tentei construí-lo.
fonte
No meu cenário, o serviço de compilação não estava usando a mesma conta de usuário que importou a chave usando
sn.exe
.Depois de alterar a conta para minha conta de administrador, tudo está funcionando bem.
fonte
Isso resolveu o meu problema: Abra seu projeto do VS
Clique duas vezes em Package.appxmanifest
Vá para a guia Packaging
clique em escolher certificado
clique em configurar certificado
selecione do arquivo e use example.pfx essa unidade ou qualquer outra coisa criada
fonte
Resolvi esse problema alterando a seguinte linha no arquivo .csproj do projeto Visual Studio:
Isso gerou o erro 'não é possível importar':
Alterar o valor para false fez com que o erro desaparecesse.
fonte
Eu recebi o mesmo erro. No meu caso, tentei todas as opções acima, mas não consegui o resultado.
Finalmente, percebi que, no meu caso, o motivo do erro foi que a senha do certificado não foi inserida ou inserida incorretamente. O erro desapareceu quando inseri a senha dinamicamente corretamente. bem sucedido
fonte
Infelizmente, nenhuma abordagem mencionada aqui funcionou para mim. Preciso registrar o PFX do casal em um contêiner de docker e preciso passar a senha via linha de comando.
Então, eu re-desenvolvi o
sn.exe -i <infile> <container>
comando em C # usando o RSACryptoServiceProvider . A fonte e o aplicativo estão no GitHub no SnInstallPfx projeto .O SnInstallPfx aplicativo aceita uma chave PFX e sua senha. Ele calcula o nome do contêiner de chave (VS_KEY_ *) automaticamente (emprestado do código-fonte do MSBuild) e o instala no nome forte CSP.
Uso:
fonte
Para quem está usando os corredores do GitLab:
./gitlab-runner.exe install --user ".\ENTER-YOUR-USERNAME" --password "ENTER-YOUR-PASSWORD"
(tive que parar e desinstalar primeiro)sn -i certificate.pfx VS_KEY_C***6
o nome do contêiner é sugerido na saída da tarefa com falha no GitLab (saída msbuild)
fonte