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/.

Сертификат отлично работает в веб-браузерах, но почему-то Vagrant не понимает эти системные сертификаты. Я использовал http вместо https как указано выше, но это не помогло.

Какие-нибудь другие обходные пути для такой проблемы?

3 ответа3

4

Взломать файл Ruby в комментариях / ответах определенно не рекомендуется, так как он сводит на нет преимущества использования SSL для защиты ваших соединений.

"Правильный" способ (иначе он не будет охотиться за вами) - добавить сертификат прокси / брандмауэра в список доверенных сертификатов для встроенного Ruby, который использует Vagrant.

Перейдите в каталог, где был установлен Vagrant, затем откройте внедренный файл embedded\cacert.pem и добавьте содержимое вашего корпоративного сертификата в файл, а затем сохраните и выйдите.

В Windows это C:\Hashicorp\Vagrant\embedded\cacert.pem . К сожалению, вы не всегда можете напрямую использовать сертификат, если экспортируете его из Internet Explorer. В этих случаях вы можете конвертировать его, используя openSSL, чтобы получить его в правильном формате.

У меня был сценарий, который сделал большую часть этого для вас, но мне нужно снова его отследить. Как только я это сделаю, я обновлю этот ответ более простым способом, так как каждый раз, когда вы обновляете Vagrant, он, скорее всего, забьет файл cacert.pem .

1

Обычно отключение :ssl_verify_mode в вашем gemrc, расположенном в вашем sysconfdir, решает большинство проблем с сертификатами, например, добавление этой строки:

:ssl_verify_mode: 0

в %USERPROFILE%\.gemrc или C:\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 - лучший способ. Смотрите: Загрузите 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 в оболочке).


Связанные с:

0

Там намного проще вариант! Давайте используем хост обновления в качестве примера

Во-первых, при сборке распространяемого программного обеспечения приобретите плагин как драгоценный камень:

❯ 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/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .