ข้อผิดพลาด Signtool: ไม่พบใบรับรองที่ตรงตามเกณฑ์ที่กำหนดทั้งหมดด้วย Windows Store App หรือไม่


294

ฉันกำลังพยายามลงชื่อแพคเกจ Windows 8 appx ด้วยไฟล์ pfx ที่ฉันมี ฉันใช้คำสั่งเช่นนั้น:

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

และจากนี้ฉันจะได้รับ:

ข้อผิดพลาด SignTool: ไม่พบใบรับรองที่ตรงกับเกณฑ์ที่กำหนดทั้งหมด

"เกณฑ์" ฉันไม่ได้พบอะไร นี่เป็นเพียงการทดสอบเท่านั้นดังนั้นจึงเป็นใบรับรองที่ลงชื่อด้วยตนเอง ฉันได้ลองนำเข้ากุญแจแล้วเซ็นชื่อ แต่มันจะส่งผลให้เกิดข้อผิดพลาดเดียวกันเสมอ ฉันจะแก้ไขสิ่งนี้ได้อย่างไร


ฉันคิดว่าSigntoolกำลังพยายามค้นหาใบรับรองในที่เก็บใบรับรองหลักที่เชื่อถือได้และคุณไม่มีใบรับรองการลงนามรหัสที่นั่น
crea7or

15
ฉันมีข้อผิดพลาดนี้เป็นเพราะใบรับรองที่ใช้สำหรับการลงชื่อหมดอายุ
Mark Homer

1
ฉันมีปัญหาที่คล้ายกันและโพสต์คำตอบที่นี่ หวังว่านี่จะช่วยได้
SurenSaluka

คำตอบ:


590

เมื่อได้รับข้อผิดพลาดนี้ผ่าน Visual Studio มันเป็นเพราะมีการตั้งค่าใบรับรองการลงนามเพื่อให้ตรงกับคอมพิวเตอร์ที่พัฒนามา

คุณสามารถตรวจสอบสิ่งนี้ได้โดยไปที่คุณสมบัติโครงการ> แท็บเซ็นชื่อและตรวจสอบรายละเอียดใบรับรอง

คุณสามารถยกเลิกการเลือก "ลงชื่อในรายการ ClickOnce" เพื่อปิดการลงชื่อ

การลงนามคุณสมบัติ

หากคุณไม่ต้องการปิดตัวเลือกนี้คุณจะต้องติดตั้งใบรับรอง


12
เพียงเพิ่มสิ่งที่แนะนำ @JDandChips: สำหรับการดีบักและการทดสอบคุณสามารถใช้ใบรับรองการทดสอบชั่วคราวโดยคลิกที่ปุ่ม 'สร้างใบรับรองการทดสอบ' ที่แสดงในภาพหน้าจอด้านบน
nam

คุณหมายถึงอะไร "ติดตั้งใบรับรอง"?
Sean Kendle

ในสถานการณ์ของฉันมีใบรับรองจากเครื่องที่พัฒนามาตั้งแต่แรกดังนั้นฉันสามารถเลือก "เลือกจากไฟล์ ... " เพื่อติดตั้งใบรับรองที่ขาดหายไป หรือคุณสามารถสร้างใหม่และใช้สิ่งนั้นได้!
JDandChips

@JDandChips คุณจะสร้างใบรับรองใหม่ได้อย่างไร
erotavlas

3
สำหรับมือใหม่ VS ให้แน่ใจว่าคุณคลิกขวาที่โครงการไม่ใช่วิธีแก้ปัญหาเพราะจะทำให้เมนูแตกต่างอย่างสิ้นเชิง!
B5A7

109

ลองด้วย / debug 1,2ใน:

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

มันจะช่วยให้คุณค้นหาสิ่งที่เกิดขึ้น คุณควรได้ผลลัพธ์ดังนี้:

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.

คุณสามารถดูตัวกรองที่ทำให้ใบรับรองของคุณไม่ทำงานหรือหากไม่มีการพิจารณาใบรับรอง

