Ссылка на сертификат конечной точки клиента, как найти запятую в частях с отличительным именем? - PullRequest
0 голосов
/ 30 октября 2009

Мы пытаемся сослаться на сертификат для конфигурации конечной точки клиента в нашем файле конфигурации WCF.

Конфигурация выглядит так:

<client>
    <endpoint address="https://domain.server.com/path/service.asmx"
        binding="basicHttpBinding" bindingConfiguration="TestServiceSoap"
        contract="..." name="...">
        <identity>
            <certificateReference storeName="TrustedPublisher"
                x509FindType="FindBySubjectDistinguishedName"
                findValue="...">....

Для теста-сертификата свойство «Тема» выглядит следующим образом:

CN = demo.domain.com
OU = Company
O = Company
L = City
S = County
C = CountryCode

Это работает, если мы предоставим следующее для findValue атрибута выше:

CN=demo.domain.com, OU=Company, O=Company, L=City, S=County, C=CountryCode

Однако для сертификата, который мы получили от третьей стороны, они добавили свой адрес как часть этого, поэтому приведенный выше список идентификаторов выглядит следующим образом:

CN = demo.domain.com
OU = Company
STREET = Mainstreet 1, Town Center
L = City
S = County
C = CountryCode

Очевидно, что запятая в части STREET не будет работать, так как наша строка теперь содержит "Town Center" как отдельную часть без имени.

Как указать, что мы хотим найти сертификат, используя этот список идентификаторов?

CN=demo.domain.com, OU=Company, O=Company, STREET=Mainstreet 1, Town Center, L=City, S=County, C=CountryCode
                                                              ^-- Argh!

Ответы [ 2 ]

2 голосов
/ 30 октября 2009

Хорошо, проведя дополнительные эксперименты, мы смогли сами найти ответ.

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

Это, однако, не будет хорошо работать с findName="...", который также использует двойные кавычки, поэтому мы изменили это на одинарные кавычки.

Конечный результат был таким:

findName='..., STREET="Mainstreet 1, Town Center", ...'
         ^            ^                         ^     ^
         |            +---- this is needed -----+     |
         |                                            |
         +- and this is needed to use double quotes --+
0 голосов
/ 30 октября 2009

Это не прямой ответ на ваш вопрос, но вам не обязательно помещать все эти детали там, если вы не хотите. CN должно хватить, если у вас ДЕЙСТВИТЕЛЬНО не будет нескольких людей с одним и тем же CN ???

Так что вам просто нужно:

CN=demo.domain.com

На самом деле вам даже не нужно использовать тип поиска FindBySubjectDistinguishedName. Вы можете просто использовать FindBySubjectName и просто ввести вместо него простое имя субъекта:

demo.domain.com
...