NiFi обходят проверку имени хоста в сервисе контекста SSL

Я пытаюсь подключиться к конечной точке REST через процессор GetHTTP в NiFi 1.5.0. Проблема, с которой я сталкиваюсь, заключается в том, что сертификат SSL выдается домену, но у меня есть только прямой доступ к IP: адресу порта (брандмауэр компании). С этим я сталкиваюсь с проблемой, что имя хоста и владельцы сертификата не совпадают, и IP не добавляется как альтернативное имя субъекта.

Когда я пытаюсь подключиться, я получаю это сообщение об ошибке:

javax.net.ssl.SSLPeerUnverifiedException: сертификат для <[IP-ADDRESS]> не соответствует ни одному из альтернативных имен субъекта: []

Есть ли способ обойти проверку имени хоста? Я нашел этот билет NiFi Jira, но он пока не рассматривается. Есть ли обходной путь, который я мог бы использовать?

2 ответа

Решение

Вы можете попробовать использовать InvokeHttp и использовать свойство "Надежное имя хоста".

Поскольку свойство Trusted Hostname устарело в последних версиях NiFi, вы можете использовать процессор ExecuteScript с Ruby. Пример ниже. Тело запроса POST должно быть в содержимом FlowFile. Тело ответа будет в содержимом FlowFile после процессора.

      require "uri"
require "net/http"
require "openssl"

java_import org.apache.commons.io.IOUtils
java_import java.nio.charset.StandardCharsets
java_import org.apache.nifi.processor.io.StreamCallback

# Define a subclass of StreamCallback for use in session.read()
class JRubyStreamCallback
  include StreamCallback
  def process(inputStream, outputStream)
    text = IOUtils.toString(inputStream, 'utf-8')

    url = URI("https://...")
    https = Net::HTTP.new(url.host, url.port)
    https.use_ssl = true
    https.verify_mode = OpenSSL::SSL::VERIFY_NONE
    request = Net::HTTP::Post.new(url)
    request["Authorization"] = "Basic ..."
    request["Content-Type"] = "application/json"
    request.body = text
    response = https.request(request)

    outputStream.write((response.read_body).to_java.getBytes(StandardCharsets::UTF_8))
  end
end

jrubyStreamCallback = JRubyStreamCallback.new
flowFile = session.get()
if flowFile != nil
  flowFile = session.write(flowFile, jrubyStreamCallback)
  session.transfer(flowFile, REL_SUCCESS)
end
Другие вопросы по тегам