具有UnboundID和证书的SASL外部身份验证

问题描述 投票:2回答:1

我想用我的OPENLDAP ldap执行基于证书的身份验证。

我创建了一个PKI,用好的密钥库,trustores / certificates,key设置我的客户端和服务器。我还配置LDAP以在SSL握手期间请求证书。

然后,我尝试使用UnboudID LDAP进行身份验证,如下所示:

    //Create a unsecured connection

    LDAPConnection connection = new   LDAPConnection(hostname,port);

    //Secure the connection by the use of SSL (StartTLS operation)

    SSLUtil ssl = new SSLUtil(new KeyStoreKeyManager(keyStore, new String("somePasword").toCharArray()),
            new TrustStoreTrustManager(trustStore));
    SSLContext sslContext = ssl.createSSLContext();
    StartTLSExtendedRequest startTLSRequest = new StartTLSExtendedRequest(sslContext);
    ExtendedResult startTLSResult = connection.processExtendedOperation(startTLSRequest);

    //Bind request that should retrieve information from the client certificate and authenticate the client

    BindRequest bindRequest = new EXTERNALBindRequest("");
    BindResult bindResult = connection.bind(bindRequest);

    //The result is always SUCCESS...
    if (bindResult.getResultCode() != ResultCode.SUCCESS) {
        ...
    }

我想绑定连接的用户的DN对应于:cn=12345,ou=anOrganizationUnit,o=anOrganization,dc=com,dc=example。由于来自证书的DN看起来像:cn=12345,ou=...,o=...,l=Berlin,st=some-state,c=de我还在LDAP中创建了匹配规则。

只要我拥有CA签名的证书,bindRequest就会成功。如果来自LDAP的DN对应于LDAP中的任何内容,则无关紧要。我想它会转换为匿名连接。但是当它对应于现有用户时,它也无关紧要。用户未经过身份验证,我无权访问用户的权限。我试图执行一个WhoAmI请求,它返回:authzId = dn:cn=12345,ou=anorganizationunit,o=anorganization,dc=com,dc=example似乎很好(大写字母转换为小写)。

我在LDAP配置中遗漏了什么吗?或者它可能是我的证书?

我会非常感谢任何帮助:)

编辑:我不知道这是否有帮助,但在添加匹配规则之前,我执行了WhoAmI请求,结果类似于:dn:cn\3D12345\2C...,o=organization,dc=com,dc=example。我在证书创建期间输入的公用名似乎已被转义(\ 3D为“=”,\ 2C为“,”)。

openldap client-certificates sasl unboundid-ldap-sdk ldapconnection
1个回答
0
投票

我会回答我自己的问题,虽然这是一段很长的时间,但我失去了对代码的访问权限。

我很确定这个问题与CN部分的逃逸相对应。我确实记得我的匹配规则不正确,我认为这是根本原因。但说实话,可能还有其他一些我不记得的错误。

© www.soinside.com 2019 - 2024. All rights reserved.