Ste*_*low 6 ssl ruby-on-rails ssl-certificate amazon-web-services
我一直在尝试将照片上传到我的 AWS 存储桶,但遇到了标题中提到的错误。我知道这很可能与我的 OpenSSL 证书有关,但到目前为止我尝试过的任何建议的解决方案都失败了。
我在 OSX Yosemite 上使用 ruby 2.3.1、Rails 4.1.8、aws-sdk-core 2.3.4 和carrierwave 0.11.0 遇到了这个问题。
我已经尝试了在这个类似问题上找到的所有可用内容,以及其他人(这个在 Windows 中):https : //github.com/aws/aws-sdk-core-ruby/issues/166#issuecomment-111603660
这是我的一些文件:
载波
CarrierWave.configure do |config| # required
config.aws_credentials = {
access_key_id: Rails.application.secrets.aws_access_key_id, # required
secret_access_key: Rails.application.secrets.aws_access_key, # required
region: 'eu-west-2' # optional, defaults to 'us-east-1'
}
config.aws_bucket = Rails.application.secrets.aws_bucket # required
config.fog_attributes = { 'Cache-Control' => "max-age=#{365.day.to_i}" } # optional, defaults to {}
end
Run Code Online (Sandbox Code Playgroud)
头像_上传者.rb
class AvatarUploader < CarrierWave::Uploader::Base
storage :aws
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
Run Code Online (Sandbox Code Playgroud)
编辑(更多信息):
stack trace:
Seahorse::Client::NetworkingError - SSL_connect returned=1 errno=0 state=error: certificate verify failed:
/Users/stevenharlow/.rbenv/versions/2.3.1/lib/ruby/2.3.0/net/http.rb:933:in `connect_nonblock'
/Users/stevenharlow/.rbenv/versions/2.3.1/lib/ruby/2.3.0/net/http.rb:933:in `connect'
/Users/stevenharlow/.rbenv/versions/2.3.1/lib/ruby/2.3.0/net/http.rb:863:in `do_start'
/Users/stevenharlow/.rbenv/versions/2.3.1/lib/ruby/2.3.0/net/http.rb:858:in `start'
/Users/stevenharlow/.rbenv/versions/2.3.1/lib/ruby/2.3.0/delegate.rb:83:in `method_missing'
aws-sdk-core (2.3.4) lib/seahorse/client/net_http/connection_pool.rb:292:in `start_session'
aws-sdk-core (2.3.4) lib/seahorse/client/net_http/connection_pool.rb:104:in `session_for'
aws-sdk-core (2.3.4) lib/seahorse/client/net_http/handler.rb:109:in `session'
Run Code Online (Sandbox Code Playgroud)
尝试的解决方案:
这是结果
CONNECTED(00000003)
depth=1 /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Baltimore CA-2 G2
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
0 s:/C=US/ST=Washington/L=Seattle/O=Amazon.com Inc./CN=*.s3-us-west-2.amazonaws.com
i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Baltimore CA-2 G2
1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Baltimore CA-2 G2
i:/C=IE/O=Baltimore/OU=CyberTrust/CN=Baltimore CyberTrust Root
---
<certificate info>
No client certificate CA names sent
---
SSL handshake has read 2703 bytes and written 456 bytes
---
New, TLSv1/SSLv3, Cipher is AES128-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : AES128-SHA
Session-ID: <session-id>
Session-ID-ctx:
Master-Key: <master-key>
Key-Arg : None
Start Time: 1463697130
Timeout : 300 (sec)
Verify return code: 0 (ok)
Run Code Online (Sandbox Code Playgroud)
在@RodrigoM 的调查帮助和您的问题更新下,这一切都开始变得有意义了。实际上有两个不同的问题会导致您观察到的错误:
Aws.use_bundled_cert!,这是应该通过添加到初始值设定项来解决的确切情况。但是在这种情况下它不起作用,因为即使此命令指示 ruby openssl 库将各种 CA 证书从gem 的CA 捆绑文件添加到受信任的存储中,该文件也不包含正确的 CA 证书,因为它本身几乎是 2年代久远,过时。中间 CA 证书已于 2015 年 12 月 8 日发布,所以难怪 CA 包文件不包含它。aws-sdk-coreCN=DigiCert Baltimore CA-2 G2现在,您有两个选择:
您可以尝试将此中间 CA 证书(可能包括根 CA 证书 ( CN=Baltimore CyberTrust Root))安装到您的 openssl 可信证书存储中。这应该使s_client命令工作。但是您可能仍然会遇到使用来自 ruby 代码的这些受信任证书的问题。有关使其在 OSX 上的 ruby 下工作的具体步骤,请参阅此 SO 问题的解决方案部分。
此外,由于您aws-sdk-ruby无论如何都在使用分叉的gem 存储库,您也可以通过自己添加中间 CA 证书来更新ca-bundle.crt存储库中的文件(根 CA 证书似乎已经存在于捆绑包中)。为此,您需要执行以下操作:
将其转换为 PEM 格式(以 DER 格式下载)并使用以下 openssl 命令将其添加到证书包中:
openssl x509 -in DigiCertBaltimoreCA-2G2.crt -inform DER >> ca-bundle.crt
Run Code Online (Sandbox Code Playgroud)
运行此命令后,您ca-bundle.crt应该在文件末尾包含中间 CA 证书。
现在只需将这个更新的包文件推送到你的仓库,它就Aws.use_bundled_cert!应该开始工作了!
aws-sdk-rubygem上启动 github 问题,以便他们也更新其存储库中的证书包...| 归档时间: |
|
| 查看次数: |
11850 次 |
| 最近记录: |