Signtool hatası: Bir Windows Mağazası Uygulamasında verilen tüm ölçütleri karşılayan sertifika bulunamadı mı?


294

Sahip olduğum bir pfx dosyası ile bir Windows 8 appx paketini imzalamaya çalışıyorum. Ben böyle bir komut kullanıyorum:

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

Ve bundan:

SignTool Hatası: Verilen tüm ölçütleri karşılayan sertifika bulunamadı.

Hangi "ölçütleri" karşılamıyorum? Bu sadece test amaçlıdır, bu nedenle bunlar kendinden imzalı sertifikalardır. Anahtarı içe aktarmayı ve sonra imzalamayı denedim, ancak her zaman aynı hatayla sonuçlanır. Bunu nasıl düzeltirim?


Bu Signtoolsertifikanın güvenilir kök sertifika deposunda bulmaya çalıştığını ve orada kod imzalama sertifikaları olmadığını düşünüyorum.
crea7or

15
Bu hatayı aldım çünkü imzalama için kullanılan sertifikanın süresi doldu
Mark Homer

1
Benzer bir sorun yaşadım ve burada bir cevap gönderdim . Bu yardımcı olur umarım.
SurenSaluka

Yanıtlar:


590

Visual Studio aracılığıyla bu hatayı alırken, orijinal olarak geliştirildiği bilgisayarla eşleşen bir imzalama sertifikası kurulumu olmasıydı.

Proje özellikleri> imzalama sekmesine gidip sertifika ayrıntılarını kontrol ederek bunu kontrol edebilirsiniz.

İmzalamayı devre dışı bırakmak için "ClickOnce manifest'lerini imzala" nın işaretini kaldırabilirsiniz.

İmzalama Özellikleri

Bu seçeneği kapatmak istemiyorsanız sertifikayı yüklemeniz gerekir.


12
@JDandChips'in önerdiğini eklemek için: Hata ayıklama ve test amacıyla, yukarıdaki ekran görüntüsünde gösterilen 'Test Sertifikası Oluştur' düğmesine tıklayarak geçici bir test sertifikası da kullanabilirsiniz.
nam

Ne demek "sertifika yüklemek"?
Sean Kendle

Benim durumumda, sertifika ilk geliştirildiği makineden temin edilebilirdi, bu yüzden eksik sertifikayı kurmak için "Dosyadan Seç ..." seçeneğini seçebilirim. Alternatif olarak her zaman yeni bir tane oluşturabilir ve kullanabilirsiniz!
JDandChips

@JDandChips Yeni bir sertifika nasıl oluşturulur?
erotavlas

3
VS yeni başlayanlar için. Çözümü değil, projeyi sağ tıkladığınızdan emin olun çünkü bu tamamen farklı bir menüyü açacaktır!
B5A7

109

/ Debug ile deneyin. 1,2 olduğu gibi:

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

Neler olup bittiğini bulmanıza yardımcı olacaktır. Bunun gibi çıktı almalısınız:

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.

Hangi filtrenin çalışmamasına neden olduğunu veya hiçbir sertifikanın dikkate alınmadığını görebilirsiniz.

Karmaları ve diğer bilgileri değiştirdim, ama fikri almalısın. Bu yardımcı olur umarım.


1 Lütfen dikkat: seçeneğin signtoolnereye /debugyerleştirildiği ile ilgilidir. İfadeden sonra gitmesi gerekiyor sign.
2 Ayrıca dikkat: /debugseçenek yalnızca bazı sürümleriyle çalışır signtool. WDK sürümü seçeneği vardır, ancak Windows SDK sürümü yoktur.


3
Benim için çalışıyor. Signtool'un yanıtını anladığımdan değil, / debug ne gerekiyorsa yaptı. Oyla!
noelicus

1
Bu komut, / debug komutunu nereye koyduğunuzla ilgilidir. Düzgün koymazsanız, bir hata bildirir.
Daniel

12
/ debug yalnızca signtool.exe'nin belirli sürümlerinde çalışır. WDK ile birlikte gelen bu seçeneği sağlar, Windows SDK'dan gelen seçeneği sağlamaz.
Paul Kertscher

3
Ayrıca, / debug aralarında değil, signtool işaretinden sonra gitmelidir.
Denis V

Sertifikamın süresinin dolduğunu gösterir. Aferin.
avantprime

36

Lütfen her zaman önce sertifikanızın son kullanma tarihini kontrol edin çünkü sertifikaların çoğunun bir son kullanma tarihi vardır. Benim durumumda sertifikanın süresi doldu ve proje oluşturmaya çalışıyordum.


2
Sertifikanın sona erme tarihini kontrol etmek için komut satırına gidin, sertifikanızın bulunduğu yere gidin, ardından girin certutil -dump mycertificate.pfx. İlk girişe kod imzalama sertifikanız değil, CA girildiğinden bakın.
HokeyJ

