在企业网络上安装vagrant插件


1

我正在尝试使用自己的根证书在企业网络上安装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
您的公司是不是在使用Blue Coat拦截SSL?你在使用代理吗?如果您https://gems.hashicorp.com/在浏览器中查看GeoTrust - > RapidSSL - > * .hashicorp.com或您的公司证书吗?
techraf 2016年

@techraf我认为他们正在用Blue Coat拦截SSL。所有网站都有自己的根链证书,所以它也没有任何代理配置。
kenorb 2016年

所以也curl https://gems.hashicorp.com/失败了吧?
techraf 2016年

1
@techraf卷曲工作得很好,我已经成功通过编辑要解决该问题mixin_install_opts.rb并更换httpshttp,安静肮脏的解决方法。
kenorb 2016年

@techraf既然你提到了Blue Coat,我假设你熟悉那个应用程序,你能回答:Blue Coat Unified Agent应用程序做了什么?
kenorb 2016年

Answers:


4

绝对不建议在评论/答案中使用Ruby文件,因为它否定了使用SSL保护连接的好处。

“正确”的方式(也就是IT不会追捕你)是将代理/防火墙的证书添加到Vagrant使用的嵌入式Ruby的可信证书列表中。

导航到安装Vagrant的目录,然后打开embedded\cacert.pem文件并将公司证书的内容附加到文件中,然后保存并退出。

在Windows上C:\Hashicorp\Vagrant\embedded\cacert.pem。遗憾的是,如果从Internet Explorer导出证书,则无法始终直接使用该证书。在这些情况下,您可以使用openSSL将其转换为正确的格式。

我有一个脚本为你完成了大部分工作,但我需要再次追踪它。一旦我这样做,我将以更简单的方式更新此答案,因为每次更新Vagrant时,它都可能会破坏cacert.pem文件。


1

通常:ssl_verify_mode在位于sysconfdir中的gemrc中禁用可解决大多数证书问题,例如添加以下行:

:ssl_verify_mode: 0

%USERPROFILE%\.gemrcC:\ProgramData\gemrc在Windows上,否则在(~/.gemrc/etc/gemrc在Linux / OS X上)。

通过检查正确的文件夹:ruby -retc -e 'p Etc.sysconfdir'。您可能需要安装RailsInstaller

您可以检查它是否有效:

C:\HashiCorp\Vagrant\embedded\bin>gem.bat env
RubyGems Environment:
  - GEM CONFIGURATION:
     - :ssl_verify_mode => 0

请注意,建议不要使用以上内容,因为存在安全风险。因此,设置SSL_CERT_FILE为正确的PEM文件或将新的信任证书复制到ssl_certs目录中是一种更好的方法。请参阅:在GH Gist 下载一个cacert.pemfor RailsInstaller


但是根据我的经验上面将无法正常工作,因此最简单的解决方法是编辑mixin_install_opts.rb文件(例如,C:\HashiCorp\Vagrant\embedded\gems\gems\vagrant-1.8.5\plugins\commands\plugin\command)和替换httpsplugin_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",
          ]

在再次运行vagrant命令之前,SET VAGRANT_LOG=INFOexport VAGRANT_LOG=INFO在shell中)进一步调试问题。


有关:


0

有一个更容易的选择!让我们使用主机更新程序作为示例

首先,在组装要分发的软件时,获取插件作为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/下载该文件

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.