0

我们正在尝试在 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!
4

2 回答 2

3

好的,通过更多的实验,我们自己找到了答案。

首先,为了封装包含特殊字符的值,我们需要用双引号将它们括起来。

但是,这与使用双引号的情况不符findName="...",因此我们将其更改为单引号。

最终结果是这样的:

findName='..., STREET="Mainstreet 1, Town Center", ...'
         ^            ^                         ^     ^
         |            +---- this is needed -----+     |
         |                                            |
         +- and this is needed to use double quotes --+
于 2009-10-30T16:11:15.767 回答
1

这不是您问题的直接答案,但如果您不想这样做,您实际上不必将所有细节都放在那里。除非您真的有多个具有相同 CN 的人,否则 CN 就足够了???

所以你只需要:

CN=demo.domain.com

事实上,您甚至不需要使用 FindBySubjectDistinguishedName 查找类型。您可以只使用 FindBySubjectName 并只输入普通主题名称:

demo.domain.com
于 2009-10-30T16:05:57.650 回答