是的,目前你的處理器是說,它接收識別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上)。
編輯
我下面寫的適用於GetHTTP
和InvokeHTTP
處理器,而不是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討論添加默認情況下,但這個決定有利弊。
如果您所寫的內容僅適用於getHTTP和InvokeHTTP,那麼您是否知道如何解決手頭上的GetTwitter問題? @Andy – Danzo
這就是爲什麼我添加了上面的調試步驟。 's_client'命令的結果是什麼? – Andy
我編輯了原始文章以包含屏幕截圖。 @Andy – Danzo