ฉันเปลี่ยนแฮชและข้อมูลอื่น แต่คุณควรเข้าใจ หวังว่านี่จะช่วยได้


1 โปรดทราบ: signtoolมีความเฉพาะเจาะจงเกี่ยวกับที่/debugวางตัวเลือก มันต้องไปหลังจากsignคำสั่ง
2 หมายเหตุ: /debugตัวเลือกนี้ใช้งานได้กับบางรุ่นsigntoolเท่านั้น รุ่น WDK มีตัวเลือกในขณะที่รุ่น Windows SDK ไม่มี


3
ได้ผลสำหรับฉัน ไม่ใช่ว่าฉันเข้าใจการตอบสนองจาก signtool แต่ / debug ก็ทำตามที่ควรจะเป็น Upvote!
noelicus

1
คำสั่งนี้เฉพาะกับที่คุณใส่ / debug หากคุณสั่งมันออกมาจากคำสั่งจะรายงานข้อผิดพลาด
Daniel

12
/ debug ใช้ได้กับ signtool.exe รุ่นที่ระบุเท่านั้น ตัวเลือกที่มาพร้อมกับ WDK มีตัวเลือกนี้ส่วนหนึ่งจาก Windows SDK ไม่มี
Paul Kertscher

3
นอกจากนี้ / debug จะต้องอยู่หลังเครื่องหมาย signtool ไม่ใช่อยู่ระหว่าง
เดนิส V

แสดงว่าใบรับรองของฉันหมดอายุ ทำได้ดีมาก
avantprime

36

โปรดตรวจสอบวันหมดอายุใบรับรองของคุณก่อนเสมอเพราะใบรับรองส่วนใหญ่มีวันหมดอายุ ในกรณีใบรับรองของฉันหมดอายุและฉันพยายามสร้างโครงการ


2
certutil -dump mycertificate.pfxหากต้องการตรวจสอบหมดอายุใบรับรองไปที่บรรทัดคำสั่งให้ไปที่ใบรับรองของคุณเป็นแล้วป้อน ดูรายการสุดท้ายเนื่องจากรายการแรกเป็น CA ไม่ใช่ใบรับรองการเซ็นชื่อรหัสของคุณ
HockeyJ

23

หากคุณไม่จำเป็นต้องลงนามในแอพให้คลิกขวาที่โครงการของคุณ

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

ยังเป็นที่นี้บทความ MS แนะนำ

หากคุณใช้ Visual Studio 2008 และกำหนดเป้าหมายเป็น. NET 3.5 และใช้การอัปเดตอัตโนมัติคุณสามารถเปลี่ยนใบรับรองและปรับใช้เวอร์ชันใหม่ได้


1
คุณสามารถคลิกที่สร้างใบรับรองการทดสอบเพื่อดำเนินการต่อ ขอบคุณ
MindRoasterMir

16

เพียงยกเลิกการเลือก 'ลงชื่อเข้าใช้คลิกหนึ่งครั้งที่ปรากฏ' จากแท็บการลงนามในคุณสมบัติโครงการมันจะลบข้อผิดพลาดออกและคุณสามารถสร้างขึ้นมาใหม่ได้


15

มีปัญหาเดียวกันปรากฎว่ารหัสส่วนตัวของใบรับรองไม่ได้รับอนุญาต
หากต้องการแก้ไข - เปิดการจัดการใบรับรองให้ค้นหาใบรับรองของคุณคลิกขวา -> จัดการไพรเวตคีย์จากนั้นในการรักษาความปลอดภัยที่ด้านบนต้องแน่ใจว่าผู้ใช้ของคุณได้รับการเพิ่มและได้รับการอนุญาต


15

ในกรณีของฉันฉันมีใบรับรองประเภทผิดที่ฉันพยายามจะเชื่อมโยง
ฉันมี"การรับรองเซิร์ฟเวอร์"มากกว่า"การลงนามในรหัส"
คุณควรจะเห็นสิ่งนี้ในใบรับรองสแนปในส่วนวัตถุประสงค์ที่ตั้งใจไว้
หลังจากนั้นก็ทำงานได้ดี


