Я хотел бы выполнить аутентификацию на основе сертификата с помощью моего LDAP OPENLDAP.
Я создал PKI, настроил клиент и сервер с хорошими хранилищами ключей, трастовыми хранилищами/сертификатами, ключом. Я также настраиваю 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.
bindRequest всегда завершается успешно, как только у меня есть сертификат, подписанный ЦС. Если DN, поступающее из LDAP, ничему не соответствует в LDAP, это не имеет значения. Я предполагаю, что это преобразовано в анонимное соединение. Но когда он соответствует существующему пользователю, это тоже не имеет значения. Пользователь не аутентифицирован, и у меня нет доступа к правам пользователя. Я попытался выполнить запрос WhoAmI, и он вернул: authzId
= dn:cn=12345,ou=anorganizationunit,o=anorganization,dc=com,dc=example
, что кажется хорошим (ну, с заглавными буквами, преобразованными в нижний регистр).
Есть ли что-то, что я пропустил в конфигурации LDAP? или это могут быть мои сертификаты?
Буду очень благодарен за любую помощь :)
EDIT: я не знаю, поможет ли это, но перед добавлением правила сопоставления я выполнил запрос WhoAmI, и результат был примерно таким: dn:cn\3D12345\2C...,o=organization,dc=com,dc=example
. Общее имя, которое я ввел во время создания сертификата, похоже, было экранировано (\3D — это «=», \2C — это «,»).