我尝试使用SSL创建POST请求但没有OpenSSL :: SSL :: VERIFY_NONE,因为它会打开安全攻击并且没有PEM证书。 但是我发现问题,我发送POST请求的ruby代码:
post '/test/test1' do
cross_origin
post_data = request.body.read
res_Data = JSON.parse(post_data)
userName = res_Data['username']
@responseFromServer=''
uri = URI('https://test.com/test1')
Net::HTTP.start(uri.host, uri.port,
:use_ssl => uri.scheme == 'https',
:verify_mode => OpenSSL::SSL::VERIFY_NONE) do |http|
request = Net::HTTP::Post.new uri.request_uri
request.basic_auth 'aa', 'bb'
request.body = {'username' =>userName}.to_json
response = http.request request
@responseFromServer = response.body.to_s
end
newJson = JSON.parse(@responseFromServer)
status_msg = newJson['status']['status_msg']
if (status_msg == "Success")
return 'true'
end
return 'false'
end
这是方法工作,但他使用OpenSSL :: SSL :: VERIFY_NONE。如何在没有OpenSSL :: SSL :: VERIFY_NONE和PEM sertificate的情况下创建发送POST请求的方法?
修改 SSL / HTTPS请求 更新:这个代码示例很糟糕有一些很好的理由。如果必须使用服务器证书来验证要连接的服务器的身份,则会引入潜在的安全漏洞。虽然有问题的解决办法!
require "net/https"
require "uri"
uri = URI.parse("https://secure.com/")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
response.body
response.status
response["header-here"] # All headers are lowercase
带有PEM证书的SSL / HTTPS请求
require "net/https"
require "uri"
uri = URI.parse("https://secure.com/")
pem = File.read("/path/to/my.pem")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.cert = OpenSSL::X509::Certificate.new(pem)
http.key = OpenSSL::PKey::RSA.new(pem)
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
request = Net::HTTP::Get.new(uri.request_uri)
我的问题:如何创建没有PEM的POST方法和 OpenSSL :: SSL :: VERIFY_NONE ?
答案 0 :(得分:1)
这个问题很容易引起误解,但我会尽力解决这个问题。以下是我的建议:
您是否要连接到仅通过https提供的服务,而您不关心证书是否有效?
然后,您可以在初始化:verify_mode => OpenSSL::SSL::VERIFY_NONE
客户端时使用Net::HTTP
。
您将拥有某种传输安全性,但您无法确定您正在与之交谈的服务器是您认为的服务器。你很脆弱。
您是否要通过https和http连接到可用的服务,而您不关心传输安全性?
然后你应该使用http://...
端点。
您是否想要连接到服务并关注传输安全性?
然后你绝对应该使用https://...
端点。
不要覆盖:verify_mode
!
如果您收到证书验证错误,请确保在系统上安装了正确的证书颁发机构。