在公司网络上安装 vagrant 插件

在公司网络上安装 vagrant 插件

我正在尝试使用其自己的根证书在公司网络上安装 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%\.gemrcC:\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.pemRailsInstaller在 GH Gist


但是根据我上述的经验不起作用,因此最简单的解决方法是编辑mixin_install_opts.rb文件(例如C:\HashiCorp\Vagrant\embedded\gems\gems\vagrant-1.8.5\plugins\commands\plugin\command)并将其替换为https,例如plugin_sourceshttp

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=INFOexport 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/

相关内容