2013-09-03 4 views
2

저는 SSL (SAN) 인증서를 사용하려고했습니다. 내부 레일 애플 리케이션.OpenSSL + 자체 서명 됨 Cert = OpenSSL :: SSL :: SSLError : SSL_connect returned = 1 상태 = SSLv3 서버 인증서 읽기 B : 인증서 확인 실패

난은 OpenSSL을 사용하여 인증서 파일을 생성하고 아파치와 잘 작동이 있습니다 : 이것은 잘 작동

<VirtualHost *:443> 
    ServerName server-name 
    RailsEnv uat 

    DocumentRoot /var/www/server-name/current/public 
    <Directory /var/www/server-name/current/public> 
    AllowOverride All 
    Options -MultiViews 
    </Directory> 

    SSLEngine on 
    SSLCertificateFile /etc/apache2/ssl/hostname.cer 
    SSLCertificateKeyFile /etc/apache2/ssl/hostname.key 
</VirtualHost> 

. 내가 사용, 단순히 SSL 검증을 해제 제안 많은 StackOverflow의 기사를 보았다

require "net/https" 

uri = URI.parse("https://server-name.domain.com/controller.json?date=2013-09-03") 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 
http.start { 
    http.request_get(uri.path) {|res| 
    print res.body 
    } 
} 

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed 

: 레일 컨트롤러의 일부와 통신 할 수 open-uri를 사용하는 경우

내 문제는, 내가 오류 메시지가

http.verify_mode = OpenSSL::SSL::VERIFY_NONE 

하지만이 방법은 만족스러운 방법이라고 생각하지 않습니다. 나는 또한 내가 공공 인증서를 위해 분명히하는 open-uri에서 /etc/ssl/certs/ca-certificates.crt을 지적 할 필요가 있다고 제안하는 기사를 보았다. 그래서 내 자체 서명 인증서, 나는 다음 시도 :

uri = URI.parse("https://server-name.domain.com/controller.json?date=2013-09-03") 
http = Net::HTTP.new(uri.host, uri.port) 
if uri.scheme == "https" # enable SSL/TLS 
    http.use_ssl = true 
    http.verify_mode = OpenSSL::SSL::VERIFY_PEER 
    http.ca_file = "/etc/apache2/ssl/host-name.cer" 
end 
http.start { 
    http.request_get(uri.path) {|res| 
    print res.body 
    } 
} 

어느 효과가있다.

제 질문은 OpenSSL/OpenURI가 현재 검색 경로 외에도 /etc/apache2/ssl/ 디렉토리를 항상 보도록하려면 어떻게해야합니까? 호스트 이름이 우리가 일하는 위치에 따라 변경되는 경로를 지정하고 싶지는 않습니다. 그래서 기본적으로 here

enter image description here

에서 추출

감사

답변

관련 문제