23

Uygulamayı imzalamanız gerekmiyorsa, projenizi sağ tıklayın

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

Ayrıca bu MS makalesinde belirtildiği gibi ,

Visual Studio 2008 kullanıyorsanız ve .NET 3.5'i hedefliyor ve otomatik güncelleştirmeler kullanıyorsanız, sertifikayı değiştirebilir ve yeni bir sürüm dağıtabilirsiniz,


1
Ayrıca devam etmek için test sertifikası oluştur'a da tıklayabilirsiniz. teşekkürler
MindRoasterMir

16

proje özelliklerindeki imzalama sekmesinden 'Tıklama bildirimlerini bir kez imzala' seçeneğinin işaretini kaldırın, hatayı kaldıracak ve oradan yeni bir tane oluşturabilirsiniz.


15

Aynı sorunu aldım, sertifikanın özel anahtarının izni olmadığı ortaya çıktı.
Düzeltmek için - sertifika yönetimini açın, sertifikanızı bulun, sağ tıklayın -> Özel Anahtarları Yönetin ve sonra üstte güvenliğinize eklenmiş ve izinleri verilmiş olduğundan emin olun.


15

Benim durumumda ilişkilendirmeye çalıştığım yanlış türde sertifika var. "Kod imzalama" yerine "Sunucu Kimlik Doğrulaması"
yaptım . Bunu, Amaçlanan Amaç bölümünde yer alan Sertifika ekinde görebilirsiniz. Bundan sonra, sadece iyi çalışıyor.


1
Evet, yani, 2 gün boyunca bu cevabı aramak için uğraşıyordum.
Hakan Fıstık

14

Başkasının buna girmesi durumunda: Sorunum, signtool.exe uygulamasını kullanmadan önce komut istemini yönetici olarak çalıştırmanız gerektiğiydi. Sonra her şey harika çalışıyor.


11
Benim durumumda yardımcı olmadı.
bgplaya

1
Ben bir komut dosyası olarak VS2015 signtool çalıştırıyorum ve aynı sorunla karşı karşıya idi. VS2015'i yönetici olarak çalıştırdım ve signtool dosyamı imzalamayı başardı>
hamaney


9

Bunu /sm, makine mağazamda varsayılan (Benim (Yerel Kullanıcı) depomuz) yerine bakmayı belirtmek için bayrağı kullanarak çözdüm. Ayrıca, kullanarak signtool için hata ayıklamayı açmak yardımcı olabilir /debug.


8

Bu sorunu yaşadım ve aşağıdaki adımın işe yaradığından tam olarak emin değilim, ancak umarım bu başka birine yardımcı olur ...

  • İndirilen sertifikayı (.crt) sertifikalara yükleyin (“kişisel” depoya koydum) - .crt dosyasına sağ tıklayın ve Sertifika Yükle'ye tıklayın .
  • Sertifikayı (1. adımda kullandığınız mağazada bulunan) özel anahtar ve genişletilmiş özellikler (muhtemelen gereksiz) içeren bir pfx dosyası olarak çalıştırın certmgr.mscve dışa aktarın
  • Projenizi imzalarken dışa aktarılan .pfx dosyasını kullanın
  • Örnek signtool: signtool sign /f "c:\mycert.pfx" /p mypassword /d "description" /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetPath)
    Dışa aktarma sırasında şifrenin aynı olduğu durumlarda

1
Teşekkürler, bu hile yaptı. .crtSertifikayı yüklemek yerine Comodo tarafından sağlanan dosyayı kullanıyordum ve dosyayı dışa .pfxaktardım.
Joshua Pinter

1
Çok teşekkür ederim!
Bruno Soares

6

Aynı sorunu yaşıyorum, (burada yayınlanan) bazı cevapları okuyorum, sertifikamın süresinin dolduğunu gördüm.

Başlangıç ​​projemden yeni bir tane oluştur. Sonra sertifika yöneticisinde süresi dolmuş sertifikayı sildi.

Şimdi her şey yolunda gidiyor.


5

Kriterler, diğer şeylerin yanı sıra hesap adını (özel anahtarı ilişkili olduğu), alan adını, şirketi, son kullanma tarihini, amaçlanan amaçları içerir.

Bu hatanın oluşmasının birçok farklı nedeni olabilir, bazıları zaten listelenmiştir. Başka bir ipucu: Bir sertifikayı alırken , sertifika yetkilisinden (CA) alınan orijinal dosyayla çalıştığınızdan emin olun , aksi takdirde bazı özellikler kaybolabilir.

