cài đặt gói không thành công với lỗi xác minh chứng chỉ SSL


264

Khi tôi chạy bundle installcho dự án Rails 3 của mình trên Centos 5.5, nó bị lỗi:

Gem::RemoteFetcher::FetchError: SSL_connect returned=1 errno=0 state=SSLv3 
read server certificate B: certificate verify failed 
(https://bb-m.rubygems.org/gems/multi_json-1.3.2.gem)
An error occured while installing multi_json (1.3.2), and Bundler cannot continue.
Make sure that `gem install multi_json -v '1.3.2'` succeeds before bundling.

Khi tôi cố gắng cài đặt đá quý bằng tay (bởi gem install multi_json -v '1.3.2') nó hoạt động. Vấn đề tương tự xảy ra với một số đá quý khác. Tôi sử dụng RVM (1.12.3), ruby ​​1.9.2, gói 1.1.3.

Làm thế nào để khắc phục nó?


Đối mặt với cùng một vấn đề. Nhưng với một loại đá quý khác: Gem :: RemoteFetcher :: FetchError: SSL_connect return = 1 errno = 0 state = SSLv3 đọc chứng chỉ máy chủ B: chứng nhận xác minh không thành công ( bb-m.rubygems.org/gems/activeresource-3.2.3.gem )
Sathish

4
Tôi có cùng một lỗi với các trường hợp tương tự. Tôi nghi ngờ, với những phản hồi khác, đó là vấn đề phía máy chủ.
asfallows

Tôi đã gặp một vấn đề tương tự trong Rails 5. Đã khắc phục bằng cách thêm source "https://rubygems.org''vào Gemfile và chạy 'cập nhật đá quý - hệ thống'. Bạn có thể tìm thêm thông tin ở đây .
Nesha Zoric

Nesha, sửa chữa đó làm việc cho tôi. Cảm ơn bạn!
Martin Marino

Câu trả lời:


310

Cập nhật

Bây giờ tôi đã karma wh..err khai thác đủ từ câu trả lời này mọi người nên biết rằng điều này nên được sửa chữa.

re: qua ownatik cài đặt lại gói không thành công với lỗi xác minh chứng chỉ SSL

gem update --system

Câu trả lời của tôi vẫn đúng và để lại bên dưới để tham khảo nếu kết thúc không hiệu quả với bạn.


Thành thật giải pháp tạm thời tốt nhất là

[...] Sử dụng phiên bản rubygems không ssl trong gemfile của bạn như một cách giải quyết tạm thời.

thông qua người dùng ownatik

ý nghĩa của chúng là ở đầu Gemfilethay đổi trong thư mục ứng dụng rails của bạn

source 'https://rubygems.org'

đến

source 'http://rubygems.org'

lưu ý rằng phiên bản thứ hai là http thay vì http s


1
Tôi chấp nhận câu trả lời này, vì đó là điều mà tôi đã làm lúc đầu. Sau đó tôi đã thay đổi chiến lược triển khai của mình. Bây giờ tôi chạy gói ứng dụng trên một máy chủ khác và sau đó tôi sao chép nó (với đá quý trong vendorthư mục) vào máy chủ mà tôi đã viết trong câu hỏi.
mrzasa

6
Điều này đã không làm việc cho tôi. Liên kết được cung cấp bởi @fbernier bên dưới đã sửa nó cho tôi.
Scott Fister

5
Điều này không hoạt động. Chạy này chỉ cung cấp đầu ra của Latest version currently installed. Aborting. bất kỳ ý tưởng khác?
Matt Huggins

1
Về mặt thay đổi nguồn, cho những người mới hơn như tôi. Tôi sẽ xác định rằng tập tin này nằm trong thư mục ứng dụng của bạn. Tôi đã tìm kiếm nó trong thư mục railsinstaller. Dù sao, tôi đã thay đổi nguồn và cuối cùng nó đã hoạt động. Tôi đang gặp lỗi chứng chỉ khi cố chạy bản cập nhật :(
Brian

2
gem update --systemkhông thành công với cùng một lỗi chứng chỉ: \
BlueRaja - Danny Pflughoeft 16/12/14

226

Thay thế nguồn đá quý ssl bằng non-ssl như một giải pháp tạm thời:


8
OMG làm việc như một cơ duyên! Tôi đang dùng Windows 7 x64 phía sau proxy công ty. Cảm ơn rất nhiều!
Șerban Ghiță

14
Tôi ngạc nhiên khi điều này không được xếp hạng cao hơn, đây là cách khắc phục nhanh nhất.
hwatkins

3
giải pháp tạm thời tốt ... hãy lưu ý những điều sau :: RubyGems đã được định cấu hình để phục vụ đá quý thông qua các URL sau thông qua lịch sử của nó: * Gem.rubyforge.org (RubyGems 1.3.6 trở về trước) * rubygems.org (RubyGems 1.3. 7 đến 1.8.25) * rubygems.org (RubyGems 2.0.1 và mới hơn)
beauXjames

1
giải pháp nhanh nhất cho tôi trên Windows 8
Tisch

3
Imho này thậm chí không nên được coi là một câu trả lời hợp lệ, bởi vì nó mở ra hệ thống của bạn để tấn công từ bên ngoài.
rubiii

160

Lý do là rubygems cũ. Trước tiên, bạn cần cập nhật phần hệ thống bằng nguồn không ssl:

gem update --system --source http://rubygems.org/ (tạm thời cập nhật phần hệ thống bằng kết nối không ssl).

Bây giờ bạn đã sẵn sàng để sử dụng gem update.


5
Giải pháp thực sự đơn giản đó là đa nền tảng và cho phép RubyGems chăm sóc các chi tiết. Đẹp.
zrisher

2
đây là câu hỏi nên được chấp nhận, các câu trả lời ở trên không giải thích rằng bạn cần xóa các nguồn ssl trước
Ephraim

1
Cảm ơn - đây là vé. Nếu bạn nhận được thông báo "không có trong bộ đệm" khi thêm hoặc xóa nguồn, hãy thử nó có hoặc không có dấu gạch chéo. Nó phải phù hợp chính xác.
Timothy Lee Russell

1
Tôi đã tìm kiếm máng nhiều giải pháp. Đây là một trong những làm việc như một nét duyên dáng. Cảm ơn bạn! Điều này nên được chọn là giải pháp thực sự.
Berker Yüceer

1
Cảm ơn bạn!! Tôi đồng ý với những người khác rằng đây sẽ là câu trả lời được chấp nhận, vì nó không dẫn đến việc bạn tìm nạp đá quý thông qua HTTP đơn giản.
Alexander

117

Nếu bạn đang sử dụng máy Mac và sử dụng phiên bản RVM gần đây (~ 1.20), lệnh sau sẽ có hiệu quả với tôi.

rvm osx-ssl-certs update

Cảm ơn bạn! Làm việc cho tôi trên Mac OSX 10.8.5
Matthew Blancarte

Cảm ơn, làm việc cho tôi quá. Tôi đã cố gắng cài đặt Cốc Cốc. rvm 1.22.15, OS X 10.8.5
Logan Moseley

1
Điều này cũng được chỉ ra trong thông báo lỗi "... xem bit.ly/ruby-ssl".
IAmNaN

Cảm ơn Đã làm cho tôi!! \ o /
Valter Júnior

55

Vấn đề này bây giờ nên được sửa chữa. Cập nhật rubygems ( gem update --system), đảm bảo openssl có ở phiên bản mới nhất trên HĐH của bạn hoặc thử các mẹo này của nó vẫn không hoạt động: http://railsapps.github.com/openssl-cert ve-verify-fails.html


1
Cũng cần cập nhật trình đóng gói để làm cho nó hoạt động (rubygems 2.0.3 + trình biên dịch 1.3.2 + cygwin openssl 1.0.1e hoạt động với tôi trên winxp).
fakeleft

Tôi đã phải cập nhật từ 1.3.0, bây giờ tôi đang ở 1.3.4 và https không còn xuất hiện lỗi: bundler-1.3.0 / lib / bundler / eller / net / http / continent / ssl numuse.rb: 70: trong 'kết nối': SSL_connect được trả lại = 1 errno = 0 state = SSLv3 đọc trao đổi khóa máy chủ B: điểm sinh thái xấu (OpenSSL :: SSL :: SSLError)
Jon Kern

3
Không thể cập nhật rubygems nếu chứng chỉ SSL không được chấp nhận! Chạy trong vòng tròn ở đây;)
kap

50

Giải pháp tạm thời (như được ám chỉ bởi ownatik):

Tạo hoặc sửa đổi một tệp có tên .gemrc trong đường dẫn nhà của bạn, bao gồm cả dòng :ssl_verify_mode: 0

Điều này sẽ ngăn trình đóng gói kiểm tra chứng chỉ SSL của đá quý khi nó cố gắng cài đặt chúng.

Đối với các thiết bị * nix, 'đường dẫn nhà' có nghĩa là ~/.gemrc. Bạn cũng có thể tạo /etc/gemrcnếu bạn thích. Đối với Windows XP, 'đường dẫn nhà' có nghĩa là c:\Documents and Settings\All Users\Application Data\gemrc. Đối với Windows 7,C:\ProgramData\gemrc


3
%USERPROFILE%\.gemrccũng được tìm kiếm gemtrên Windows.
Rômulo Ceccon

1
Vị trí tệp được đề xuất cho Windows 8?
dùng1318135

6
Xóa xác minh ssl là cách giải quyết tạm thời mở ra lỗ hổng bảo mật. Đọc thêm tại đây: github.com/rubygems/rubygems/commit/ triệt
mrm

Điều này rất hữu ích trong trường hợp của tôi; đằng sau một tường lửa công ty giới hạn tất cả các tệp nén nhưng cho phép chúng thông qua https.
mydoghasworms

Không thử giải pháp này, nhưng trong trường hợp của tôi cũng hoạt động khi tôi thêm nội dung này vào ~/.gemrc::sources: - http://rubygems.org
Artur Käpp

18

Trên windows7, bạn có thể tải xuống tệp cacert.pem từ đây và đặt SSL_CERT_FILE môi trường theo đường dẫn nơi bạn lưu trữ chứng chỉ, ví dụ:

SET SSL_CERT_FILE="C:\users\<username>\cacert.pem"

hoặc bạn có thể đặt biến trong tập lệnh của mình như thế này ENV['SSL_CERT_FILE']="C:/users/<username>/cacert.pem"

Thay thế <tên người dùng> bằng tên người dùng của riêng bạn.


3
Cảm ơn bạn. Sửa chữa vĩnh viễn là ở đây. guide.rubygems.org/ssl-certert-update
Maheshkumar

Đây là bản sửa lỗi vĩnh viễn phù hợp và tránh sử dụng nguồn http không bảo mật.
Dio Phụng

15

Giải pháp thực sự cho vấn đề này, nếu bạn đang sử dụng RVM:

  1. Cập nhật rubygems: gem update --system
  2. Sử dụng RVM để làm mới các chứng nhận SSL: rvm osx-ssl-certs update all

Hat tip cho mẹo này trong dự án RailsApps !


1
rvm osx-ssl-certs update alllàm việc tốt cho tôi Không cần thực hiện bước 1.
DMH


7

Đối với những người đã cài đặt ruby ​​thông qua RVM và muốn khắc phục nhanh (không muốn đọc theo yêu cầu của Bruno), hãy thử điều này:

rvm remove 1.9.x (or whatever version of ruby you are using)
rvm pkg install openssl
rvm install 1.9.2 --with-openssl-dir=$rvm_path/usr

Để biết thêm chi tiết, đây là liên kết nơi tôi tìm thấy giải pháp.

http://railsapps.github.com/openssl-certert-verify-fails.html

BTW, tôi đã không phải chạm vào chứng chỉ của mình trên Ubuntu.

Trên hết, đây không phải là cách giải quyết. Nó sẽ tải xuống đá quý thông qua SSL và thất bại nếu có vấn đề như một người đàn ông trong cuộc tấn công giữa, điều này tốt hơn nhiều so với việc tắt bảo mật.


Trang bạn liên kết đến có một "cách giải quyết" (đầu tiên) và sau đó là các giải pháp thích hợp. Sẽ tốt hơn nếu câu trả lời của bạn nói rõ hơn một chút. Tuy nhiên, sử dụng chứng chỉ CA (thông qua cacert.pemhoặc $rvm_path/usr/ssl) thực sự là cách đúng đắn.
Bruno

1
Bruno, giải pháp có thể sẽ khác một chút tùy thuộc vào hương vị của Unix mà người đó sử dụng. Có vẻ như đọc các liên kết sẽ là cần thiết.
danielrussia

Tôi chỉ nói về sự khác biệt giữa "cách giải quyết" trên trang ( :ssl_verify_mode: 0, vấn đề mở), trái ngược với bất kỳ 3 giải pháp nào dưới đây, đây là cách đúng đắn để khắc phục vấn đề này.
Bruno

@Bruno, tôi đã sửa đổi bài viết của mình, vui lòng thêm nhận xét hoặc chỉnh sửa wiki nếu bạn thấy các khả năng cải tiến.
Daniel Kehoe

6

Điều này đã được sửa

http://guides.rubygems.org/ssl-certert-update/

Giờ đây, RubyGems 2.6.x đã được phát hành, bạn có thể cập nhật thủ công lên phiên bản này.

Tải xuống https://rubygems.org/doads/rubygems-update-2.6.7.gem

Vui lòng tải xuống tệp trong một thư mục mà sau này bạn có thể trỏ đến (ví dụ: thư mục gốc của ổ cứng C :)

Bây giờ, sử dụng Dấu nhắc lệnh của bạn:

C:\>gem install --local C:\rubygems-update-2.6.7.gem
C:\>update_rubygems --no-ri --no-rdoc

Sau này, gem --version sẽ báo cáo phiên bản cập nhật mới.

Bây giờ bạn có thể gỡ cài đặt đá quý rubygems-update một cách an toàn:

C:\>gem uninstall rubygems-update -x

5

Hướng dẫn dán sao chép đơn giản được đưa ra ở đây về tập tin .pem

https://gist.github.com/luislavena/f064211759ee0f806c88

Để xác minh chứng chỉ không thành công

Nếu bạn đã đọc các phần trước, bạn sẽ biết điều này có nghĩa là gì (và xấu hổ> đối với bạn nếu bạn chưa).

Chúng tôi cần tải xuống AddTrustExternalCARoot-2048.pem . Mở một Dấu nhắc lệnh và gõ vào:

C:> gem which rubygems C: /Ruby21/lib/ruby/2.1.0/rubygems.rb Bây giờ, hãy xác định vị trí thư mục đó. Từ trong cùng một cửa sổ, nhập phần đường dẫn đến phần mở rộng tệp, nhưng sử dụng dấu gạch chéo ngược thay thế:

C:> start C: \ Ruby21 \ lib \ ruby ​​\ 2.1.0 \ rubygems Điều này sẽ mở một cửa sổ Explorer bên trong thư mục chúng tôi đã chỉ định.

Bước 3: Sao chép chứng chỉ ủy thác mới

Bây giờ, xác định vị trí thư mục ssl_certs và sao chép tệp .pem mà chúng tôi thu được từ bước trước đó bên trong.

Nó sẽ được liệt kê với các tệp khác như GeoTrustGlobalCA.pem.


4

cùng một vấn đề nhưng với đá quý khác nhau ở đây:

Gem::RemoteFetcher::FetchError: SSL_connect returned=1 errno=0 state=SSLv3 
read server certificate B: certificate verify failed 
(https://bb-m.rubygems.org/gems/builder-3.0.0.gem)
An error occured while installing builder (3.0.0), and Bundler cannot continue.
Make sure that `gem install builder -v '3.0.0'` succeeds before bundling.

giải pháp tạm thời: gem install builder -v '3.0.0'làm cho nó có thể tiếp tụcbundle install


7
Bạn cũng có thể sử dụng phiên bản rubygems không ssl trong gemfile của mình như một cách giải quyết tạm thời.
fbernier

1
Tôi đã làm nó và nó hoạt động. Hiện tại, đó là một giải pháp đầy đủ.
mrzasa

Tôi có một vấn đề tương tự ở đây. Vậy @Ownatik làm thế nào để sử dụng phiên bản ssl của rubygems?
Zeck



4

Bản sửa lỗi vĩnh viễn của tôi cho Windows:

  1. Tải xuống CACert , lưu dưới dạng C:\ruby\ssl_certs\GlobalSignRootCA.pemtừ http://guides.rubygems.org/ssl-certert-update/

  2. Tạo biến hệ thống có tên " SSL_CERT_FILE ", được đặt thành C:\ruby\ssl_certs\GlobalSignRootCA.pem.

  3. Thử lại gem install bundler::

C:\gem sources
*** CURRENT SOURCES ***
https://rubygems.org/

C:\gem install bundler
Fetching: bundler-1.13.5.gem (100%)
Successfully installed bundler-1.13.5
1 gem installed

3

Tôi gặp một lỗi hơi khác, mặc dù có lẽ liên quan, trên Ubuntu 12.04:

Gem::RemoteFetcher::FetchError: SSL_connect returned=1 errno=0 state=unknown state: sslv3 alert handshake failure (https://d2chzxaqi4y7f8.cloudfront.net/gems/activesupport-3.2.3.gem)
An error occured while installing activesupport (3.2.3), and Bundler cannot continue.
Make sure that `gem install activesupport -v '3.2.3'` succeeds before bundling.

Nó xảy ra khi tôi chạy bundle installvới source 'https://rubygems.org'trong một Gemfile.

Đây là một vấn đề với OpenSSL trên Ubuntu 12.04. Xem vấn đề Rubygems # 319 .

Để khắc phục điều này, hãy chạy apt-get update && apt-get upgradetrên Ubuntu 12.04 để nâng cấp OpenSSL của bạn.


3

Tôi đã có thể theo dõi điều này đến thực tế là các nhị phân rvm tải xuống không hoạt động tốt với OpenSSL của OS X, đã cũ và không còn được HĐH sử dụng nữa.

Giải pháp cho tôi là buộc biên dịch khi cài đặt Ruby thông qua rvm:

rvm reinstall --disable-binary 2.2

Điều này làm việc cho tôi. Bạn cần thay thế "2.2" với phiên bản ruby ​​bạn đang sử dụng
Josh

3

Thx đến @ Alexander.Iljushkin cho:

gem update --system --source http://rubygems.org/

Sau đó, trình đóng gói vẫn thất bại và giải pháp cho điều đó là:

gem install bundler


2

Tôi đã nhận được một lỗi tương tự. Đây là cách tôi giải quyết điều này: Trong thư mục đường dẫn của bạn, hãy kiểm tra Gemfile. Chỉnh sửa nguồn trong gemfile thành http thay vì https và lưu nó. Điều này có thể cài đặt trình đóng gói mà không có vấn đề chứng chỉ SSL.


2

Đối với máy Windows, hãy kiểm tra phiên bản đá quý của bạn với

gem --version

Sau đó cập nhật đá quý của bạn như sau:

Vui lòng tải xuống tệp trong một thư mục mà sau này bạn có thể trỏ đến (ví dụ: thư mục gốc của ổ cứng C :)

Bây giờ, sử dụng Dấu nhắc lệnh của bạn:

C:\>gem install --local C:\rubygems-update-1.8.30.gem
C:\>update_rubygems --no-ri --no-rdoc

Bây giờ, cài đặt gói sẽ thành công mà không có lỗi xác minh chứng chỉ SSL.

Hướng dẫn chi tiết hơn ở đây


1

Điều này làm việc cho tôi:

  • tải đá quý mới nhất tại https://rubygems.org/pages/doad
  • cài đặt đá quý với gem install --local [path to downloaded gem file]
  • cập nhật đá quý với update_rubygems
  • kiểm tra xem bạn đang dùng phiên bản đá quý mới nhất với gem --version

1

Tôi đã phải cài đặt lại openssl:

brew uninstall --force openssl
brew install openssl

1

Gần đây tôi đã phải đối mặt với vấn đề này và làm theo các bước được nêu ở đây . Có thể có khả năng bạn không trỏ đến chứng chỉ OpenSSL phù hợp. Sau khi chạy:

rvm osx-ssl-certs status all
rvm osx-ssl-certs update all

export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt

bó xong chạy!


1

Tải xuống rubygems-update-2.6.7.gem .

Bây giờ, sử dụng Dấu nhắc lệnh của bạn:

C:\>gem install --local C:\rubygems-update-2.6.7.gem
C:\>update_rubygems --no-ri --no-rdoc

Sau này, gem --versionnên báo cáo phiên bản cập nhật mới.

Bây giờ bạn có thể gỡ cài đặt đá quý rubygems-update một cách an toàn:

C:\>gem uninstall rubygems-update -x
Removing update_rubygems
Successfully uninstalled rubygems-update-2.6.7

1

Lưu ý, nếu bạn đang lấy đá quý từ một nguồn mà chứng chỉ SSL được cơ quan chứng nhận nội bộ tin cậy (hoặc bạn đang kết nối với nguồn bên ngoài thông qua proxy web của công ty bằng kiểm tra SSL), hãy trỏ biến env SSL_CERT_FILE của bạn vào chuỗi chứng chỉ của bạn . Điều này rất có thể chỉ yêu cầu xuất chứng chỉ gốc của bạn từ cửa hàng chứng chỉ của bạn (System Keychain trên macOS) đến một vị trí có thể truy cập từ shell của bạn, ví dụ:

export SSL_CERT_FILE=~/RootCert.pem

0

Nếu bạn đang sử dụng rails-assets

Nếu bạn đang sử dụng https://rails-assets.org/để quản lý tài sản của mình, không có câu trả lời nào giúp bạn. Thậm chí chuyển đổi sang httpsẽ không giúp đỡ.

Cách khắc phục đơn giản nhất là sử dụng nguồn này thay thế http://insecure.rails-assets.org. Điều này đã được đề cập trong trang chủ của họ .


0

Điều duy nhất làm việc cho tôi trên hệ thống windows cũ và phiên bản ruby ​​1.9 là tải xuống tệp cacert từ http://guides.rubygems.org/ssl-cert ve-update /

Và sau đó chạy lệnh dưới đây trước khi chạy gói cài đặt

bundle config --global ssl_ca_cert /path/to/file.pem
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.