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ê?

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top