我正在运行一个 ruby on rails 应用程序(rails 4.x),我有一个受保护的资源,需要使用客户端证书进行身份验证。我需要强制客户端使用其证书进行身份验证。这甚至可以通过 Rails 控制器实现,还是在具有我的服务器证书的上层处理?
我可以从 rails 向另一台服务器发出请求,并使用我的 rails 证书进行身份验证,但是反过来似乎是不可能的。
这就是我从我的 rails 应用程序向另一台服务器进行身份验证的方式
# Example usage:
req = HttpsReq.new
response = req.http.request Net::HTTP::Get.new "/api/users"
require 'openssl'
require 'net/http'
require 'json'
class HttpsReq
DEFAULT_OPTIONS = {
use_ssl: true,
verify_mode: OpenSSL::SSL::VERIFY_PEER,
keep_alive_timeout: 30,
ssl_version: :TLSv1_2,
ca_file: File.join(File.dirname(__FILE__), "cacert.pem"),
cert: OpenSSL::X509::Certificate.new(Base64.decode64(ENV['CLIENT_CERT_PEM'])),
key: OpenSSL::PKey::RSA.new(Base64.decode64(ENV['CLIENT_KEY_PEM']), ENV['CLIENT_KEY_PASSWORD'])
}
def initialize(http = nil)
if http
@http = http
else
@http = Net::HTTP.start(ENV['SECURE_SERVER'], 8080, DEFAULT_OPTIONS)
end
end
end