저는 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
에서 추출
감사