作为一个版本控,总是希望保持电脑中各种软件到最新版本。

最近通过 brew 升级 OpenSSL 和 ruby-build 到最新,尤其是 ruby-build 支持最新的 Ruby 2.2.1,新版 Ruby 中针对 Symobl GC 的改进很让人期待,升级步骤略暴力,采用自毁重装的方式:

rm -rf ~/.rbenv
rbenv install 2.2.1
rbenv global 2.2.1

升级后发现所有的 ssl 的请求,都会报告证书验证错误,具体错误信息如下:

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

暂时的解决方案,bypass 掉 SSL 的证书验证步骤,在 Rails 的 initalizers 中增加一个文件 bypass_ssl_verification.rb,只一行代码:

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

不过 bypass 证书验证步骤只是权宜之计,在本地开发倒是无所谓,生产环境下必须不能这么干!因为如果不验证证书的话,其实是留下了安全隐患。造成证书验证错误问题的原因可能有三种:

  1. 通过 brew 升级 OpenSSL 的过程中,证书文件出了问题,损坏或者未正确安装。
  2. 证书正常安装,但是路径不匹配。
  3. 安装包中附带的证书文件过期了。

首先检查证书不存在或者路径不对,brew 安装的 openssl 会把证书位置存放在这里:

/usr/local/etc/openssl/cert.pem

Ruby 运行环境中的 OpenSSL 的默认证书位置:

ruby -e "require 'openssl'; puts OpenSSL::X509::DEFAULT_CERT_FILE"

检查后发现 Ruby 运行环境中的结果跟 brew 安装的 OpenSSL 证书的位置完全对得上,且证书文件存在,说明不是证书丢失或者路径问题,最大的可能是证书过期了。

如果之前没有通过 brew 安装过 openssl 的话,ruby-build 会在编译 Ruby 的过程中自动下载并编译一份 openssl 到 ~/.rbenv 目录下,但是我亲测下来 ruby-build 自带的 openssl 也会产生同样的错误,所以最后还是决定保留 brew 安装的 openssl 版本,然后手动下载更新 ca root 证书的方式解决问题:

wget -c http://curl.haxx.se/ca/cacert.pem
mv cacert.pem /usr/local/etc/openssl/cert.pem

检查了一下,在 cert.pem 的头部有证书生成时间,是2015年2月25日,还算蛮新的。

##
## Bundle of CA Root Certificates
##
## Certificate data from Mozilla as of: Wed Feb 25 04:12:04 2015
##

Ruby 和 OpenSSL CA 证书的问题的更多相关文章

  1. openssl CA 自签证书,阿里云配置tomcat https

    <一,openssl CA自签发证书> 1,生成私钥 openssl genrsa 1024 > private.key;

  2. 用openssl为WEB服务器生成证书(自签名CA证书,服务器证书)

    用openssl为WEB服务器生成证书(自签名CA证书,服务器证书) 来源: https://www.cnblogs.com/osnosn/p/10608455.html 来自osnosn的博客 写于 ...

  3. 用openssl为EAP-TLS生成证书(CA证书,服务器证书,用户证书)

    用openssl为EAP-TLS生成证书(CA证书,服务器证书,用户证书) 来源: https://www.cnblogs.com/osnosn/p/10597897.html 来自osnosn的博客 ...

  4. 使用openssl模拟CA和CA证书的签发

    使用openssl模拟CA和CA证书的签发     当使用ssl/tls进行加密通信时,必须要有数字证书.若通信只限制在局域网内,可以不向第三方机构申请签发证书,可以通过openssl模拟CA(Cer ...

  5. OpenSSL生成CA证书及终端用户证书

    环境 OpenSSL 1.0.2k FireFox 60.0 64位 Chrome 66.0.3359.181 (正式版本)(32位) Internet Explorer 11.2248.14393. ...

  6. Https、OpenSSL自建CA证书及签发证书、nginx单向认证、双向认证及使用Java访问

    0.环境 本文的相关源码位于 https://github.com/dreamingodd/CA-generation-demo 必须安装nginx,必须安装openssl,(用apt-get upd ...

  7. linux下使用openssl生成 csr crt CA证书

    证书文件生成:一.服务器端1.生成服务器端    私钥(key文件);openssl genrsa -des3 -out server.key 1024运行时会提示输入密码,此密码用于加密key文件( ...

  8. 对称、非对称加密算,openssl生成证书(笔记)

    对称加密算法 1.密钥只有一个,加密和解密都需要同一个密钥2.DES,IDEA,AES3.明文+密钥=密文, 密文+密钥=明文4.加密速度快,系统开销小,适用大量数据的加密 非对称加密算法1.密钥由公 ...

  9. ca证书校验用户证书

    openssl verify -CAfile ca.cer server.crt 现在很多网站和服务都使用了HTTPS进行链路加密.防止信息在传输中间节点被窃听和篡改.HTTPS的启用都需要一个CA证 ...

随机推荐

  1. java基础之日期时间工具类

    package zy.test; import java.sql.Timestamp; import java.text.ParseException; import java.text.ParseP ...

  2. java求最长公共子串的长度

    1这道题目就是给定两个字符串,然后求这两个字符串的最长公共子串的最大长度,假设我的f()方法是来求两个字符串的最大公共子串,从头开始逐一比较,如果相等,则 继续调用这个方法,使得递归的长度+1,如果不 ...

  3. NavigationController.viewControllers

      NSMutableArray *viewControllersArray = [NSMutableArray new];    // 获取当前控制器数组    for (CardLoanBaseT ...

  4. Windows 安装 Maven 及 Eclipse 安装Maven插件

    环境说明: window 8.1 64bit Eclipse Version: Luna Release (4.4.0) Maven 3.0.5 Windows Maven 安装: 1.确保安装了JD ...

  5. Java多线程—JUC原子类

    根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类. 1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;2. 数组类型: AtomicIn ...

  6. hibernate的hibernate.cfg.properties

    1.hibernate.cfg.properties  配置文件要放在工程目录src下,编译的时候会自动放在/bin目录下 ,所以Configuration configuration=new Con ...

  7. 实践作业4:Web测试实践(小组作业)每日任务记录1

    会议时间:2017年12月21日会议地点:东九教学楼自习区主 持 人:王晨懿参会人员:王晨懿.余晨晨.郑锦波.杨潇.侯欢.汪元记 录 人:王晨懿会议议题:小组作业熟悉和任务分配 (一)选择待测产品 我 ...

  8. 对JS中函数的理解

    函数本质就是功能的集合 JS中函数是对象,因此,函数名实际上仅仅是一个指向函数对象的指针,不会与某个函数绑定,所以,JS中没有重载(重载就是通过传递不同类型的参数,使两个相同函数名的函数执行不同的功能 ...

  9. 【转载】实战mysql分区(PARTITION)

    转载地址:http://lobert.iteye.com/blog/1955841 前些天拿到一个表,将近有4000w数据,没有任何索引,主键.(建这表的绝对是个人才) 这是一个日志表,记录了游戏中物 ...

  10. UVALive 7752 Free Figurines (瞎搞)

    题意:给定 n 个盒子,然后告诉你每个盒子在哪个盒子里,数值越大,盒子越大,给定你初态,和末态,问你最少要几步能完成,只有两种操作,一种是把一个盒子连同里面的小盒子放到一个空盒子里,另一种是把一个堆盒 ...