NiFi绕过SSL上下文服务中主机名验证

dzhpxtsq  于 2022-11-14  发布在  其他
关注(0)|答案(2)|浏览(314)

我尝试通过NiFi 1.5.0中的GetHTTP处理器连接到REST端点。我面临的问题是,SSL证书颁发给域,但我只能直接访问IP:Port地址(公司防火墙)。因此,我遇到了主机名和证书所有者不匹配的问题,并且IP没有添加为主题替代名称。
当我尝试连接时,收到以下错误消息:
异常错误:〈[IP-ADDRESS]〉的证书与任何使用者备用名称都不匹配:[]
有没有办法绕过主机名验证?我发现了这个NiFi Jira ticket,但似乎还没有解决。有没有我可以使用的解决方法?

ruoxqz4g

ruoxqz4g1#

您可以尝试使用InvokeHttp并使用“受信任的主机名”属性。

x9ybnkn6

x9ybnkn62#

由于“Trusted Hostname”属性在NiFi的最新版本中已被弃用,因此您可以将ExecuteScript处理器与Ruby一起使用。示例如下。POST请求的主体必须位于FlowFile内容中。响应的主体将位于FlowFile内容中处理器之后。

  1. require "uri"
  2. require "net/http"
  3. require "openssl"
  4. java_import org.apache.commons.io.IOUtils
  5. java_import java.nio.charset.StandardCharsets
  6. java_import org.apache.nifi.processor.io.StreamCallback
  7. # Define a subclass of StreamCallback for use in session.read()
  8. class JRubyStreamCallback
  9. include StreamCallback
  10. def process(inputStream, outputStream)
  11. text = IOUtils.toString(inputStream, 'utf-8')
  12. url = URI("https://...")
  13. https = Net::HTTP.new(url.host, url.port)
  14. https.use_ssl = true
  15. https.verify_mode = OpenSSL::SSL::VERIFY_NONE
  16. request = Net::HTTP::Post.new(url)
  17. request["Authorization"] = "Basic ..."
  18. request["Content-Type"] = "application/json"
  19. request.body = text
  20. response = https.request(request)
  21. outputStream.write((response.read_body).to_java.getBytes(StandardCharsets::UTF_8))
  22. end
  23. end
  24. jrubyStreamCallback = JRubyStreamCallback.new
  25. flowFile = session.get()
  26. if flowFile != nil
  27. flowFile = session.write(flowFile, jrubyStreamCallback)
  28. session.transfer(flowFile, REL_SUCCESS)
  29. end
展开查看全部

相关问题