Ошибка клиента C # WCF «Закрытый ключ отсутствует в сертификате X.509» - PullRequest
3 голосов
/ 09 августа 2011

Я пытаюсь создать очень простое клиентское приложение WCF, которое будет отправлять SOAP-сообщения стороннему сервису. Все сообщения должны быть подписаны цифровой подписью. Это действительно подтверждение концепции, прежде чем я добавлю код в более крупное приложение.

У меня есть файл .cer, содержащий сертификат, и файл .pem, содержащий закрытый ключ. То, что я пытался сделать, это загрузить сертификат, используя файл .cer, а затем запустить сообщение. Но я получаю следующую ошибку «Закрытый ключ отсутствует в сертификате X.509».

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

Если я открою файл .cert, появится раздел с надписью «НАЧИНАЕТСЯ ЗАПИСАННЫЙ ЧАСТНЫЙ КЛЮЧ», в котором говорится, что закрытый ключ включен в сертификат. Итак, почему я получаю сообщение о том, что его нет? Кроме того, если личный ключ нужно добавить в сертификат, как мне это сделать?

Вот в основном то, что я делаю. Это не мой настоящий код, но он включает в себя все соответствующие вещи:

MyWSClient c = new MyWSClient();
c.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(@"pathToFile.cer");
c.SomeValidCall();

Ответы [ 2 ]

0 голосов
/ 09 августа 2011

Мой коллега нашел решение.Я не знаю почему, но использование файла .der вместо файла .cer решает проблему.Это команда, которую он использовал для создания файла .der с использованием сертификата, закрытого ключа и корневого сертификата в виде файлов .pem:

openssl pkcs12 -export -in cert.pem -inkey private_key.pem -certfile root_cert.cer -out pkcs12.der
0 голосов
/ 09 августа 2011

Как вы создаете эту пару сертификат / ключ? Вы можете объединить их в сертификат PKCS # 12, используя openssl:

openssl pkcs12 -export -in yourcert.crt -inkey yourprivkey.key -out newcert.p12 

Возможно, вам придется поиграть с форматом ввода, чтобы заставить его работать с закрытым ключом .pem.

...