Örnek: son zamanlarda aynı makinede farklı bir hesaptan dışa aktarılan bir sertifikayı almaya çalıştım. Sertifika hesabım tarafından görülebildi, ancak hesabımla ilişkilendirilmedi ve sonuç olarak signtool, dosya adını ve parolayı açıkça vermeden tanımayı reddetti. Oluşturma işleminin bir parçası olarak yapıldığında ve açıkça bir toplu iş dosyasında veya kaynak dosyasında yazıldığında, yeterince güvenli olmayabilir. (CA tarafından verilen orijinal sertifikanın alınması sorunu çözdü.)


4

Aynı " Özel Anahtar filtresinden sonra 0 sertifika bırakıldı " mesajını aldım ve hayatımın büyük bir kısmını mesajın ne anlama geldiğini anlamaya çalışarak geçirdim.

Sorun, kod imzalama sertifikası ile ilişkili özel bir anahtar yoktu bu yüzden sertifikayı Windows Sertifika deposuna yanlış yüklemiştim.

Ne yapmalıydım şuydu:

  1. Firefox veya Internet Explorer kullanarak isteği yayıncıya gönderin. Bu, tarayıcı tarafından sessizce saklanan bir ÖZEL TUŞ oluşturur (Firefox'ta saniyenin bir kısmı için bir iletişim kutusu görüntülenir). Diğer tarayıcıların çalışmayabileceğini unutmayın: Hayatınız işe yarayıp yaramadığını öğrenmek için çok kısa.

  2. İsteği gönderin, ihraççının doğrulama çemberleri ve döngülerinden atlayın, bir keçiyi feda edin, tanrılara dua edin, büyük büyükanne ve büyükbabanızdan imzalı bir ifade gönderin vb.

  3. Sertifikayı (.crt) indirin ve aynı tarayıcıya alın . Tarayıcı artık hem özel anahtara hem de sertifikaya sahip .

  4. Sertifikayı tarayıcıdan Kişisel Bilgi Değişimi (.p12) dosyası olarak dışa aktarın. Bu dosyayı korumak için bir parola girmeniz istenecektir.

  5. .P12 dosyasının yedek bir kopyasını saklayın.

  6. Sertifika Yöneticisi'ni (certmgr.msc) çalıştırın, Kişisel sertifika deposuna sağ tıklayın, Tüm Görevler / İçe Aktar ... 'ı seçin ve .p12 dosyasını Windows'a alın. Dosyayı korumak için kullandığınız şifreyi girmeniz istenir. Bu noktada, güvenlik gereksinimlerinize bağlı olarak, anahtarı Windows mağazasından geri yükleyebilmek için anahtarı dışa aktarılabilir olarak işaretleyebilirsiniz. Toplu komut dosyalarını kırmak istiyorsanız, kullanmadan önce bir parola gerektiğini de işaretleyebilirsiniz.

  7. Signtool'u başarıyla çalıştırın, rahat bir nefes alın ve kötü hata mesajları ve zayıf veya eksik belgeler nedeniyle hayatınızın ne kadarını boşa harcadığınızı düşünün.


2

Ben de bu sorunu yaşadım, çok denedim. SDK'nın yanı sıra Visual Studio imzasını kullandım, ancak her yerde "Verilen tüm ölçütleri karşılayan sertifika bulunamadı".

Çözüm: "Özel anahtar filtresinden sonra": '0 sola' seçeneği signtool sign / debug ... ile görünüyorsa, bunun nedeni PC'nizin mağazada CA'nın bulunmamasıdır. Bunu çözmek için önce CA'yı yükleyin (benim durumumda bir .crt dosyası), ardından işareti yeniden çalıştırın. Şimdi çalışmalı!

Signtool yalnızca aynı PC'ye ait olan ve talep edilen bir CA ile kullanılabilir.


Signtool'u başka bir bilgisayardan gelen bir CA ile kullanırken sorun yaşamadım.
bparker

2

Benim sorunum ben signtool seçenekleri anlamadı olmak sona erdi. / N seçeneğini sertifikamla eşleşmeyen bir şey sağladım. Ben kaldırıldığında şikayet durdu.


2

Benzer bir sorun yaşadım bilgisayar adım değişti ve sertifikanın süresi doldu. Yeni bir test sertifikası oluşturarak bu sorunu çözebildim.

Visual Studio'da, çözüm gezgininde projeye sağ tıklayın. Özellikleri seçin. Özellikler penceresinde imzalama'yı seçin. "Test Sertifikası Oluştur ..." seçeneğini tıklayın. Test sertifikası için şifre bilgilerini girin ve Tamam'a tıklayın.


2

/ Debug ile, "Özel Anahtar filtresinden sonra 0 sertifika kaldı" iletisini aldığınızda, bunun bir nedeni pfx dosyasının özel anahtarının olmaması olabilir. Yüklü sertifikayı pfx dosyasına aktardığınızda, onay kutusunun özel anahtarı da içermesini sağlayın.


1

Derlemeyi başlatmadan önce project propertiestüm alanlara git ve işaretlerini kaldırFirm

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.