Сертификат службы WCF, которая не использует IIS - PullRequest
4 голосов
/ 20 июля 2010

У меня есть приложение WCF , которое обычно работает в IIS (для моих сред тестирования и производства).Но когда я запускаю его из своего отладчика, он настраивается на запуск самостоятельно (то есть, появляется окно консоли, и IIS НЕ используется).

У меня также есть клиентское приложение, которое я подключаю к приложению WCF,Обычно, когда я тестирую свое клиентское приложение (которое работает на Windows Mobile ), оно настраивается для подключения к одной из моих сред тестирования (у меня есть среда разработки для тестирования).

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

Я могу запустить свое приложение WCF, а затем изменить URL-адрес моего клиента, указав версию отладчика, но мои службы работают с SSL и имеют сертификатчто клиент жестко запрограммирован.

Я бы не стал отключать эту часть своего кода (на клиенте).Есть ли способ установить сертификат на мое собственное приложение WCF?

Ответы [ 2 ]

8 голосов
/ 12 марта 2011

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

Это предназначено для запуска во время установкиадминистратором, а не самим приложением, которое в этом примере работает под ограниченной учетной записью Network Service.

Затем вы можете использовать эти примеры кода для установки и настройки сертификата:

if (!IsAdministrator())
{
   Console.WriteLine("Must run "+
                "as a user with local Administrator privileges.");
   Environment.Exit(-1);
}

//Open the cert.
X509Certificate2 certificate = new X509Certificate2(certFilePath);

//Add it to the local store
X509Store certStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);
certStore.Open(OpenFlags.ReadWrite);
certStore.Add(certificate);
certStore.Close();

//Reserve an HTTPS namespace for it.
string urlPrefix = string.Format("https://+:{0}/{1}", portNum, appPath);
ReserveHttpNamespace.ModifyReservation(urlPrefix, "Network Service", false);

//Set the SSL cert for this service.
SetSSLCert.BindCertificate("0.0.0.0", portNum, certificate.GetCertHash());

Затем вы можете проверить, правильно ли он работал, используя1025 * HttpCfg UI Tool .

0 голосов
/ 21 июля 2010

Да, у вас должен быть базовый или конечный адрес HTTPS, и вы также должны указать сертификат службы с помощью поведения

<behaviors>
<behavior configurationName="BasicSecurityProfileMutualCertificateBehavior"
    returnUnknownExceptionsAsFaults="true">
    <serviceCredentials>
    <serviceCertificate findValue="Bob"
    storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
    </serviceCredentials>
</behavior>
</behaviors>
...