2017-01-31 14 views
0

Я пытаюсь настроить процессор GetTwitter для потока Nifi. Я установил необходимые свойства, такие как токен доступа и ключ пользователя. Однако, когда я перехожу на процессор, я получаю следующее сообщение об ошибке:Apache Nifi Twitter Connection Issue

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 

Так что это довольно ясно, что существует какой-то вопрос сертификат/безопасности происходит. Как я могу это исправить?

EDIT: Добавление команды вывод OpenSSL enter image description here

ответ

1

Да, в настоящее время вашего процессор говорит, что он получает сертификат, идентифицирующий 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, обсуждая добавление этого по умолчанию, но есть плюсы и минусы этого решения.

+0

Если то, что вы написали, применимо только к getHTTP и InvokeHTTP, знаете ли вы, как бы вы решали проблему GetTwitter? @Andy – Danzo

+0

Вот почему я добавил шаги отладки выше. Каковы были результаты команды 's_client'? – Andy

+0

Я редактировал оригинальное сообщение, чтобы включить скриншот. @Andy – Danzo