SSL_connect ส่งคืน = 1 errno = 0 state = SSLv3 อ่านใบรับรองเซิร์ฟเวอร์ B: การตรวจสอบใบรับรองล้มเหลว


281

ฉันใช้Authlogic-Connectสำหรับการเข้าสู่ระบบของบุคคลที่สาม หลังจากใช้การย้ายข้อมูลที่เหมาะสมแล้วการลงชื่อเข้าใช้ Twitter / Google / yahoo ดูเหมือนว่าจะทำงานได้ดี แต่การเข้าสู่ระบบ Facebook มีข้อยกเว้น:

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

บันทึก dev แสดงให้เห็น

OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed):
  app/controllers/users_controller.rb:37:in `update'

กรุณาแนะนำ ..


2
สิ่งนี้ช่วยได้บ้าง: stackoverflow.com/q/3977303/382818
Zabba

นี่เป็นทางออกที่ดีที่สุดที่ฉันสามารถหาได้จนถึงstackoverflow.com/a/16983443/11792
Pavel Nikolov

คำตอบ:


138

ฉันพบปัญหาคล้ายกันเมื่อพยายามใช้ตัวสร้าง JQuery สำหรับ Rails 3

ฉันแก้ไขมันเช่นนี้

  1. รับชุด CURL Certificate Authority (CA) คุณสามารถทำได้ด้วย:

    • sudo port install curl-ca-bundle [ถ้าคุณใช้ MacPort]
    • หรือเพียงดึงลงมาโดยตรง wget http://curl.haxx.se/ca/cacert.pem
  2. รันโค้ดทับทิมที่พยายามที่จะตรวจสอบการรับรอง SSL SSL_CERT_FILE=/opt/local/etc/certs/cacert.pem rails generate jquery:installนี้: ในกรณีของคุณคุณต้องการตั้งค่านี้เป็นตัวแปรสภาพแวดล้อมที่เซิร์ฟเวอร์เลือกหรือเพิ่มบางอย่างเช่นENV['SSL_CERT_FILE'] = /path/to/your/new/cacert.pemในไฟล์ environment.rb ของคุณ

นอกจากนี้คุณยังสามารถเพียงแค่ติดตั้งไฟล์แคลิฟอร์เนีย (ฉันไม่ได้พยายามนี้) ระบบปฏิบัติการ - มีคำแนะนำที่มีความยาวที่นี่ - นี้ควรจะทำงานในลักษณะที่คล้ายกัน แต่ฉันไม่ได้พยายามนี้เอง

โดยทั่วไปปัญหาที่คุณกำลังกดปุ่มคือบริการเว็บบางอย่างกำลังตอบสนองด้วยใบรับรองที่ลงนามกับ CA ซึ่ง OpenSSL ไม่สามารถตรวจสอบได้


1
สิ่งนี้ก็ใช้ได้กับฉันเช่นกันในขณะที่พยายามเชื่อมต่อกับบัญชี gmail ของฉันโดยใช้ Ruby Net :: IMAP จากสคริปต์ ruby ​​ขอบคุณ
Jignesh Gohel

4
ใช่มันใช้งานได้ดีกับ ruby-1.9.3 ฉันเพิ่มลงในการกำหนดค่า bash ของฉัน export SSL_CERT_FILE=/usr/local/etc/openssl/certs/cert.pem
andersjanmyr

5
ฉันไม่มี / usr / local / etc / openssl ดังนั้นฉันจึงวิ่ง sudo curl http://curl.haxx.se/ca/cacert.pem >> /usr/local/etc/cacert.pemตามด้วย export SSL_CERT_FILE=/usr/local/etc/cacert.pem
Lilith River

4
การพัฒนาบน Mac ของฉันฉันเพิ่งเพิ่มSSL_CERT_FILE=/usr/local/etc/openssl/cert.pemไปยัง.envไฟล์แอปและ voila ของฉัน- ทั้งหมดมีความสุข
Dave Sag

8
ฉันขอขอบคุณประชดของการใช้ wget เพื่อดาวน์โหลดใบรับรอง curl
แต้ม

135

หากคุณใช้ RVM บน OS X คุณอาจต้องใช้สิ่งนี้:

rvm osx-ssl-certs update all

ข้อมูลเพิ่มเติมที่นี่: http://rvm.io/support/fixing-broken-ssl-certificates

และนี่คือคำอธิบายทั้งหมด: https://github.com/wayneeseguin/rvm/blob/master/help/osx-ssl-certs.md


ปรับปรุง

ใน Ruby 2.2 คุณอาจต้องติดตั้ง Ruby จากซอร์สเพื่อแก้ไข นี่เป็นวิธี (แทนที่2.2.3ด้วยรุ่น Ruby ของคุณ):

rvm reinstall 2.2.3 --disable-binary

เครดิตhttps://stackoverflow.com/a/32363597/4353และเอียนคอนเนอร์


2
นี่คือการเขียนที่ครอบคลุมมากขึ้นพร้อมทางเลือก: railsapps.github.io/openssl-certificate-verify-failed.html
Peter P.

ข้อผิดพลาด: การอัปเดต rvm ถูกลบแล้ว ดู 'rvm get' และ rvm 'rubygems' CLI API แทน
หยาง

@ user432506 คุณได้รับข้อผิดพลาดอย่างไร ฉันใช้ RVM ที่เสถียรล่าสุดและยังใช้งานได้
htanata

4
สิ่งนี้จะได้ผลสักพักหนึ่งแล้วก็ล้มเหลวสำหรับฉัน สิ่งที่ใช้ได้ผลสำหรับฉันคือการทำงานrvm reinstall 2.2.0 --disable-binaryแต่คุณต้องติดตั้งชุดและเริ่มต้นใหม่
Ian Connor

2
นี่เป็นเครื่องช่วยชีวิตขนาดใหญ่และควรเป็นคำตอบที่ยอมรับได้
Siraris

129

นี่คือวิธีที่คุณสามารถแก้ไขได้ใน Windows: https://gist.github.com/867550 (สร้างโดย Fletcher Nichol)

ข้อความที่ตัดตอนมา:

คู่มือวิธี (น่าเบื่อ)

ดาวน์โหลดcacert.pemไฟล์จากhttp://curl.haxx.se/ca/cacert.pem C:\RailsInstaller\cacert.pemบันทึกไฟล์นี้

SSL_CERT_FILEตอนนี้ทำให้ทับทิมตระหนักถึงกำอำนาจใบรับรองของคุณโดยการตั้งค่า หากต้องการตั้งค่านี้ในเซสชันพรอมต์คำสั่งปัจจุบันของคุณให้พิมพ์:

set SSL_CERT_FILE=C:\RailsInstaller\cacert.pem

นี้เพื่อให้การตั้งค่าถาวรเพิ่มนี้ไว้ในแผงควบคุม


6
ขอบคุณ. มันมีประโยชน์มากและง่ายมาก
John

ทางออกข้างต้นไม่ได้ช่วยฉัน นี่คือคำแนะนำที่ดีกว่าสำหรับ Windows: stackoverflow.com/questions/5720484/…
Sprachprofi

@Sprachprofi โซลูชันที่คุณเชื่อมโยงจะใช้ได้กับโครงการ 1 รางต่อครั้งเท่านั้น (เนื่องจากคุณชี้ไปยังใบรับรองนั้นโดยตรง) ส่วนสำคัญที่ฉันเชื่อมโยงกับ (สร้างโดย Fletcher Nichol) จะช่วยให้ครอบคลุมทุกโครงการ / อัญมณีที่กำลังมองหาใบรับรอง
ryanjones

31

Ruby ไม่พบใบรับรองรูทใด ๆ ที่จะเชื่อถือได้

ดูโพสต์บล็อกนี้เพื่อดูวิธีแก้ไข: " Ruby 1.9 และข้อผิดพลาด SSL "

วิธีแก้ปัญหาคือการติดตั้งcurl-ca-bundleพอร์ตซึ่งมีใบรับรองหลักเดียวกับที่ใช้โดย Firefox:

sudo port install curl-ca-bundle

และบอกhttpsวัตถุของคุณเพื่อใช้:

https.ca_file = '/opt/local/share/curl/curl-ca-bundle.crt'

หมายเหตุว่าถ้าคุณต้องการรหัสของคุณเพื่อวิ่งบน Ubuntu คุณจะต้องตั้งค่าแอตทริบิวต์แทนด้วยการตั้งค่าเริ่มต้นใบรับรองca_path/etc/ssl/certs


8
สิ่งนี้ดูเหมือนว่าจะเกิดขึ้นบน Windows เช่นกันซึ่งในกรณีนี้วิธีแก้ปัญหาที่แนะนำไม่สามารถใช้งานได้
Bob Aman

24

สาเหตุที่คุณได้รับข้อผิดพลาดนี้บน OSX คือ ruby ​​ที่ติดตั้ง rvm

หากคุณพบปัญหานี้ใน OSX คุณสามารถหาคำอธิบายที่กว้างมากในโพสต์บล็อกนี้:

http://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html

เวอร์ชันย่อคือสำหรับ Ruby บางเวอร์ชัน RVM จะดาวน์โหลดไบนารีที่รวบรวมไว้ล่วงหน้าซึ่งค้นหาใบรับรองในตำแหน่งที่ไม่ถูกต้อง ด้วยการบังคับให้ RVM ดาวน์โหลดแหล่งที่มาและรวบรวมในเครื่องของคุณเองคุณมั่นใจได้ว่าการกำหนดค่าสำหรับตำแหน่งใบรับรองถูกต้อง

คำสั่งที่ต้องทำคือ:

rvm install 2.2.0 --disable-binary

หากคุณมีเวอร์ชันที่เป็นปัญหาอยู่แล้วคุณสามารถติดตั้งซ้ำได้ด้วย:

rvm reinstall 2.2.0 --disable-binary

(ชัดแทนรุ่นทับทิมของคุณตามต้องการ)


สิ่งนี้ใช้ได้สำหรับฉัน โพสต์บล็อกที่คุณกำลังชี้ไปยังมีประโยชน์ด้วย
Cristian

2
สิ่งนี้ใช้ได้กับฉันใน El Capitan ฉัน imploded rvm (rvm implode) ติดตั้งอีกครั้งด้วย\curl -sSL https://get.rvm.io | bash -s stable --autolibs=homebrewแล้วrvm install <ruby-version> --disable-binary ถึงจุดหนึ่งฉันก็ทำrvm get headเช่นนี้เพราะบางประเด็นเลือดออก
rylanb

เฉพาะการแก้ปัญหานี้ทำงานสำหรับฉันเพราะเดิมผมมีทับทิม 2.0.0 ใน El Capitan SSL_CERT_FILEและด้วยเหตุผลบางอย่างที่รุ่นเก่าไม่ได้ทำงานแม้จะมีที่ถูกต้อง หลังจากนั้นrvm install 2.2.0 --disable-binaryปัญหาก็เรียงลำดับ
laimison

20

ปัญหาคือทับทิมไม่สามารถหาใบรับรองหลักที่เชื่อถือได้ ตั้งแต่ 1.9 ruby ​​ตรวจสอบสิ่งนี้ คุณจะต้องตรวจสอบให้แน่ใจว่าคุณมีใบรับรอง curl ในระบบของคุณในรูปแบบของไฟล์ pem คุณจะต้องตรวจสอบให้แน่ใจว่าใบรับรองอยู่ในตำแหน่งที่ทับทิมคาดว่าจะเป็น คุณสามารถรับใบรับรองนี้ได้ที่ ...

http://curl.haxx.se/ca/cacert.pem

หากผู้ใช้ RVM และ OSX ของคุณตำแหน่งไฟล์ใบรับรองของคุณจะแตกต่างกันไปตามรุ่นของทับทิมที่คุณใช้ การตั้งค่าพา ธ อย่างชัดเจนด้วย: ca_path เป็นแนวคิดที่ไม่ดีเนื่องจากรหัสของคุณจะไม่สามารถพกพาได้เมื่อได้รับการผลิต มีไว้สำหรับคุณที่จะให้ใบรับรองทับทิมในตำแหน่งเริ่มต้น (และสมมติว่าผู้พัฒนาของคุณรู้ว่าพวกเขากำลังทำอะไรอยู่) คุณสามารถใช้ dtruss เพื่อหาจุดที่ระบบค้นหาไฟล์ใบรับรอง

ในกรณีของฉันระบบค้นหาไฟล์ใบรับรองใน

/Users/stewart.matheson/.rvm/usr/ssl/cert.pem

อย่างไรก็ตามระบบ MACOSX จะคาดหวังใบรับรอง

/System/Library/OpenSSL/cert.pem

ฉันคัดลอกใบรับรองที่ดาวน์โหลดไปยังเส้นทางนี้และใช้งานได้ HTH


2
สำหรับฉันบน Ubuntu 12.04 เส้นทางใบรับรองที่ใช้ได้คือ~/.rvm/usr/ssl/cert.pem
Nazar Hussain

คุณใช้ dtruss อย่างไรเพื่อดูว่าระบบค้นหาใบรับรองอย่างไร
pingu

@pingu ไม่สามารถจำคำสั่งที่แน่นอนโดยทั่วไปคุณเรียกใช้ druss และคุณบอกให้เรียกใช้กระบวนการ ruby ​​ที่คุณต้องการให้ "ตรวจสอบ" มันส่งออกเป็น verbose มาก แต่โดยทั่วไปคุณจะสามารถเห็นแต่ละระบบเรียกทับทิมกำลังทำ หนึ่งในการเรียกจะเป็นการเรียกอ่านไฟล์ซึ่งจะชี้ไปยังไฟล์ที่ไม่มีอยู่ ย้ายใบรับรองที่นี่หรือสร้างลิงค์และคุณควรจะไป
Stewart

ทับทิมไม่ควรที่จะมองหาcacert.pemใน OS X ได้ OS X cacert.pemไม่ได้ใช้ ใบรับรองระบบและผู้ใช้จะถูกเก็บไว้ใน KeyChain Ruby ควรทำงานร่วมกับ
KeyChain

วิธีที่ดีที่สุดในการทำเช่นนี้คืออะไร? คุณสามารถโพสต์ตัวอย่างได้ไหม?
สจ๊วต

19

อัญมณีที่ผ่านการรับรองใหม่ได้รับการออกแบบเพื่อแก้ไขปัญหานี้:

https://github.com/stevegraham/certified


ใช้งานได้กับทับทิม 2.0.0p481 (2014-05-08) [i386-mingw32]
Evmorov

1
ไม่ทำงานกับฉันด้วย Rails 4.1.9, ruby-2.1.5 ฉันเพิ่มไปยัง Gemfile, bundleเพิ่มอย่างชัดเจนrequire "certified"เพื่อให้แน่ใจและไม่มีอะไรเปลี่ยนแปลง ฉันพลาดอะไรไป
Isaac Betesh

ทับทิมไม่ควรที่จะมองหาcacert.pemใน OS X ได้ OS X cacert.pemไม่ได้ใช้ ใบรับรองระบบและผู้ใช้จะถูกเก็บไว้ใน KeyChain ทับทิมควรจะบูรณาการกับพวงกุญแจบน OS X ได้ OpenSSL ได้ไม่cacert.pemกระจาย มันไม่ชัดเจนสำหรับฉันว่าทำไมซอฟต์แวร์ใด ๆ จะเลื่อนไปเป็น OpenSSL
jww

18

เพียงเพิ่ม gem 'ที่ได้รับการรับรอง' ใน gemfile ของคุณและเรียกใช้การติดตั้งชุดข้อมูล

  1. อัญมณี ' ได้รับการรับรอง '
  2. กำติดตั้ง

ยืนยันว่าสิ่งนี้ช่วยใน El Capitan ขอบคุณ!
mcmlxxxiii

มันทำงานได้อย่างสมบูรณ์แบบกับ Rails และ Debian :) ขอบคุณมาก ๆ !
Szymon Rut

17

บน Mac OS X Lion ด้วย macport ล่าสุด:

sudo port install curl-ca-bundle  
export SSL_CERT_FILE=/opt/local/share/curl/curl-ca-bundle.crt  

จากนั้นรันงานที่ล้มเหลวอีกครั้ง

หมายเหตุตำแหน่งไฟล์ใบรับรองดูเหมือนจะเปลี่ยนไปตั้งแต่ Eric G ตอบเมื่อวันที่ 12 พฤษภาคม


หลังจากการค้นหาทั้งหมดและความพยายามมากมายนี่เป็นสิ่งเดียวที่แก้ไขปัญหาได้ ขอบคุณ!
shawnwall

1
เจ๋งที่แก้ไข แต่ตราบใดที่ openssl ติดตั้งด้วย homebrew คุณต้องเพิ่มexport SSL_CERT_FILE=/usr/local/etc/openssl/cacert.pemไฟล์.
profile

14

ซับหนึ่งแก้ไขสำหรับ Windows ในพรอมต์ผู้ดูแลระบบ

choco install wget(ดูครั้งแรกที่chocolatey.org )

wget http://curl.haxx.se/ca/cacert.pem -O C:\cacert.pem && setx /M SSL_CERT_FILE "C:\cacert.pem"

หรือทำสิ่งนี้

gem sources -r https://rubygems.org/
gem sources -a http://rubygems.org/

วิธีการของ Milanio:

gem sources -r https://rubygems.org
gem sources -a http://rubygems.org 
gem update --system
gem sources -r http://rubygems.org
gem sources -a https://rubygems.org

gem install [NAME_OF_GEM]

1
การปรับปรุงเล็กน้อย - คุณเพียงแค่ต้องอัปเดตทับทิมและจากนั้นคุณสามารถเพิ่มแหล่งที่มาของ https กลับมาได้ - สิ่งนี้เหมาะกับฉันเหมือนเครื่องราง: แหล่งที่มาของอัญมณี - r rubygems.org => แหล่งที่มาของอัญมณี - a rubygems.org => ปรับปรุงอัญมณี --system => แหล่งที่มาของอัญมณี -r rubygems.org => แหล่งที่มาของอัญมณี -a rubygems.org => ติดตั้ง gem [NAME_OF_GEM]
milanio

13

มันทำงานได้ดีสำหรับฉัน

rvm pkg install openssl
rvm reinstall 1.9.2 --with-openssl-dir=$rvm_path/usr

มีบางอย่างผิดปกติกับการใช้ openssl ของ ubuntu 12.04 ของฉัน


3
งานนี้ แต่ผมต้องจบด้วยนี้ curl -O http://curl.haxx.se/ca/cacert.pem, mv cacert.pem cert.pem,mv cert.pem $rvm_path/usr/ssl
Raf

ทำงานให้ฉัน Mac OS X Yosemite ขอบคุณ!
anevaude

12

ในขณะที่รู้ว่ามันเป็นวิธีการแก้ปัญหาที่อ่อนแอฉันยังคงแบ่งปันสิ่งนี้เพราะดูเหมือนว่ามีคนเพียงไม่กี่คนที่ตอบรับที่นี่ใช้Windowsและฉันคิดว่าผู้ใช้ Windows บางคน (รวมอยู่ด้วย) จะขอบคุณวิธีการที่ง่ายและใช้งานง่าย

require 'openssl'
puts OpenSSL::X509::DEFAULT_CERT_FILE

ที่บอกว่า openssl ของคุณกำลังค้นหาไฟล์ใบรับรองอยู่ที่ไหน ชื่อของฉันคือไม่ได้หลุยส์ C:/Users/Luis/Code/luislavena/knap-build/var/knapsack/software/x86-windows/openssl/1.0.0l/ssl/cert.pemแต่เหมือง เส้นทางอาจแตกต่างกันไปขึ้นอยู่กับแต่ละสภาพแวดล้อม (เช่นopenknapsackแทนluislavena)

เส้นทางไม่เปลี่ยนแปลงแม้หลังจากset SSL_CERT_FILE=C:\foo\bar\baz\cert.pemผ่านคอนโซลดังนั้น ... ฉันสร้างไดเรกทอรี C:\Users\Luis\Code\luislavena\knap-build\var\knapsack\software\x86-windows\openssl\1.0.0l\sslในดิสก์ภายในเครื่องและใส่ไฟล์ใบรับรองลงไป

ขาเป็นมันจะทำงานแน่นอน


2
สุกใส Hacky แต่นี่เป็นสิ่งเดียวที่แก้ปัญหาของฉันได้
Daniel Magliola

วิธีการดีบั๊ก ... สำหรับฉันผู้ใช้คือ "Justin" Googling แสดงว่านี่เป็นปัญหาที่ทราบกันดีของ RubyInstaller แต่น่าเสียดายที่การสร้างว่าไดเรกทอรี (ไฟล์ pem +) ตัวเองไม่ได้แก้ปัญหาสำหรับฉัน
Wouter

12

ฉันได้ลองติดตั้งcurl-ca-bundleด้วยbrewแต่แพคเกจไม่มากที่มี:

$ brew install curl-ca-bundle
Error: No available formula for curl-ca-bundle 
Searching formulae...
Searching taps...

โซลูชันที่ทำงานกับฉันบน Mac คือ:

 $ cd /usr/local/etc/openssl/certs/
 $ sudo curl -O http://curl.haxx.se/ca/cacert.pem

เพิ่มบรรทัดนี้ในของคุณ~/.bash_profile(หรือ~/.zshrcสำหรับ zsh):

export SSL_CERT_FILE=/usr/local/etc/openssl/certs/cacert.pem

จากนั้นอัปเดตเครื่องของคุณ:

$ source ~/.bash_profile

1
สิ่งนี้ใช้ได้สำหรับฉัน - แต่เส้นทางผิด ควรเป็น:export SSL_CERT_FILE=/usr/local/etc/openssl/certs/cacert.pem
dnlmzw

2
นี่เป็นทางออกที่ดีเพราะความเรียบง่าย นอกจากนี้ด้วยการอ้างอิงใบรับรองที่เพิ่มเข้ามา~/.bash_profileมันทำให้เครื่องเตือนความจำว่ามีการเพิ่มอะไรบ้าง (และเป็นจุดที่สำคัญมาก) เมื่อต้องการการอัปเดตเพิ่มเติม
auxbuss

สิ่งนี้ใช้ได้สำหรับฉัน @dnlmzw เส้นทางนั้นใช้ได้สำหรับฉัน แต่แน่นอนว่าสิ่งนี้ขึ้นอยู่กับการตั้งค่าของคุณ ขอบคุณ!
theartofbeing

ไม่ทำงานสำหรับฉันเมื่อพยายามเพิ่ม URL เซิร์ฟเวอร์อัญมณีส่วนตัวที่ใช้ใบรับรองที่ลงนามเองในแหล่งอัญมณีของฉัน OSX 10.11.6 + rbenv
sixty4bit

12

นี่คือตัวเลือกอื่นสำหรับการแก้ไขจุดบกพร่อง

โปรดอย่าใช้สิ่งนี้ในสภาพแวดล้อมการผลิตใด ๆ เนื่องจากจะลบล้างประโยชน์ของการใช้ SSL ตั้งแต่แรก เป็นสิ่งที่ถูกต้องที่จะทำสิ่งนี้ในสภาพแวดล้อมการพัฒนาท้องถิ่นของคุณ

require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

26
Downvoted: ใช่มันใช้งานได้ แต่อุปสรรคในการติดตั้งชุด CA ที่ถูกต้องและการแก้ปัญหาจริงนั้นต่ำมากจนวิธีแก้ปัญหาเช่นนี้ซึ่งวิธีการรักษาความปลอดภัย SSL ที่ใกล้จะทำให้การรักษาความปลอดภัยของ SSL นั้นไม่สมบูรณ์ อยู่ในสภาพแวดล้อมที่ผู้ให้บริการออกใบรับรองไม่สามารถเข้าถึงได้อย่างสมบูรณ์ (และถึงตอนนั้นคุณควรสร้าง CA ท้องถิ่นที่สามารถเข้าถึงจุดปลายทั้งสองได้)
yaauie

10
ไม่ได้อยู่ใกล้การลบการป้องกัน SSL อย่างสมบูรณ์ แต่จะลบออกอย่างสมบูรณ์ อย่าทำอย่างนี้
drbrain

15
สำหรับการดีบั๊กมันเพียงพอแล้ว
rickyduck

1
สิ่งนี้สร้างคำเตือนในขณะนี้ใน 1.9
อีวาน

2
นี่เป็นทางออกที่ไม่ดีสำหรับการผลิตผ่านทางอินเทอร์เน็ตจริง แต่ก็ไม่เป็นความจริงที่ว่า "คุณอาจไม่ได้ใช้ SSL เลย" ทราฟฟิกที่เข้ารหัสผ่านสายจะดีกว่าทราฟฟิกที่ชัดเจน ใช่คุณมีความเป็นไปได้ของการโจมตีแบบคนกลาง แต่อย่างน้อยก็ยากที่จะลุกขึ้นยืนกว่าการดักฟังบนการจราจรที่ธรรมดาที่สุดเท่าที่มันจะลื่นไหล
Mark Reed

10

ฉันมีปัญหาเดียวกันนี้ในขณะที่ทำงานในโครงการทับทิม ฉันใช้ Windows 7 64 บิต

ฉันแก้ไขปัญหานี้โดย:

  1. ดาวน์โหลดcacert.pemไฟล์จากhttp://curl.haxx.se/ca/cacert.pem
  2. บันทึกไฟล์นั้นไปที่C: /RubyCertificates/cacert.pem
  3. จากนั้นตั้งค่าตัวแปรสภาพแวดล้อมของฉัน "SSL_CERT_FILE" เป็น "C: \ RubyCertificates \ cacert.pem"

แหล่งที่มา: https://gist.github.com/fnichol/867550


เนื่องจากเป็น Windows จึงควรใช้ backslahes ในค่าของตัวแปรสภาพแวดล้อม
Christian Baumann

นี้เป็นเพียงการแก้ปัญหาที่ทำงานเพื่อแก้ไข "กำ" สำหรับผมหลังจากแก้ไข RubyGems SSL ข้อผิดพลาด
DonBecker

7

คำตอบที่ตรงไปตรงมาที่สุดสำหรับฉันคือสิ่งนี้

sudo apt-get install openssl ca-certificates

และ voila !!!


1
หวังว่าฉันจะได้คะแนนมากกว่าหนึ่งครั้งเพราะคุณแค่ช่วยฉันเวลามาก!
สตีเฟ่น

1
@ สตีเฟ่น - ฉันหวังว่าคุณจะทำได้เช่นกัน :-) มันช่วยประหยัดเวลาได้มากดังนั้นฉันคิดว่าฉันโพสต์ไว้ที่นี่และอาจช่วยคนอื่น
Pratik Bothra

7

OS X 10.8.x พร้อม Homebrew:

brew install curl-ca-bundle
brew list curl-ca-bundle
cp /usr/local/Cellar/curl-ca-bundle/1.87/share/ca-bundle.crt /usr/local/etc/openssl/cert.pem

1
ได้ผลสำหรับฉันในวันที่ 10.9 เช่นกัน
Sami Samhuri

1
ตกลงสำหรับฉัน OS X 10.9.1 ! น่ากลัว
rogeriopradoj

มีบางอย่างแตกหักอย่างรุนแรงเมื่อคุณต้องหาวิธีแก้ปัญหาแบบสุ่มเพื่อแก้ไขปัญหาโง่ ๆ เหล่านี้ คำตอบทั้งหมดเหล่านี้ทำสิ่งที่แตกต่างอย่างสิ้นเชิงและทุกคนดูเหมือนจะช่วยคนในบางจุด WTF?
sergserg

13
curl-ca-bundle ถูก revmoved จาก brew
Fa11enAngel


4

สิ่งนี้ใช้ได้สำหรับฉัน หากคุณใช้ rvm และก่อ:

rvm remove 1.9.3
brew install openssl
rvm install 1.9.3 --with-openssl-dir=`brew --prefix openssl`

4

ฉันพบปัญหานี้และการแก้ไขที่แนะนำrvm osx-ssl-certs update allไม่ทำงานแม้ว่าฉันจะเป็นผู้ใช้ RVM บน OSX

การแก้ไขที่ใช้งานได้สำหรับฉันคือการติดตั้ง openssl เวอร์ชันล่าสุดอีกครั้ง:

brew update
brew remove openssl
brew install openssl


3

โซลูชัน OSX:

ติดตั้งเวอร์ชันเสถียร rvm ล่าสุด

rvm get stable

ใช้คำสั่ง rvm เพื่อแก้ปัญหาใบรับรองโดยอัตโนมัติ

rvm osx-ssl-certs update all

1
ฉันลองสิ่งนี้และมันก็ไม่ได้ผลสำหรับฉัน นี่คือวิธีแก้ปัญหาของฉัน: stackoverflow.com/a/16741712/62
Liron Yahdav

ทำงานให้ฉันหลังจากติดตั้ง Ruby 2.0.0 ผ่าน RVM
Chris Peters

3

หากคุณใช้งานแอพพลิเคชั่นรางของคุณอยู่ภายในเครื่องให้เพิ่มบรรทัดนี้ที่ด้านล่างของ application.rb

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

หลังจากนี้คุณสามารถใช้แอพได้โดยไม่มีปัญหาใด ๆ คุณอาจเรียกว่าแฮ็ค แต่ไม่แนะนำ ใช้เฉพาะเมื่อคุณต้องการเรียกใช้ภายในเครื่อง


2

นี่คือสิ่งที่ฉันได้ทำไปหากคุณมีปัญหากับ Leopard โดยเฉพาะ

ใบรับรองของฉันเก่าและจำเป็นต้องได้รับการปรับปรุง ฉันดาวน์โหลดสิ่งนี้:

http://curl.haxx.se/ca/cacert.pem

จากนั้นแทนที่ใบรับรองของฉันซึ่งพบที่นี่ใน Leopard:

/usr/share/curl/curl-ca-bundle.crt

โหลดสิ่งที่คุณมีที่เข้าถึงและคุณควรจะไป!


2

เพียงเพราะคำแนะนำแตกต่างกันเล็กน้อยสำหรับสิ่งที่เหมาะกับฉันฉันคิดว่าฉันเพิ่ม 2 เซนต์ของฉัน:

ฉันใช้ OS X Lion และใช้ macports และ rvm

ฉันติดตั้ง curl-ca-bundle:

sudo port install curl-ca-bundle

จากนั้นฉันปรับการตั้งค่า omniauth เป็น:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2, APP_CONFIG['CONSUMER_KEY'], APP_CONFIG['CONSUMER_SECRET'],
           :scope => 'https://www.google.com/m8/feeds https://www.googleapis.com/auth/userinfo.profile',
           :ssl => {:ca_path => "/share/curl/curl-ca-bundle.crt"}
end

คุณสามารถ (และควรอาจ) ละเลย CA สวนสัตว์ทั้งหมด ( ca-bundle.crt) และใช้Google อินเทอร์เน็ต Authority G2:ssl => {:ca_path => "/share/curl/curl-ca-bundle.crt"}ใน นั่นเป็นเพียงสิ่งเดียวที่จำเป็นในการรับรองการเชื่อมต่อกับ Google
jww

2

หากคุณมีลิงก์สัญลักษณ์ใน / usr / local / etc / openssl ที่ชี้ไปที่ cert.pem ให้ลองทำดังนี้

ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE" (should be /usr/local/etc/openssl)
cd /usr/local/etc/openssl
wget http://curl.haxx.se/ca/cacert.pem
ln -s cacert.pem 77ee3751.0 (77ee3751.0 is my symbolic link, should depend on the openssl version)

2

สิ่งที่ได้ผลสำหรับฉันคือการรวมกันของคำตอบคือ:

# Reinstall OpenSSL
brew update
brew remove openssl
brew install openssl
# Download CURL CA bundle
cd /usr/local/etc/openssl/certs
wget http://curl.haxx.se/ca/cacert.pem
/usr/local/opt/openssl/bin/c_rehash
# Reinstall Ruby from source
rvm reinstall 2.2.3 --disable-binary

1

ฉันมีปัญหาเป็นเวลาหลายวันและถูกแฮ็คไปรอบ ๆ ลิงค์นี้พิสูจน์แล้วว่าเป็นประโยชน์อย่างยิ่งสำหรับฉัน มันช่วยให้ฉันทำการอัพเกรด SSL บน MAC OS X 9 ได้สำเร็จ


1

บางครั้งมันไม่ใช่ปัญหาของ rvm ใน MAC OSX หากคุณลบ. rvm ปัญหายังคง (โดยเฉพาะในขณะที่คุณสำรองข้อมูลจาก timemachine) คุณสามารถลองด้วยวิธีนี้

1.brew update
2.brew install openssl

1

การเพิ่มgem 'certified', '~> 1.0'ของฉันGemfileและการทำงานbundleแก้ไขปัญหานี้สำหรับฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.