สำหรับใครที่ใช้คำสั่ง bundle install ใน Ruby แล้วเจอ Error เกี่ยวกับ SSL certificate แบบนี้ จะแก้ยังไงดี มาอ่านบทความนี้แล้วทำตามได้เลยจ้า
ตัวอย่าง error ที่หลายๆคนจะเจอก็เป็นแบบนี้
C:\Bitnami\redmine\apps\redmine\htdocs\plugins>bundle install 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`. Fetching source index from https://rubygems.org/ Retrying source fetch due to error (2/3): Bundler::Fetcher::CertificateFailureError Could not verify the SSL certificate for https://rubygems.org/. 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 bit.ly/ruby-ssl. To connect without using SSL, edit your Gemfile sources and change 'https' to 'http'. Retrying source fetch due to error (3/3): Bundler::Fetcher::CertificateFailureError Could not verify the SSL certificate for https://rubygems.org/. 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 bit.ly/ruby-ssl. To connect without using SSL, edit your Gemfile sources and change 'https' to 'http'. Could not verify the SSL certificate for https://rubygems.org/. 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 bit.ly/ruby-ssl. To connect without using SSL, edit your Gemfile sources and change 'https' to 'http'.
ทำไม เนื่องจากเจ้า Ruby ในส่วนของ net/http library นั้นไม่ได้ทำการตรวจสอบ SSL certificate ในระหว่าง TLS handshake
วิธีแก้ไข ก็คือเราจะทำการเอา certificate ที่ตรวจสอบแล้วจากเว็บของ curl มาใช้แทน
โดยก่อนอื่นให้ทำการติดตั้ง RailsInstaller สำหรับใครที่ติดตั้งแล้วก็ข้ามขั้นตอนนี้ไปได้เลย
http://railsinstaller.org/en
หลังจากติดตั้งเสร็จแล้ว เราก็มา Download เจ้า cacert.pem จาก curl website http://curl.haxx.se/ca/ แล้วเราก็เอาไฟล์ cacert.pem ไปวางไว้ที่ C:\RailsInstaller\cacert.pem
เสร็จแล้วก็เรียกคำสั่ง
set SSL_CERT_FILE=C:\RailsInstaller\cacert.pem
C:\Bitnami\redmine\apps\redmine\htdocs\plugins>set SSL_CERT_FILE=C:\RailsInstaller\cacert.pem
หลังจากนั้นลองใช้คำสั่ง bundle install ดู ก็จะไม่พบปัญหา Error อีกแล้วดังตัวอย่าง ด้านล่าง ก็เป็นอันจบพิธีสำหรับการแก้ไขปัญหา SSL certificate ของ ruby
ตัวอย่าง bundle install หลังจากลง certificate แล้ว ก็จะลงได้ปกติ
C:\Bitnami\redmine\apps\redmine\htdocs\plugins>bundle install 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`. Fetching gem metadata from https://rubygems.org/.............. Fetching version metadata from https://rubygems.org/... Fetching dependency metadata from https://rubygems.org/.. Resolving dependencies..... Using rake 10.4.2 ... Using thin 1.6.1 Using tzinfo-data 1.2015.1 Updating files in vendor/cache * liquid-2.6.3.gem * rubyzip-1.1.7.gem * redmine_crm-0.0.53.gem Bundle complete! 32 Gemfile dependencies, 56 gems now installed. Gems in the groups development, test and RAILS_ENV=production were not installed. Use `bundle show [gemname]` to see where a bundled gem is installed.
ข้อมูลอ้างอิงจาก
https://gist.github.com/fnichol/867550