2016-07-28 155 views
2

我花了整整一天的時間試圖找出這個奇怪的問題。我的NiFi實例站在Linux服務器上。我配置登錄,身份providers.xml LDAP提供商如下Apache NiFi LDAPS配置問題

<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具有相同的truststore 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與login-identity-providers.xml中的另一個ldap開發服務器,它工作正常。該ldap開發服務器使用CA簽名證書,但遇到問題的ldap qa服務器使用自簽名證書。 ldap dev和qa證書都被導入到我的server_truststore.jks中。我爲dev ldaps所做的唯一更改是ldap-provider xml中的url,所以我認爲問題不在nifi.properties中。 Thx –

回答

3

不幸的是,NiFi目前不支持LDAPS。有一個JIRA [1]來建立這種能力。 SIMPLE(明文)或START_TLS是唯一有效的選項。此外,僅當認證策略爲START_TLS時才考慮SSL上下文配置選項。

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

+0

Matt,看看我對tommyyards的回覆。我將ldap-provider的url更改爲login-identity-providers.xml中的ldaps:// ldap-dev,它工作正常,但在使用ldaps:// ldap-qa時無法正常工作。我可以使用ldaps:// ldap-qa工作的唯一方法是在bootstrap.conf中使用-Djavax.net.ssl.truststore來專門指向信任庫jks文件。任何線索? –

1

@davy_wei,

而馬特的評論是正確的,如果你是出於某種原因從使用LDAP您LDAP/AD服務器(例如防火牆規則)的限制,一個選項是使用stunnel或socat在受保護的LDAP和NiFi的LDAP客戶端之間建立隧道。

樣品安全通道的配置看起來像:

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

記住,這是基本的配置。您可能需要微調您的stunnel以符合您的安全要求(例如,限制爲特定的密碼,TLS版本等)