2015-04-21 4 views
2

У меня есть две серверные (фиктивные) программы, которые создают TCP-сервер (TCPListener), а затем пытается аутентифицировать сервер с сертификатами X509 (BeginAuthenticateAsServer). Клиентская программа готова.Сертификация SSL на службе C# через TCP

Разница между двумя программами на стороне сервера заключается в том, что одно из них является простым консольным приложением, а другое - службой Windows.

По какой-то причине клиент может подключиться к консольному приложению, но не к сервису. Дизайн в обеих программах одинаковый.

Я использую следующую строку для описания сертификата я буду использовать:

serverCertificate = new X509Certificate("C:\\Users\\Tom\\workspace\\ServerSSL.cer", "12345678"); 

Я думаю, что-то подозрительное privilages с сервисной программой, но я не мог понял, в последней пару дней. Конечно, у меня есть ошибка The server mode SSL must use a certificate with the associated private key.. Когда я попытался найти ответ в качестве справки, я получил результаты по темам IIS/webservices, но я использую простую Windows 7 Pro.

Могу я попросить вашу помощь?

+1

Служба обычно запускается под учетной записью, которая не может получить доступ к вашему пользовательскому каталогу (Toms), выберите глобально доступное местоположение, такое как SpecialFolder.CommonApplicationData –

+0

Я попробовал, но у меня такая же ошибка. Тем не менее, я буду держать эту информацию в своем уме. Благодарю. – roncsak

ответ

0

Файл ServerSSL.cer скорее всего содержит только сертификат, а не закрытый ключ. Об этом сообщает сообщение об ошибке.

Попытайтесь найти pfx или p12 файл. Или, если у вас есть отдельный файл, который содержит закрытый ключ (т. Е. .key), вам нужно сделать файл pfx (p12) из ​​обоих из них (.key и .cer). Для этого вы можете использовать openssl или xca.

+0

Да, 'cer' содержит только сертификат и' pfx' как сертификат, так и закрытый ключ. У меня есть оба. Я попытался загрузить файл pfx, но получил ту же ошибку. Я думаю, что что-то еще проблема, потому что все работает в моем консольном приложении. Проблема возникает при запуске приложения-службы. – roncsak

+1

Вам нужно использовать pfx. Когда вы создаете экземпляр класса 'X509Certificate', проверьте, установлено ли свойство PrivateKey'. – pepo

+0

Мне пришлось использовать 'X509Certificate2' для того, что имеет свойство HasPrivateKey'. Результат был прав ... Hm ... Простое чтение этого свойства помогло установить SSL-соединение. В любом случае, спасибо! :) – roncsak

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