2

OPENLDAP LDAP で証明書ベースの認証を実行したいと考えています。

PKIを作成し、適切なキーストア、トラストストア/証明書、キーを使用してクライアントとサーバーをセットアップしました。また、SSL ハンドシェーク中に証明書を要求するように LDAP を構成します。

次に、次のように 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 は「,」)。

4

1 に答える 1