Как я могу использовать сертификат клиента с отсутствующим центром сертификации для связи с внешним веб-сервисом? - PullRequest
1 голос
/ 30 марта 2012

У меня есть сертификат клиента, но я не могу получить CA с открытым ключом, который является эмитентом.Когда я просматриваю его в MMC «Сертификаты», Windows не может проверить издателя.Мне нужно связаться с внешним веб-сервисом java, который требует сертификат.

Я создал образец консольного приложения, которое использовало сертификат через привязку, и оно отлично работает.Сейчас я перемещаю эту конфигурацию и код в веб-службу WCF, размещенную на IIS.Я наткнулся на контрольно-пропускной пункт в том, что я, кажется, не могу обойти ошибку:

Could not establish trust relationship for the SSL/TLS secure channel with authority '[url]'

Единственное различие между этими двумя приложениями, кажется, в домене, в котором оно работает,Я уверен, что проблема заключается в проверке сертификата клиента на моей стороне, и он не пытается установить соединение с внешней службой Java.Как лучше всего обойти это, так как я уже попросил открытый ключ CA только для отказа?

Могу ли я переопределить проверку в WCF или настроить IIS, чтобы эта работа работала?

Ответы [ 2 ]

1 голос
/ 04 апреля 2012

После того, как я ударился головой о стену и перебрал ключевые слова трассировки стека, я наткнулся на сообщение о файле сертификата закрытого ключа и IIS, которому необходим доступ к нему.

Я установил разрешение на чтение файла сертификата в:

C:\Documents and Settings\all users\Application Data\Microsoft\Crypto\RSA\MachineKeys

и это решило мою проблему.

0 голосов
/ 04 апреля 2012

Вы можете переопределить проверку, добавив обратный вызов к ServicePointManager.ServerCertificateValidationCallback.Самый простой обратный вызов будет

static void Main()
{
    ServicePointManager.ServerCertificateValidationCallback = ValidateRemoteCertificate;

    // ...
    Application.Run(new MyForm());
}

private static bool ValidateRemoteCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    return true;
}
...