Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Ruby中通过HTTPs进行基本身份验证?_Ruby_Https_Basic Authentication - Fatal编程技术网

如何在Ruby中通过HTTPs进行基本身份验证?

如何在Ruby中通过HTTPs进行基本身份验证?,ruby,https,basic-authentication,Ruby,Https,Basic Authentication,在看了很多之后,我发现了一些似乎有效的解决方案,但不适合我 例如,我有以下脚本: require 'net/http' require "net/https" @http=Net::HTTP.new('www.xxxxxxx.net', 443) @http.use_ssl = true @http.verify_mode = OpenSSL::SSL::VERIFY_NONE @http.start() {|http| req = Net::HTTP::Get.new('/gb/Pa

在看了很多之后,我发现了一些似乎有效的解决方案,但不适合我

例如,我有以下脚本:

require 'net/http'
require "net/https"

@http=Net::HTTP.new('www.xxxxxxx.net', 443)
@http.use_ssl = true
@http.verify_mode = OpenSSL::SSL::VERIFY_NONE
@http.start() {|http|
    req = Net::HTTP::Get.new('/gb/PastSetupsXLS.asp?SR=31,6')
    req.basic_auth 'my_user', 'my_password'
    response = http.request(req)
    print response.body
}
当我运行它时,它会给我一个请求验证的页面,但是如果我在浏览器中写入以下URL,我就可以顺利进入网站:

https://my_user:my_password@www.xxxxxxx.net/gb/PastSetupsXLS.asp?SR=31,6
我也尝试过使用开放uri:

module OpenSSL
    module SSL
        remove_const :VERIFY_PEER
    end
end
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

def download(full_url, to_here)
    writeOut = open(to_here, "wb") 
    writeOut.write(open(full_url, :http_basic_authentication=>["my_user", "my_password"]).read) 
    writeOut.close 
end

download('https://www.xxxxxxx.net/gb/PastSetupsXLS.asp?SR=31,6', "target_file.html")
但结果是一样的,网站要求用户认证。
有没有关于我做错了什么的提示?。我必须将密码编码为Base 64吗?

我根据中给出的示例编写了一段代码,并在本地WAMP服务器上进行了测试,效果良好。以下是我所拥有的:

require 'net/http'
require 'openssl'

uri = URI('https://localhost/')

Net::HTTP.start(uri.host, uri.port,
  :use_ssl => uri.scheme == 'https', 
  :verify_mode => OpenSSL::SSL::VERIFY_NONE) do |http|

  request = Net::HTTP::Get.new uri.request_uri
  request.basic_auth 'matt', 'secret'

  response = http.request request # Net::HTTPResponse object

  puts response
  puts response.body
end
我的
.htaccess
文件如下所示:

AuthName "Authorization required"
AuthUserFile c:/wamp/www/ssl/.htpasswd
AuthType basic
Require valid-user
我的
.htpasswd
只是一个用
htpasswd-c.htpasswd matt
为密码“secret”生成的一行代码。当我运行代码时,我得到“200OK”和index.html的内容。如果我删除
request.basic\u auth
行,我会得到401错误

更新:

正如@steroscott在评论中指出的,我在示例中使用的
:verify_mode
值(
OpenSSL::SSL::verify_NONE
)对生产不安全

文档中列出的所有可用选项包括:验证\u无、验证\u对等、验证\u客户端\u一次、验证\u失败\u如果\u无\u对等\u证书,其中(根据)只有前两个选项在客户端模式下使用


因此,
VERIFY\u PEER
应该用于生产,顺便说一句,这样您就可以完全跳过它。

您是否尝试过在URL中添加用户名和密码,就像您将其放入浏览器一样?是的,当然,但这些库不支持这种方式。要求是“net/https”而不是“net/http”(至少我必须改变这一点才能让它为我工作)VERIFY\u NONE在安全性方面不是最好的。虽然数据是通过SSL加密的,但您无法确认您正在与您认为自己是的服务器进行通信。@Therisoctt True-我在本地WAMP服务器上没有有效的SSL证书,因此不得不使用它,但不建议在生产中使用它。@Matt
VERIFY\u mode那么如果我有SSL证书?@Matt如果你有时间..你也可以添加,如何使用
net/http
添加证书和密钥?或者我需要添加它们吗?或者当我在自定义路径中有这些文件时,Ruby会默认添加它们。。