0

Ruby on Rails 3을 사용하고 있으며 내 애플리케이션에서 사용할 SSL 인증서를 "중앙 위치"에두고 싶습니다.SSL 인증서 변수를 정확히 설정해야하는 "중앙 위치"

은 거의 모든 지역 코드 내 모든 요청에 ​​대한 SSL 인증서를 지정하기 위해, 내가 전역 변수를 설정하려는, 그래서이

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

같은 HTTPS 요청이 (내가 들어 전역 변수 수 위험한 ...) 또는 그런 식으로 안전한 방법으로.

답변

2

당신은 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!이 기본 옵션을 제공 할 수있는 편리한 레일 확장 인 경우 해시 (원래 해시에 이미 해당 키가있는 경우 덮어 쓰지 않음). 클래스 상수를 사용하여 전역 변수를 설정하지 않아도됩니다. 그리고 나머지 코드, 당신은 비교

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

또는 많은 청소기입니다

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

를 호출 할 수있게되었습니다.

희망이 도움이됩니다.

+0

보안상의 이유로, 예를 들어 'SSL_DEFAULTS'클래스 상수에서 다른 작업을 '중지'하는 것이 좋습니다? – user502052

+0

@ user502052 좋은 생각 일 수 있습니다. 보안을위한 것이 아닙니다. 앱에서 외국 코드를 ​​실행시키지 않으면 값을 변경할 수있는 유일한 사람이됩니다.하지만 우연히 실수로 변경되는 것을 방지 할 수 있습니다. 특히'SSL_DEFAULTS [: key] = 'hullabaloo'는'SSL_DEFAULTS'가 상수 임에도 불구하고 경고를 발생시키지 않기 때문에 특히 그렇습니다. 건배! –

+0

이 주제에 대한 또 다른 "빠른"질문 : SSL 전역 변수를 'environment.rb'파일, '/ initializer /'파일 또는 '/ environments /'파일에 기술하는 것이 바람직합니까? 수업 (당신이했던 것처럼)? 그렇다면 모든 응용 프로그램에서 변수를 액세스 가능하게 만드는 방법은 무엇입니까? – user502052

0

OpenSSL::SSL::SSLContext::DEFAULT_CERT_STORE#add_file#add_path 방법을 사용하여 기본 인증서 저장소에 설정할 수 있습니다. 이것은 Net :: HTTP와 같이 거의 무시하지 않는 모든 것에 의해 선택 될 것입니다. Typhoeus에 대해서는 잘 모르겠지만 변경하지 않는 한 계속 작동해야합니다.