2016-12-14 4 views
0

Face à un problème vraiment étrange X509Certificate2.Verify() retournant false pour un certificat valide. Peut-être que certains ont déjà fait face à ce scénario étrange et peuvent y faire la lumière.system.security.cryptography.x509certificates ne peut pas vérifier

J'utilise makecert pour générer des certificats clients à des fins de test, il fonctionne très bien et je peux lire les certificats .... Mais la fonction retourne toujours vérifier faux, j'écris ceci sur cmd:

makecert -r -pe -n "client1" -b 01/01/2005 -e 01/01/2020 -sky exchange -ss certifcat 

quand j'écris:

X509Certificate2 x509_2 = LoadCertificate(StoreLocation.CurrentUser, "client1"); 
Console.WriteLine("Verify " + x509_2.Verify()); // the output : false 

peut toute aide du corps?

EDIT: la sortie de certutil -verify D: \ test.cer:

Issuer: 
    CN=WWW.AGGREGATEDINTELLIGENCE.COM 
    Name Hash(sha1): 553fd856f55d46239156546a1693dd5e160f0eed 
    Name Hash(md5): dec1c115101d31de7502eee9fb7e6e4b 
Subject: 
    CN=WWW.AGGREGATEDINTELLIGENCE.COM 
    Name Hash(sha1): 553fd856f55d46239156546a1693dd5e160f0eed 
    Name Hash(md5): dec1c115101d31de7502eee9fb7e6e4b 
Cert Serial Number: 8aa4007cd7a02e8045301ccb11369bb2 

dwFlags = CA_VERIFY_FLAGS_CONSOLE_TRACE (0x20000000) 
dwFlags = CA_VERIFY_FLAGS_DUMP_CHAIN (0x40000000) 
ChainFlags = CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT (0x40000000) 
HCCE_LOCAL_MACHINE 
CERT_CHAIN_POLICY_BASE 
-------- CERT_CHAIN_CONTEXT -------- 
ChainContext.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100) 
ChainContext.dwErrorStatus = CERT_TRUST_IS_UNTRUSTED_ROOT (0x20) 

SimpleChain.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100) 
SimpleChain.dwErrorStatus = CERT_TRUST_IS_UNTRUSTED_ROOT (0x20) 

CertContext[0][0]: dwInfoStatus=109 dwErrorStatus=20 
    Issuer: CN=WWW.AGGREGATEDINTELLIGENCE.COM 
    NotBefore: 1/1/2005 12:00 AM 
    NotAfter: 1/1/2020 12:00 AM 
    Subject: CN=WWW.AGGREGATEDINTELLIGENCE.COM 
    Serial: 8aa4007cd7a02e8045301ccb11369bb2 
    Cert: c6388297376cfde5742b3bd2a217ba1c728bc005 
    Element.dwInfoStatus = CERT_TRUST_HAS_EXACT_MATCH_ISSUER (0x1) 
    Element.dwInfoStatus = CERT_TRUST_IS_SELF_SIGNED (0x8) 
    Element.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100) 
    Element.dwErrorStatus = CERT_TRUST_IS_UNTRUSTED_ROOT (0x20) 

Exclude leaf cert: 
    Chain: da39a3ee5e6b4b0d3255bfef95601890afd80709 
Full chain: 
    Chain: c6388297376cfde5742b3bd2a217ba1c728bc005 
------------------------------------ 
Verified Issuance Policies: All 
Verified Application Policies: All 
Cannot check leaf certificate revocation status 
CertUtil: -verify command completed successfully. 

Répondre

2

Il y a deux choses à considérer:

  1. Cessez d'utiliser deprecatedmakecert.exe. Au lieu de cela, vous devez envisager d'utiliser l'applet de commande PowerShell New-SelfSignedCertificate pour générer des certificats de test.

  2. Le problème est que le certificat n'est pas émis par une autorité de confiance. Vous devez installer une copie du certificat au magasin LocalMachine\Root.

+0

comment je peux faire pour installer une copie du certificat à LocalMachine \ Root ?? Je suis ces étapes mais cela n'a pas fonctionné: https://technet.microsoft.com/en-us/library/cc754841(v=ws.11).aspx – code

+0

exportez votre certificat dans le fichier CER et exécutez la commande suivante: 'certutil -verify path \ certfile.cer' et affiche la sortie dans votre question. – Crypt32

+0

Je fais ce que vous voulez et la sortie dans ma question ci-dessus ... mais quand je lance le projet, le verfiy me donne faux – code