Да, в настоящее время вашего процессор говорит, что он получает сертификат, идентифицирующий https://www.twitter.com (или любой фактический URL есть), но он не может построить полную цепочки между представленным сертификатом и известный сертификат CA/trusted. Это связано с тем, что по умолчанию NiFi не знает никаких доверенных сертификатов.
Можете ли вы попытаться установить, что ваша машина может проверить сертификат Twitter за пределами Java? Вы можете использовать эту команду 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, помеченные как доверенные в truststore. В зависимости от вашей версии Java и ОС вам может потребоваться обновить JRE и ваш пакет ca-certificates
(на * nix).
EDIT
То, что я написал ниже, относится к GetHTTP
и InvokeHTTP
процессоров, а не GetTwitter
.
Вы можете настроить StandardSSLContextService
в Services Controller что указывает файл доверенных к $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