2016-07-28 3 views
2

Я потратил целый день, пытаясь понять эту странную проблему. У меня есть экземпляр NiFi на сервере Linux. Я настроил Ldap-провайдер в логине-идентичности providers.xml нижеОшибка конфигурации LDAPS Apache NiFi

<provider> 
<identifier>ldap-provider</identifier> 
<class>org.apache.nifi.ldap.LdapProvider</class> 
<property name="Authentication Strategy">SIMPLE</property> 

<property name="Manager DN"></property> 
<property name="Manager Password"></property> 

<property name="TLS - Keystore">/Data/ssl/server_keystore.jks</property> 
<property name="TLS - Keystore Password">changeit</property> 
<property name="TLS - Keystore Type">JKS</property> 
<property name="TLS - Truststore">/Data/ssl/server_truststore.jks</property> 
<property name="TLS - Truststore Password">changeit</property> 
<property name="TLS - Truststore Type">JKS</property> 
<property name="TLS - Client Auth"></property> 
<property name="TLS - Protocol">TLSv1.2</property> 
<property name="TLS - Shutdown Gracefully"></property> 

<property name="Referral Strategy">FOLLOW</property> 
<property name="Connect Timeout">10 secs</property> 
<property name="Read Timeout">10 secs</property> 

<property name="Url">ldaps://myserver.hostname:636</property> 
<property name="User Search Base">ou=people,dc=xxx,dc=net</property> 
<property name="User Search Filter">cn={0}</property> 

<property name="Authentication Expiration">12 hours</property> 

Когда я начиная Nifi, я получил страницу Логина запроса первого. Тем не менее, я продолжал получать

2016-07-28 00:17:43,527 ERROR [NiFi Web Server-64] org.apache.nifi.ldap.LdapProvider myserver.hostname:636; nested exceptin is javax.naming.CommunicationException: myserver.hostname:636; [Root exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target] 

я пытался использовать Jvm аргумент в bootstrap.conf, как

java.arg.15=-Djavax.net.ssl.trustStore=/Data/ssl/server_truststore.jks 

Он работал прекрасно.

Я также пробовал SSLPoke.class с тем же аргументом доверия vm, он также отлично работал.

java -Djavax.net.ssl.trustStore=/Data/ssl/server_truststore.jks SSLPoke myserver.hostname 636 
"Successfully connected" 

Теперь мой вопрос в том, почему моя конфигурация в NiFi login-identity-providers.xml не работает?

+0

Возможно, у вас могут возникнуть проблемы с свойствами безопасности, установленными в nifi.properties? – tommyyards

+0

У меня была такая же конфигурация nifi.properties, используя ldaps против другого ldap dev-сервера в login-identity-providers.xml, и он работал нормально. Этот сервер ldap dev использует сертификат, подписанный CA, но сервер ldap qa, с которым я столкнулся с проблемой, использует самоподписанный сертификат. Оба сертификата ldap dev и qa импортируются в мой server_truststore.jks. Единственное изменение, которое я сделал для dev ldaps, - это URL-адрес в ldap-provider xml, поэтому я считаю, что проблема не в nifi.properties. Thx –

ответ

3

К сожалению, NiFi в настоящее время не поддерживает LDAPS. Для создания этой возможности существует JIRA [1]. Разрешены только SIMPLE (открытый текст) или START_TLS. Кроме того, параметры конфигурации контекста SSL учитываются только тогда, когда стратегия аутентификации START_TLS.

[1] https://issues.apache.org/jira/browse/NIFI-2325

+0

Мэтт, взгляните на мой ответ на tommyyards. Я изменил URL-адрес ldap-провайдера на ldaps: // ldap-dev в login-identity-providers.xml, и он работал нормально, но он не работал, когда я использую ldaps: // ldap-qa. Единственный способ, с помощью которого я могу получить ldaps: // ldap-qa, - использовать -Djavax.net.ssl.truststore в bootstrap.conf, чтобы указать именно файл truststore jks. Любые подсказки? –

1

@davy_wei,

в то время как комментарий Matt является правильным, если вы по какой-то причине ограниченного с помощью LDAP для вас LDAP/AD-сервер (например, правила брандмауэра), один вариант использовать stunnel или socat для туннелирования между защищенным LDAP и LDAP-клиентом NiFi.

образец Stunnel конфигурация будет выглядеть следующим образом:

... 
[ldap2ldaps] 
accept = 127.0.0.1:whatever_port_you_want 
client = yes 
connect = your.real.ldaps.fqdn.or.ip:636 
... 

Помните, что это основная конфигурация. Возможно, вы захотите точно настроить свой stunnel в соответствии с вашими требованиями безопасности (например, ограничитесь конкретными шифрами, версией TLS и т. Д.).