2017-01-31 132 views
0

我正在嘗試爲Nifi流配置GetTwitter處理器。我已經設置了所需的屬性,例如訪問令牌和使用者密鑰。然而,當我打開處理器上,我得到以下錯誤:Apache Nifi Twitter連接問題

Received error CONNECTION_ERROR: sun.security.validator.validatorexception pkix path building failed sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target. Will attempt to reconnect 

所以這是很清楚,有某種證書/安全問題的事情。我將如何解決這個問題?

編輯:添加OpenSSL的命令輸出enter image description here

回答

1

是的,目前你的處理器是說,它接收識別https://www.twitter.com證書(或任何實際的URL是),但它不能建立提供的證書和之間的一個完整的鏈條已知的CA /可信證書。這是因爲默認情況下,NiFi不知道任何可信證書。

您可以嘗試確定您的機器可以驗證Java之外的Twitter證書嗎?您可以使用此OpenSSL的命令這樣做:

$ openssl s_client -connect <host:port> -debug -state 

你應該看到的結果是很長,但包含:

depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance EV Root CA 
verify return:1 
depth=1 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 High Assurance Server CA 
verify return:1 
depth=0 C = US, ST = California, L = San Francisco, O = "Twitter, Inc.", OU = Twitter Security, CN = api.twitter.com 
verify return:1 
SSL_connect:SSLv3 read server certificate A 

,並最終:

SSL-Session: 
    Protocol : TLSv1.2 
    Cipher : ECDHE-RSA-AES128-GCM-SHA256 
    Session-ID: 7FD9B2...F2A0CD 
    Session-ID-ctx: 
    Master-Key: 5847F71...0C2599 
    Key-Arg : None 
    PSK identity: None 
    PSK identity hint: None 
    SRP username: None 
    TLS session ticket lifetime hint: 129600 (seconds) 
    TLS session ticket: 
    0000 - 0a c4 e2 31 be 96 ac 47-87 a4 38 98 0f 39 cf 24 ...1...G..8..9.$ 
    ... 
    0090 - 14 c9 bd 6a d7 ca 01 6b-09 40 6a eb 5d e0 4e f5 [email protected]].N. 

    Start Time: 1485890791 
    Timeout : 300 (sec) 
    Verify return code: 0 (ok) 

的重要組成部分,是驗證返回碼:0(ok)

如果這樣做成功,您可以檢查Java是否在信任庫中標記爲可信的CA證書。根據您的Java和OS版本,您可能需要更新JRE和您的ca-certificates軟件包(在* nix上)。

編輯

我下面寫的適用於GetHTTPInvokeHTTP處理器,而不是GetTwitter

可以配置StandardSSLContextService控制器服務其中信任文件指向$JRE_HOME/lib/security/cacerts(例如,在我的Mac,這是/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/security/cacerts),並設置信任類型JKS信任密碼changeit

an existing Jira討論添加默認情況下,但這個決定有利弊。

+0

如果您所寫的內容僅適用於getHTTP和InvokeHTTP,那麼您是否知道如何解決手頭上的GetTwitter問題? @Andy – Danzo

+0

這就是爲什麼我添加了上面的調試步驟。 's_client'命令的結果是什麼? – Andy

+0

我編輯了原始文章以包含屏幕截圖。 @Andy – Danzo