1
ใช่นั่นคือฉันกำลังดิ้นรนเป็นเวลา 2 วันเพื่อค้นหาคำตอบนี้
Hakan Fıstık

14

ในกรณีที่บุคคลอื่นพบปัญหานี้: ปัญหาของฉันคือฉันต้องการเรียกใช้พรอมต์คำสั่งในฐานะผู้ดูแลก่อนที่จะใช้แอพ signtool.exe จากนั้นทุกอย่างทำงานได้อย่างยอดเยี่ยม


11
ไม่ได้ช่วยในกรณีของฉัน
bgplaya

1
ฉันกำลังเรียกใช้ signtool จาก VS2015 เป็นสคริปต์และฉันกำลังเผชิญกับปัญหาเดียวกัน ฉันใช้ VS2015 ในฐานะผู้ดูแลระบบและ signtool ก็สามารถลงชื่อไฟล์ของฉันได้>
hamaney

10

ฉันมีปัญหาเดียวกันในของฉันการพัฒนาโปรแกรมประยุกต์คอนโซลและเป็นวิธีแก้ปัญหาอย่างรวดเร็ว ,

ไปproject propertiesแล้ว

คลิกที่signingแท็บและยกเลิกการเลือก "ลงชื่อในรายการ ClickOnce"

คำอธิบายภาพ:

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

FYI นอกจากนี้คุณยังสามารถดูการแก้ปัญหานี้วิดีโอน้อยกว่าหนึ่งนาที ภาพด้านบนเป็นรูปแบบวิดีโอ


1
คุณสามารถคลิกที่สร้างใบรับรองการทดสอบเพื่อดำเนินการต่อ ขอบคุณ
MindRoasterMir

9

ฉันแก้ไขปัญหานี้โดยใช้/smแฟล็กเพื่อระบุให้ดูในที่เก็บเครื่องแทนค่าเริ่มต้นซึ่งเป็นที่เก็บของฉัน (ผู้ใช้ท้องถิ่น) นอกจากนี้ยังสามารถช่วยในการเปิดการแก้ปัญหาสำหรับ signtool /debugโดยใช้


8

ฉันมีปัญหานี้และฉันไม่แน่ใจว่าขั้นตอนใดด้านล่างนี้ใช้งานได้ แต่หวังว่านี่จะช่วยคนอื่น ... นี่คือสิ่งที่ฉันทำ:

  • ติดตั้งใบรับรองดาวน์โหลด (.crt) ลงในใบรับรอง (ผมใส่มันเข้าไปในร้าน“ส่วนบุคคล”) - คลิกขวาที่ไฟล์ .crt และคลิกติดตั้งใบรับรอง
  • เรียกใช้certmgr.mscและส่งออกใบรับรอง (พบในร้านใดก็ตามที่คุณใช้ในขั้นตอนที่ 1) เป็นไฟล์ pfx รวมถึงคีย์ส่วนตัวและคุณสมบัติเพิ่มเติม (อาจไม่จำเป็น)
  • ใช้ไฟล์. pfx ที่ส่งออกเมื่อลงชื่อโครงการของคุณ
  • ตัวอย่าง signtool: signtool sign /f "c:\mycert.pfx" /p mypassword /d "description" /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetPath)
    โดยที่รหัสผ่านเหมือนกับที่ระบุในระหว่างการส่งออก

1
ขอบคุณนี่เป็นกลอุบาย ฉันใช้.crtไฟล์ที่ Comodo ให้ไว้แทนการติดตั้งใบรับรองแล้วส่งออก.pfxไฟล์
Joshua Pinter

1
ขอบคุณมาก!
บรูโน่ Soares

6

ฉันมีปัญหาเดียวกันอ่านคำตอบ (โพสต์ที่นี่) ฉันเห็นใบรับรองของฉันหมดอายุ

