«Центральное место», в котором обязательно нужно установить переменную SSL-сертификата. - PullRequest
0 голосов
/ 03 марта 2011

Я использую Ruby on Rails 3, и я хотел бы иметь "центральное место", где определенно нужно установить сертификат SSL для использования внутри моего приложения.

Почти везде в коде у меня есть HTTPS-запросы, подобные этому

e = Typhoeus::Request.get("https://example.com/action",
  :ssl_cacert => "ca_file.cer",
  :ssl_cert => "acert.crt",
  :ssl_key => "akey.key",
  [...]
end

Итак, чтобы указать сертификат SSL для всех моих запросов, я хотел бы установить глобальную переменную (я слышал, что глобальная переменная может быть опасной ...) или что-то подобное безопасным способом.

Ответы [ 2 ]

2 голосов
/ 03 марта 2011

Вы можете создать вспомогательный класс SSL и использовать его (я бы поместил его в lib, но это в основном просто пользовательские настройки):

class MySSL
    SSL_DEFAULTS = {
        :ssl_cacert => 'ca_cert.cer',
        :ssl_cery => 'acert.crt',
        :ssl_key => 'akey.key'
    }

    def self.get(uri, options = {})
        options.reverse_merge!(SSL_DEFAULTS)
        Typhoeus::Request.get(uri, options)
    end

    # And so forth for post, etc.
end

Где reverse_merge! - это удобное расширение Rails для предоставления параметров по умолчанию для хэша (если исходный хэш уже имеет эти ключи, они не будут перезаписаны). Вы также избегаете установки глобальной переменной, используя константу класса. А в остальной части кода вы можете позвонить

MySSL.get('https://example.com/action')

или

MySSL.get('https://example.com/action', :other => :options)

намного чище, по сравнению.

Надеюсь, это поможет!

0 голосов
/ 23 января 2014

Вы можете использовать OpenSSL::SSL::SSLContext::DEFAULT_CERT_STORE методы #add_file и #add_path, чтобы установить его в хранилище сертификатов по умолчанию; это будет восприниматься практически всем, что не переопределяет его, в частности Net :: HTTP. Я не уверен насчет Typhoeus, но он должен работать, если он не меняет его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...