Porque é que este certificado X.509 considerados inválidos?
-
01-07-2019 - |
Pergunta
Eu tenho um determinado certificado instalado no meu servidor. Esse certificado tem datas válidas e parece perfeitamente válido no certificados MMC do Windows snap-in.
No entanto, quando eu tento ler o certificado, a fim de usá-lo em um HttpRequest, eu não posso encontrá-lo. Aqui está o código utilizado:
X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly); X509Certificate2Collection col =
store.Certificates.Find(X509FindType.FindBySerialNumber, "xxx", true);
xxx
é o número de série; os meios argumento true
"somente certificados válidos". A coleção retornada está vazio.
O estranho é que se eu passar false
, indicando certificados inválidos são aceitáveis, a coleção contém um elemento-o certificado com o número de série especificado.
Em conclusão: o certificado parece válido, mas o método Find
trata como inválido! Por quê?
Solução
Tente verificar a cadeia de certificados usando o X509Chain classe . Isso pode lhe dizer exatamente por que o certificado não é considerado válido.
Como Erickson sugeriu, seu X509Store pode não ter o certificado confiável da CA na cadeia. Se você usou OpenSSL ou outra ferramenta para gerar o seu próprio CA auto-assinado, você precisa adicionar o certificado público para esse CA à X509Store.
Outras dicas
É o emissor do certificado presente no X509Store? Um certificado só é válido se for assinado por alguém da sua confiança.
Este é um certificado de uma CA real, ou um que você assinou a si mesmo? ferramentas de assinatura Certificado frequentemente usado pelos desenvolvedores, como OpenSSL, não adicione algumas extensões importantes por padrão.
Eu acredito x509 certificados estão vinculados a um determinado usuário. Poderia ser inválida porque o código que você está acessando-lo como um usuário diferente daquele para o qual foi criado?