apachenifitwitter连接问题

apachenifitwitter连接问题,twitter,ssl-certificate,apache-nifi,Twitter,Ssl Certificate,Apache Nifi,我正在尝试为Nifi流配置GetTwitter处理器。我已经设置了所需的属性,例如访问令牌和使用者密钥。但是,当我打开处理器时,会出现以下错误: Received error CONNECTION_ERROR: sun.security.validator.validatorexception pkix path building failed sun.security.provider.certpath.SunCertPathBuilderException: unable to find v

我正在尝试为Nifi流配置GetTwitter处理器。我已经设置了所需的属性,例如访问令牌和使用者密钥。但是,当我打开处理器时,会出现以下错误:

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命令输出

是的,当前您的处理器表示它接收到一个标识证书(或任何实际URL),但它无法在提供的证书和已知CA/受信任证书之间构建完整的链。这是因为默认情况下,NiFi不知道任何可信证书

您能否尝试确定您的计算机可以在Java之外验证Twitter证书?您可以使用此OpenSSL命令执行此操作:

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

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   ...j...k.@j.].N.

    Start Time: 1485890791
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
重要的部分是验证返回代码:0(确定)

如果成功,那么可以检查Java在信任库中是否具有标记为受信任的正确CA证书。根据您的Java和OS版本,您可能需要更新JRE和
ca证书
包(on*nix)

编辑

我在下面写的内容适用于
GetHTTP
InvokeHTTP
处理器,而不是
GetTwitter

您可以在控制器服务中配置一个
标准SSLContextService
,它将信任库文件指向
$JRE\u HOME/lib/security/cacerts
(例如,在我的Mac上,它是
/Library/Java/JavaVirtualMachines/jdk1.8.0\u 101.jdk/Contents/HOME/JRE/lib/security/cacerts
),并将信任库类型设置为
JKS
,将信任库密码设置为
changeit


有人在讨论默认情况下添加此选项,但这一决定有其利弊

如果您编写的内容只适用于getHTTP和InvokeHTTP,您知道如何解决当前的GetTwitter问题吗@这就是我在上面添加调试步骤的原因。
s_client
命令的结果是什么?我编辑了原始帖子以包含屏幕截图@在您的命令中,您尝试连接到端口22上的服务器(我不知道这是什么服务器)。端口22通常用于SSH连接,而不是HTTPS。您可以看到
s_client
表示它不理解服务器使用的协议。您的命令应该如下所示:
openssl s_client-connectapi.twitter.com:443-debug-state
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   ...j...k.@j.].N.

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