Как установить версию SSL/TLS почтового модуля вручную

Я работаю над исправлением ошибки, связанной с SSL, с помощью модуля Ruby Mail в JRuby. Эта проблема Github объясняет (и предоставляет обезьяну патч) эту ошибку.

Суть ошибки в том, что спустя некоторое время после JRuby-1.7.19 было внесено изменение, которое меняет поведение Net::SMTP по отношению к MRI. Чтобы решить эту проблему, мы должны использовать следующую версию TLS TLSv1_2_client за OpenSSL::SSL::SSLContext для отправки почты через SSL/TLS.

Человек, который открыл проблему, предложил следующий патч обезьяны для модуля Mail:

require 'net/smtp'

class << Net::SMTP
  remove_method :default_ssl_context # if defined?(Net::SMTP.default_ssl_context)
end

module Net
  class SMTP
    def SMTP.default_ssl_context
      OpenSSL::SSL::SSLContext.new('TLSv1_2_client')
    end
  end
end

Я пытался это, и это исправить Algorithm NONE проблема, с которой я столкнулся, используя патчи SSLContext TLSv1_2_client, но мне не нравится это решение вообще, потому что это:

  1. патч обезьяны.
  2. он применяет гигантскую перевязку по основной проблеме, которая является неверной версией TLS.

Решение, которое я придумал для своего приложения, заключается в том, что у меня просто есть выпадающий список, заполненный значениями в OpenSSL::SSL::SSLCOntext::METHODS, Выход к METHODS является:

0> OpenSSL::SSL::SSLContext::METHODS
=> [:TLSv1, :TLSv1_server, :TLSv1_client, :SSLv3, :SSLv3_server, :SSLv3_client, :SSLv23, :SSLv23_server, :SSLv23_client, :TLS, :TLSv1_1_server, :TLSv1_1_client, :TLSv1_1, :TLSv1_2, :TLSv1_2_server, :TLSv1_2_client]

Прямо сейчас я намерен раскошелиться на модуль Ruby Mail и изменить smtp.rb файл, чтобы позволить себе вручную установить версию SSL.

У меня все в порядке с тем, чтобы раскошелиться на модуль Ruby Mail и внести изменения самостоятельно.

Я попробовал следующее:

OpenSSL::SSL::SSLContext::DEFAULT_PARAMS[:ssl_version] = :TLSv1_2_client

который действительно установил версию SSL по умолчанию, но не решил мою проблему.

Как я могу вручную установить версию SSL, не полагаясь на патч обезьяны, как в примере выше?

0 ответов

Другие вопросы по тегам