เพียงสร้างใหม่จากโครงการเริ่มต้นของฉัน จากนั้นที่ผู้จัดการใบรับรองลบใบรับรองที่หมดอายุ

ตอนนี้ทุกอย่างคอมไพล์ดี


5

เกณฑ์รวมถึงชื่อบัญชี (ซึ่งมีรหัสส่วนตัวที่เชื่อมโยงกับ), โดเมน, บริษัท , วันหมดอายุ, วัตถุประสงค์ที่ตั้งใจ, เหนือสิ่งอื่นใด

มีหลายสาเหตุที่เป็นไปได้สำหรับข้อผิดพลาดนี้ที่จะเกิดขึ้นบางรายการมีอยู่แล้ว นี่คือเคล็ดลับอื่น: เมื่อนำเข้าใบรับรองให้แน่ใจว่าคุณทำงานกับไฟล์ต้นฉบับที่ได้รับจากหน่วยงานผู้ออกใบรับรอง (CA)มิฉะนั้นคุณสมบัติบางอย่างอาจหายไป

ตัวอย่าง: เมื่อเร็ว ๆ นี้ฉันพยายามนำเข้าใบรับรองที่ส่งออกจากบัญชีอื่นในเครื่องเดียวกัน ใบรับรองปรากฏให้เห็นในบัญชีของฉัน แต่ไม่ได้เชื่อมโยงกับบัญชีของฉันและเป็นผลให้signtoolปฏิเสธที่จะรับรู้โดยไม่ต้องให้ชื่อไฟล์และรหัสผ่านอย่างชัดเจน ซึ่งเมื่อดำเนินการเป็นส่วนหนึ่งของกระบวนการสร้างและเขียนออกมาอย่างชัดเจนในไฟล์แบทช์หรือไฟล์ต้นฉบับอาจไม่ปลอดภัยเพียงพอ (การนำเข้าใบรับรองที่ออกโดย CA ต้นฉบับแก้ไขได้)


4

ฉันมีข้อความ " หลังจากกรองรหัสส่วนตัว 0ข้อความถูกทิ้ง " และใช้เวลามากเกินไปในชีวิตของฉันพยายามที่จะเข้าใจความหมายของข้อความ

ปัญหาคือว่าฉันติดตั้งใบรับรองไม่ถูกต้องในที่เก็บใบรับรอง Windows ดังนั้นจึงไม่มีคีย์ส่วนตัวที่เกี่ยวข้องกับใบรับรองการเซ็นชื่อรหัส

สิ่งที่ฉันควรทำคือ:

  1. ใช้ Firefox หรือ Internet Explorer ส่งคำขอไปยังผู้ออก สิ่งนี้จะสร้างคีย์ส่วนตัวซึ่งถูกเก็บไว้อย่างเงียบ ๆ โดยเบราว์เซอร์ (กล่องโต้ตอบปรากฏขึ้นสำหรับเสี้ยววินาทีใน Firefox) โปรดทราบว่าเบราว์เซอร์อื่นอาจใช้งานไม่ได้: ชีวิตของคุณสั้นเกินไปที่จะตรวจสอบว่าพวกเขาทำ

  2. ส่งคำขอกระโดดผ่านห่วงตรวจสอบและตรวจสอบผู้ออกของผู้เสียสละแพะแพะสวดมนต์ต่อพระเจ้าส่งคำสั่งลงนามจากปู่ย่าตายายที่ยอดเยี่ยมของคุณ ฯลฯ

  3. ดาวน์โหลดใบรับรอง (.crt) และนำเข้ามาในเบราว์เซอร์ เบราว์เซอร์ในขณะนี้มีทั้งคีย์ส่วนตัวและใบรับรอง

  4. ส่งออกใบรับรองจากเบราว์เซอร์เป็นไฟล์การแลกเปลี่ยนข้อมูลส่วนบุคคล (.p12) คุณจะถูกขอให้ใส่รหัสผ่านเพื่อป้องกันไฟล์นี้

  5. เก็บสำเนาสำรองของไฟล์. p12

  6. เรียกใช้ตัวจัดการใบรับรอง (certmgr.msc) คลิกขวาที่ที่เก็บใบรับรองส่วนบุคคลเลือกงานทั้งหมด / นำเข้า ...และนำเข้าไฟล์. p12 ลงใน Windows คุณจะถูกถามถึงรหัสผ่านที่คุณใช้เพื่อป้องกันไฟล์ ณ จุดนี้ขึ้นอยู่กับข้อกำหนดด้านความปลอดภัยของคุณคุณสามารถทำเครื่องหมายคีย์ว่าส่งออกได้เพื่อให้คุณสามารถกู้คืนสำเนาได้จากร้านค้า Windows คุณยังสามารถทำเครื่องหมายว่าต้องใช้รหัสผ่านก่อนใช้หากคุณต้องการทำลายสคริปต์ชุดงาน

  7. เรียกใช้ signtool สำเร็จถอนหายใจด้วยความโล่งอกและไตร่ตรองว่าคุณเสียชีวิตไปมากแค่ไหนเนื่องจากข้อความแสดงข้อผิดพลาดที่ไม่ดีและเอกสารที่ไม่ดีหรือขาดหายไป


