ClientCertifcates пусто в запросе при вызове веб-службы

#c# #.net #ssl-certificate #client-certificates

#c# #.net #ssl-сертификат #клиент-сертификаты

Вопрос:

Сертификат предназначен для моей машины разработки на локальном хосте.

При вызове веб-службы ASMX мой сертификат клиента пуст на принимающей стороне веб-службы. Предварительно сертификат клиента обнаруживается по его отпечатку пальца и успешно добавляется в запрос.

 X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);

X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindByThumbprint, _CertificateThumbprint,true);
  

Поэтому я вызвал метод проверки через X509Chain.ChainElements и возвращает false, и я могу отлаживать, и я вижу статус RevocationStatusUnknown .

RevocationStatusUnknown статус отладки

Итак, затем я попытался создать свою цепную политику с помощью приведенного ниже кода, но сертификат по-прежнему отсутствует на принимающей стороне.

  X509Chain ch = new X509Chain();

 X509Chain chain = new X509Chain();
 X509ChainPolicy chainPolicy = new X509ChainPolicy()
 {
     RevocationMode = X509RevocationMode.NoCheck,
     RevocationFlag = X509RevocationFlag.EntireChain,
     VerificationFlags =  X509VerificationFlags.NoFlag
 };
 chain.ChainPolicy = chainPolicy;
 chain.Build(certs[0]);
  

В самом файле сертификации я запускаю следующее в командной строке..

 certutil  -f -urlfetch -verify SWIMTRAM.cer 
  

Я получаю следующую информацию..

  Element.dwInfoStatus = CERT_TRUST_HAS_EXACT_MATCH_ISSUER (0x1)
 Element.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
 Element.dwErrorStatus = CERT_TRUST_REVOCATION_STATUS_UNKNOWN (0x40)

Cannot check leaf certificate revocation status

CERT_TRUST_REVOCATION_STATUS_UNKNOWN
  

Примечание:
Я попытался отладить запрос через fiddler, само приложение fiddler2 предложило мне сохранить сертификат в C:Users\DocumentsFiddler2 .
После этого служба теперь работает через веб-браузер, но только при запуске fiddler2.

Комментарии:

1. У вас есть PIN-код / пароль, связанный с сертификатом? В этом случае, я думаю, вам придется подписать его программно..

2. Да, у него есть пароль. Это имеет смысл, потому что я копировал файл .cer, который не был защищен паролем при отладке с помощью fiddler.

3. Я попытался загрузить сертификат непосредственно из файла .cer, тот же результат, поэтому приведенная выше теория неверна. Также пытался подписать сертификат, но без изменений.