shiro_usagi
@shiro_usagi (shiro usagi)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

質問 ruby OpenSSL::X509::DEFAULT_CERT_FILEを上書きする方法は?(解決済)

2020年08月13日 初稿
2020年08月13日19:33 追記
2020年08月14日 解決

macosx ruby 2.5.8 openssl1.1.1g

質問1

EC2上のログをtd-agent使ってCloudWatch Logsに投げようとしたらSSL認証エラーになった話 - Alligator Swamp
https://alligatorswamp.hatenablog.com/entry/2015/04/21/163234

上記URLを参考にOpenSSL::X509::DEFAULT_CERT_FILEを書き換え挑戦したが出来なかった。
どうすればいいでしょうか?
/usr/local/stow/ruby-258以下にインストールしていますが、
どこのファイルが書き変わるのか分かっていません。

試したこと

ssl $ pwd
/usr/local/stow/openssl-111g/ssl
ssl $ ls cacert.pem
cacert.pem
ssl $ ruby -r openssl -e 'p OpenSSL::X509::DEFAULT_CERT_FILE_ENV'
"SSL_CERT_FILE"
ssl $ export SSL_CERT_FILE=/usr/local/stow/openssl-111g/ssl/cacert.pem
ssl $ echo $SSL_CERT_FILE
/usr/local/stow/openssl-111g/ssl/cacert.pem
ssl $ ruby -r openssl -e 'p OpenSSL::X509::DEFAULT_CERT_FILE'
"/usr/local/stow/openssl-111g/ssl/cert.pem"
ssl $

以下は全て2020年08月13日(木)19:33追記
●その後の調査

(2016.02)
あのう・・な毎日:Win8+Ruby2.0で SSLのルート証明書の設定・・・諦めた・・・とおもいきや回避! → ・Rubyによるクローラー開発技法
http://anou365.blog.fc2.com/blog-entry-52.html

(2012年12月)
[Ruby] デフォルトの CA 証明書ファイルを変更しても、証明書の検証に失敗する | mofu犬blog
http://mofuken.blogspot.com/2012/12/ruby-ca.html

(2013-05)
エラー:OpenSSL::SSL::SSLError SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed - #tech
https://komiyak.hatenablog.jp/entry/20130508/1367993536

(2015年10月)
RubyでHTTPS - Luvelcrak
https://mcrn.jp/blog/2015/10/28/205049.html

>"C:/Users/Justin
これには呆れた。

rubyのSSL周辺はメンテされてないのか?はっきり言って凄い馬鹿。どこまで馬鹿なのか?
rubyのSSL周辺のコードと作者には絶望しかない。ここまで酷いと期待は出来なさそう。諦めるしかないか。
私はWinでなくMacだけどrubyのSSL周辺には大きな問題が幾つもありそう。
ruby openssl curl rubygemのkindai.rbで苦労するのは当然の結果と言えるだろう。
更にhomebrewやrbenv入れたらぐちゃぐちゃになっても当然だろう。

とりあえず

https = Net::HTTP.new('mcrn.jp', 443)
https.open_timeout = SYSTEM_TIMEOUT_SEC
https.read_timeout = SYSTEM_TIMEOUT_SEC
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_PEER
https.verify_depth = 5
https.ca_file = "C:\\cacert.pem" #証明書を明示的に参照
https.start do
  response = https.get('/ret.cgi')
  puts response.body
end

rubyでSSL通信プログラムを私は自前作成してないが、
この記述が見つかっただけで良しとするしかないのか。

●今後

ruby作者に連絡するか諦めるか?前者の連絡する方法も相手も分かってない。というかこれ以上は関わりたくない。
SSL通信プログラムを作成するならば、rubyでなくPHPかpythonのほうがいいのだろう。

以上

コメントの回答にて解決済み
1,OpenSSL::X509::DEFAULT_CERT_FILE は書き換え出来ない、でOK。
2.ユーザー設定は、export SSL_CERT_FILE=〜 でOK。

0

1Answer

OpenSSL が実際にデフォルトで使う証明書ファイルは SSL_CERT_FILE 環境変数で変更できます。 OpenSSL::X509::DEFAULT_CERT_FILE は、 SSL_CERT_FILE 環境変数がセットされていなかった場合に読み込むべきファイルを指しています。この値は環境変数をセットしても変わりません。定数を上書きして無理矢理変えても読み込むファイルは変わらないと思われます。

もし OpenSSL::X509::DEFAULT_CERT_FILEの値をどうしても変えたい(そしてそのファイルから読み込みたい)なら、 openssl gem のビルド時にコンパイルオプションを与えればいいかもしれません。

1Like

Comments

  1. @shiro_usagi

    Questioner

    こちらでも丁寧なご回答を有り難う御座います。
    よく理解出来ました。

Your answer might help someone💌