2

ฉันมีปัญหานี้เช่นกันพยายามมาก ใช้ SDK เช่นเดียวกับการลงชื่อ Visual Studio แต่ทุกที่ที่ฉันได้รับ "ไม่พบใบรับรองที่ตรงตามเกณฑ์ที่กำหนด"

วิธีแก้ไข: โปรดทราบว่าหาก "หลังจากตัวกรองคีย์ส่วนตัว": '0 ซ้าย' แสดงขึ้นพร้อมกับตัวเลือก signtool sign / debug ... สาเหตุที่พีซีของคุณไม่มี CA อยู่ในร้าน ในการแก้ปัญหานี้ให้ติดตั้ง CA ก่อน (ในกรณีของฉันเป็นไฟล์. crt) จากนั้นรันเครื่องหมายอีกครั้ง มันควรจะใช้ได้ในตอนนี้!

Signtool สามารถใช้ได้กับ CA ที่มีการร้องขอและเป็นเจ้าของโดยพีซีเครื่องเดียวกัน


ฉันไม่มีปัญหาในการใช้ signtool กับ CA ที่มาจากพีซีเครื่องอื่น
bparker

2

ปัญหาของฉันคือการที่ฉันไม่เข้าใจตัวเลือก signtool ฉันให้ตัวเลือก / n พร้อมสิ่งที่ไม่ตรงกับใบรับรองของฉัน เมื่อฉันลบมันหยุดบ่น


2

ฉันมีปัญหาที่คล้ายกันชื่อคอมพิวเตอร์ของฉันมีการเปลี่ยนแปลงและใบรับรองหมดอายุ ฉันสามารถแก้ไขปัญหานี้ได้โดยการสร้างใบรับรองการทดสอบใหม่

ใน Visual Studio คลิกขวาที่โครงการในตัวสำรวจโซลูชัน เลือกคุณสมบัติ เลือกหน้าต่างคุณสมบัติการลงชื่อเข้าใช้ คลิก "สร้างใบรับรองการทดสอบ .... " ป้อนข้อมูลรหัสผ่านสำหรับใบรับรองการทดสอบแล้วคลิกตกลง


2

ด้วย / debug เมื่อคุณได้รับข้อความนี้ "หลังจากตัวกรองคีย์ส่วนตัวเหลือ 0 certs" เหตุผลหนึ่งอาจเป็นได้ว่าไฟล์ pfx ไม่มีคีย์ส่วนตัว เมื่อคุณส่งออกใบรับรองที่ติดตั้งไปยังไฟล์ pfx ให้เปิดใช้งานกล่องกาเครื่องหมายเพื่อรวมคีย์ส่วนตัวด้วย


1

ไปที่project propertiesและยกเลิกการเลือกฟิลด์ทั้งหมดจากFirmก่อนเริ่มทำการรวบรวม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.