如何在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证书,因此不得不使用它,但不建议在生产中使用它。@MattVERIFY\u mode那么如果我有SSL证书?@Matt如果你有时间..你也可以添加,如何使用net/http
添加证书和密钥?或者我需要添加它们吗?或者当我在自定义路径中有这些文件时,Ruby会默认添加它们。。