2012-02-29 2 views
0

В настоящее время у меня есть приложение, которое должно проверить, что сертификат доверен конкретному ЦС. Проблема, которую я имею, заключается в том, что сертификат проблем может фактически принадлежать корневому ЦС, который перекрестно сертифицирован с помощью центра сертификации, который я хотел бы проверить против ... поэтому я хочу убедиться, что я правильно построю цепочку для кросс-сертифицированного корня , Ниже приведен пример того, что может выглядеть цепочка доверия.Как проверить цепи сертификатов на конкретный ЦС?

1) Root CA1 -> Inter CA1 -> John Doe Signed Cert 
2) Bridge CA Root -> X-Cert Root CA1 -> Inter CA1 -> John Doe Signed Cert 

Обе указанные цепи сертификатов действительны, но я хочу убедиться, что у меня есть номер цепи 2.

X509Certificate2 johnDoeCert = GetJohnDoeCert(); 
var chain = new X509Chain(); 
chain.Build(johnDoeCert); 
chain.ChainElements[chain.ChainElements.Count - 1];  // I want to ensure this is Bridge CA Root 

Любая помощь приветствуется.

Спасибо!

ответ

0

Что вам нужно сделать, это проверить информацию против чего-то, что вы знаете о целевом сертификате, в этом случае мост CA Root

Вы можете проверить по имени эмитента на сертификате, как это:

string bridgeCAIssuerName = "CN=Bridge Root CA, OU=PKI..."; //Fill in with correct information 
if(ch.ChainElements[ch.ChainElements.Count - 1].Certificate.IssueName.Name == bridgeCAIssuerName) 
{ 
    //This happens if it was true 
} 

Вы можете использовать ту же технику, чтобы проверить отпечаток или серийный номер сертификата.

Смежные вопросы