Использовать веб-сервис WCF, используя сертификат x509 в библиотеке .Net Standard 2.0? - PullRequest
0 голосов
/ 24 мая 2018

Прежде всего, спасибо за ваше время и внимание!

У меня есть веб-служба WCF, для которой требуется сертификат x509 для аутентификации.Этот веб-сервис был добавлен в качестве подключенного сервиса и справочных классов, созданных в .Net Standard 2.0 Library.Я хотел бы использовать этот веб-сервис WCF.Тем не менее, я сталкиваюсь с этим;у объекта BasicHttpsSecurity, который я пытаюсь назначить свойству Security свойства BasicHttpsBinding, нет доступных конструкторов ...

Как я могу установить для свойства ClientCredentialType значение Certificate в этом сценарии?

В полном тестовом проекте .Net Framework, который я сделал на стороне, у меня точно такой же код, работающий, как и ожидалось.Похоже, привязка и сертификат x509 устанавливаются по мере необходимости.Я просто не могу установить свойство Security, чтобы указать, что я хочу, чтобы он действительно использовал сертификат ...: /

Вот код, который я использую для настройки клиента.Похоже, что он отлично работает в полном тестовом приложении .Net Framework.Основная проблема заключается в том, что «Security = new BasicHttpsSecurity ()» говорит мне, что нет конструктора, который принимает 0 аргументов ... Однако я вообще не вижу конструкторов.Поэтому я не могу сообщить привязке, что хочу использовать HttpClientCredentialType.Certificate в качестве моего ClientCredentialType.

private TestServiceClient GetTestServiceClient()
{
    var address = new EndpointAddress("https://known.to.be/working/service/endpoint");
    var binding = new BasicHttpsBinding()
    {
        Name = "basic_SSL_Cert",

        // ... other properties that work fine in full .Net Framework test.

        // I can't instantiate/initialize this...
        Security = new BasicHttpsSecurity()
        {
            Mode = BasicHttpsSecurityMode.Transport,
            Transport = new HttpTransportSecurity()
            {
                // ... so I can't set this :(
                ClientCredentialType = HttpClientCredentialType.Certificate,
                ProxyCredentialType = HttpProxyCredentialType.None
            }
        }
    };

    var client = new TestServiceCLient(binding, address);

    client.ClientCredentials.ClientCertificate.SetCertificate(
        StoreLocation.LocalMachine, 
        StoreName.My, 
        X509FindType.FindBySubjectDistinguishedName, 
        "I can find the cert no problem."
    );

    return client;
}

Любые рекомендации о том, как использовать веб-службу WCF, для которой требуется сертификат x509, из стандарта .Net2.0 Библиотека очень ценится.Если я все делаю неправильно, пожалуйста, держи меня прямо.

Заранее спасибо за ваше время!

1 Ответ

0 голосов
/ 24 мая 2018

Ну ... наконец-то понял это сегодня утром.И я немного смущен ответом.Но, надеюсь, это поможет какой-то другой бедной душе биться головой об стену.

Получается, что я могу установить ClientCredentialType для созданной привязки, даже не создавая явную копию и инициализацию объекта BasicHttpsSecurity.

Эта настройка привязки работает отлично ...

private TestServiceClient GetTestServiceClient()
{
    var address = new EndpointAddress("https://known.to.be/working/service/endpoint");
    var binding = new BasicHttpsBinding()
    {
        Name = "basic_SSL_Cert",

        // ... other properties that work fine in full .Net Framework 

        //Security = new BasicHttpsSecurity()
        //{
        //    Mode = BasicHttpsSecurityMode.Transport,
        //    Transport = new HttpTransportSecurity()
        //    {
        //        // ... so I can't set this :(
        //        ClientCredentialType = HttpClientCredentialType.Certificate,
        //        ProxyCredentialType = HttpProxyCredentialType.None
        //    }
        //}
    };

    // Just set it... doh!
    binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;

    var client = new TestServiceCLient(binding, address);

    client.ClientCredentials.ClientCertificate.SetCertificate(
        StoreLocation.LocalMachine, 
        StoreName.My, 
        X509FindType.FindBySubjectDistinguishedName, 
        "I can find the cert no problem."
    );

    return client;
}

Как глупо с моей стороны ... Я должен был хотя бы попробовать это, прежде чем отправлять вопрос, но я просто не нажалсо мной это было бы возможно.: /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...