Использование сертификатов в клиентском приложении, использующем веб-сервис - PullRequest
1 голос
/ 16 сентября 2010

Я реализую настольное приложение VB.NET, которое использует веб-сервис.

Веб-сервис реализован на Java, и в настоящее время я использую Tomcat на своем локальном хосте для размещения веб-сервиса.

Для веб-службы требуется защищенный обмен данными с клиентом, поэтому я следовал инструкциям, в которых описывалось, как использовать keytool.exe в Java для создания двух хранилищ ключей .jks (одно для клиента и одно для сервера), а затем создать два сертификата .cer (одиндля клиента и один для сервера)

Я поместил хранилища ключей и сгенерированные сертификаты в каталог, где их ожидает веб-служба (согласно инструкциям)

Я установил сертификатыв TrustedPeople и попытался использовать сертификат, установив свойство ClientCredentials.ClientCertificates следующим образом:

myServiceProxy.ClientCredentials.ClientCertificate.SetCertificate(storeLocation.CurrentUser, StoreName.TrustedPeople, X509FindType.FindByIssuerName, "name")

Я продолжаю получать следующее сообщение об ошибке при попытке вызвать любой метод:

Обнаружена ошибка при обработкеheader

Моя проблема в том, что я не знаю, как использовать это в клиентском приложении VB.NET, которое использует веб-сервис.Я мог бы сделать это совершенно неправильно.Будем весьма благодарны за любые рекомендации по этой теме.

Спасибо,

-Frinny

Ответы [ 2 ]

0 голосов
/ 26 сентября 2010

Когда мне приходилось работать с сертификатами и WS, у меня тоже было много проблем с ними. Используйте сертификаты MMC и проверьте:

  • , что вы поместили сертификат в правильное место.Обратите внимание, что есть хранилище CurrentUser, Machine Store и т. Д. Убедитесь, что вы указали правильный сертификат в соответствии с вашим кодом.
  • Какой пользователь запускает ваше приложение?Сертификат находится в его магазине?Сертификат должен быть виден пользователю.
  • Откройте сертификат и убедитесь, что он является доверенным (в противном случае вы увидите предупреждение).Вам может потребоваться поместить сертификат вашего ЦС в хранилище доверенных центров сертификации.
  • Убедитесь, что алгоритмы, используемые вами на каждой стороне, поддерживаются другой стороной.
  • Обратите внимание, что вы ищетесертификат по имени эмитента X509FindType.FindByIssuerName, "name" откройте сертификат, убедитесь, что имя эмитента совпадает (я полагаю, что нет, поскольку это похоже на пример копирования и вставки из примера).

Если все это не удается, попробуйте поэкспериментироватьместоположение сертификата (я смутно помню некоторые проблемы с возможностью использовать сертификаты из одного местоположения, а не из другого), а также со свойством, которое вы используете для поиска сертификатов.

Плюс, поскольку вы спрашивали о сертификатах, на которые я ответило сертификатах.Рекомендуется проверить, есть ли внутреннее исключение, и посмотреть - это может быть еще одна проблема.

0 голосов
/ 16 сентября 2010

Хотя я не кодировал VB в течение 10 лет, вам следует начать: http://www.example -code.com / vbdotnet / ssl_client_certificate.asp

особенно это выглядит такзагружает файл, содержащий сертификат: certStore.LoadPfxFile ("chilkat_secret.pfx", "secret")

, извлекает сертификат и использует его для подключения:

Dim cert As Chilkat.Cert
cert = certStore.FindCertBySubjectCN("Chilkat Software, Inc.")
If (cert Is Nothing ) Then
    MsgBox(certStore.LastErrorText)
    Exit Sub
End If


socket.SetSslClientCert(cert)
...