ruby - 在 Ruby 中验证 HTTPS 的自签名 TLS 证书
问题描述
如何在 RUBY 的 GET 请求中使用 SSL 证书验证(在 URL 中使用密码参数)?->
require 'net/https'
require 'uri'
uri = URI.parse(ARGV[0] || 'https://example.com?password=my_password')
http = Net::HTTP.new(uri.host, uri.port)
if uri.scheme == "https"
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.ca_file=File.join(File.dirname(__FILE__),
"/Users/me/Desktop/demp.pem")
end
http.start do
http.request_get(uri.path) do |res|
print res.body
end
end
--> 输出
SSL_connect 返回=1 errno=0 状态=错误:证书验证失败(证书链中的自签名证书)(OpenSSL::SSL::SSLError)
解决方案
这对我有用。
require 'net/http'
require 'net/https'
require 'openssl'
require 'uri'
require 'json'
ContentURI = URI.parse("example.com")
@cert_raw = File.read('cert.pem')
TestDataPath = '.'
req = Net::HTTP::Get.new(ContentURI.path)
https = Net::HTTP.new(ContentURI.host, ContentURI.port)
https.use_ssl = true
https.cert = OpenSSL::X509::Certificate.new(@cert_raw)
https.key = OpenSSL::PKey::RSA.new(@cert_raw)
https.verify_mode = OpenSSL::SSL::VERIFY_PEER
resp = https.start { |cx| cx.request(req) }
p resp
p resp.body
推荐阅读
- javascript - 如何在 NestJs 中对基于当前日期设置到期日期的服务内的函数进行单元测试
- python - 如何使用 Django-filter 过滤多个字段?
- go - 在 Golang 中实现自定义声明接口的外部包
- java - 检查Java中的有效名称
- php - 带有倒计时变量的 Whatsapp 共享按钮
- vue.js - 使用 Vue 在站点上共享链接时出现加载问题
- javascript - 使用boostrap模式从php加载特定的js函数
- java - 当我的 channelInboundHandler 出错时如何停止 Netty 中的连接?
- python - “NoneType”对象没有属性“load_module”
- c++ - lower_bound 函数返回错误的迭代器