我正在尝试使用其自己的根证书在公司网络上安装 Vagrant 插件,但是失败了:
$ vagrant plugin install vagrant-timezone --plugin-source http://rubygems.org
Installing the 'vagrant-timezone' plugin. This can take a few minutes...
...
Could not verify the SSL certificate for https://gems.hashicorp.com/.
There is a chance you are experiencing a man-in-the-middle attack, but most likely your system doesn't have the CA certificates needed for verification. For information about OpenSSL certificates, see http://bit.ly/ruby-ssl. To connect without using SSL, edit your Gemfile sources and change 'https' to 'http'.
...
Warning: this Gemfile contains multiple primary sources. Using `source` more than once without a block is a security risk, and may result in installing unexpected gems. To resolve this warning, use a block to indicate which gems should come from the secondary source. To upgrade this warning to an error, run `bundle config disable_multisource true`.Warning: this Gemfile contains multiple primary sources. Using `source` more than once without a block is a security risk, and may result in installing unexpected gems. To resolve this warning, use a block to indicate which gems should come from the secondary source. To upgrade this warning to an error, run `bundle config disable_multisource true`.Retrying fetcher due to error (2/4): Bundler::Fetcher::CertificateFailureError Could not verify the SSL certificate for https://gems.hashicorp.com/.
该证书在 Web 浏览器下运行良好,但不知何故 Vagrant 无法理解这些系统证书。我确实使用了http
上述https
方法,但这没有帮助。
还有其他解决方法吗?
答案1
绝对不推荐评论/答案中的 Ruby 文件黑客行为,因为它会抵消使用 SSL 保护您的连接的好处。
“正确”的方法(即 IT 不会追捕您)是将您的代理/防火墙的证书添加到 Vagrant 使用的嵌入式 Ruby 的受信任证书列表中。
导航到安装 Vagrant 的目录,然后打开文件embedded\cacert.pem
并将公司证书的内容附加到文件中,然后保存并退出。
在 Windows 上是这样的C:\Hashicorp\Vagrant\embedded\cacert.pem
。遗憾的是,如果您从 Internet Explorer 导出证书,则不能直接使用。在这种情况下,您可以使用 openSSL 将其转换为正确的格式。
我有一个脚本可以帮你完成大部分工作,但我需要再次找到它。一旦找到,我会用更简单的方法更新这个答案,因为每次更新 Vagrant 时,它都可能会破坏文件cacert.pem
。
答案2
通常禁用:ssl_verify_mode
你的宝石学位于您的系统配置目录解决大多数证书问题,例如添加此行:
:ssl_verify_mode: 0
或%USERPROFILE%\.gemrc
C:\ProgramData\gemrc
在 Windows 上,否则在~/.gemrc
或/etc/gemrc
(在 Linux/OS X 上)。
通过以下方式检查正确的文件夹:ruby -retc -e 'p Etc.sysconfdir'
。您可能需要安装Rails 安装程序。
您可以通过以下方式检查它是否有效:
C:\HashiCorp\Vagrant\embedded\bin>gem.bat env
RubyGems Environment:
- GEM CONFIGURATION:
- :ssl_verify_mode => 0
请注意,不建议使用上述方法,因为存在安全风险。因此,请设置SSL_CERT_FILE
为正确的 PEM 文件或将新的信任证书复制到ssl_certs
目录中是一个更好的方法。参见:下载cacert.pem
RailsInstaller在 GH Gist
但是根据我上述的经验不起作用,因此最简单的解决方法是编辑mixin_install_opts.rb
文件(例如C:\HashiCorp\Vagrant\embedded\gems\gems\vagrant-1.8.5\plugins\commands\plugin\command
)并将其替换为https
,例如plugin_sources
http
module VagrantPlugins
module CommandPlugin
module Command
module MixinInstallOpts
def build_install_opts(o, options)
options[:plugin_sources] = [
"http://rubygems.org",
"http://gems.hashicorp.com",
]
为了进一步调试问题,SET VAGRANT_LOG=INFO
(export VAGRANT_LOG=INFO
在 shell 中),再次运行 vagrant 命令之前。
有关的:
答案3
还有一个更简单的选项!让我们以 hosts updater 为例
首先,在组装需要分发的软件时,获取插件作为 gem:
❯ gem fetch vagrant-hostsupdater
Fetching: vagrant-hostsupdater-1.1.1.160.gem (100%)
Downloaded vagrant-hostsupdater-1.1.1.160
然后,分发 gem 文件并在每台机器上运行:
vagrant plugin install vagrant-hostsupdater-1.1.1.160.gem
如果你无法运行gem
,请从下载文件https://rubygems.org/