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