#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 .
Итак, затем я попытался создать свою цепную политику с помощью приведенного ниже кода, но сертификат по-прежнему отсутствует на принимающей стороне.
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, тот же результат, поэтому приведенная выше теория неверна. Также пытался подписать сертификат, но без изменений.