Как установить версию 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
, но мне не нравится это решение вообще, потому что это:
- патч обезьяны.
- он применяет гигантскую перевязку по основной проблеме, которая является неверной версией 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, не полагаясь на патч обезьяны, как в примере выше?