代码之家  ›  专栏  ›  技术社区  ›  Lasse V. Karlsen

客户端端点证书引用,可分辨名称部分有逗号时如何查找?

  •  0
  • Lasse V. Karlsen  · 技术社区  · 15 年前

    我们正在尝试在wcf配置文件中引用客户端终结点配置的证书。

    配置如下:

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

    对于测试证书,“Subject”属性如下所示:

    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
    

    显然,街道部分的逗号不起作用,因为我们的字符串现在包含“城镇中心”作为一个单独的部分,没有名称。

    如何指定要使用此标识符列表查找证书?

    CN=demo.domain.com, OU=Company, O=Company, STREET=Mainstreet 1, Town Center, L=City, S=County, C=CountryCode
                                                                  ^-- Argh!
    
    2 回复  |  直到 9 年前
        1
  •  2
  •   Lasse V. Karlsen    15 年前

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

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

    不过,这对我们来说不太好 findName="..." 它也使用双引号,所以我们把它改为单引号。

    最终结果是:

    findName='..., STREET="Mainstreet 1, Town Center", ...'
             ^            ^                         ^     ^
             |            +---- this is needed -----+     |
             |                                            |
             +- and this is needed to use double quotes --+
    
        2
  •  0
  •   Drew Marsh    15 年前

    这不是你问题的直接答案,但如果你不想,你不必把所有的细节都写进去。除非你真的有多个人拥有同一个CN,否则CN就足够了????

    所以你只需要:

    CN=demo.domain.com
    

    实际上,您甚至不需要使用findbyssubjectdistinguishedname查找类型。您只需使用findbyssubjectname并将普通的主题名称改为:

    demo.domain.com