筆者はcurlのエラーをしっかりと調べたことが無かった。
(kindai.rbが動けば良かったので)
以下のサイトが情報源になりそうだ。
libcurl - Error Codes
https://curl.haxx.se/libcurl/c/libcurl-errors.html
libcurl - curl_easy_getinfo()
https://curl.haxx.se/libcurl/c/curl_easy_getinfo.html
http — HTTPステータスコードを出力するようにcurlを取得する
https://www.it-swarm.dev/ja/http/http%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B%E3%82%88%E3%81%86%E3%81%ABcurl%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B/959479589/
参考
主なエラー?
一般的な Libcurl エラーとその意味
https://kc.mcafee.com/corporate/index?page=content&id=KB74939&actp=null&viewlocale=ja_JP&locale=ja_JP
参考
TLS/SSL handshake の失敗 | Apigee ドキュメント | Apigee Docs
https://docs.apigee.com/api-platform/troubleshoot/runtime/ssl-handshake-failures?hl=ja
curlの使い方。
グローバルIPをcurlで確認 - Qiita
https://qiita.com/kanpou0108/items/734b947f5a95109e7bb9
HTTPS通信の疎通確認に覚えておきたい3つのコマンド - Qiita
https://qiita.com/greymd/items/68b0c40044a88171235a
CAfileやCApathのエラーには出くわした。
curl — curl:(60)SSL証明書:ローカル発行者証明書を取得できません
https://www.it-swarm.dev/ja/curl/curl%EF%BC%9A%EF%BC%8860%EF%BC%89ssl%E8%A8%BC%E6%98%8E%E6%9B%B8%EF%BC%9A%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E7%99%BA%E8%A1%8C%E8%80%85%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%92%E5%8F%96%E5%BE%97%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93/1046757172/
参考
curlでSSLの証明書が正しいか確認する - うまいぼうぶろぐ
https://hogem.hatenablog.com/entry/20081230/1230629311
opensslとcurlでクライアント証明書を使ってHTTPS接続する - うまいぼうぶろぐ
https://hogem.hatenablog.com/entry/2015/09/28/233000
注意事項
ネットのあちこちで見かけたが「.curlrcに --insecure を追加し通信出来た」で解決したとする記事が多数にある。一時的な方法だと記載しているサイトは殆どなかった。問題だ。
macos — curlの修正方法:(60)SSL certificate:Invalid certificate chain
https://www.it-swarm.dev/ja/macos/curl%E3%81%AE%E4%BF%AE%E6%AD%A3%E6%96%B9%E6%B3%95%EF%BC%9A%EF%BC%8860%EF%BC%89ssl-certificate%EF%BC%9Ainvalid-certificate-chain/1042156511/
これで、curlとSSLは原因究明が出来るようになるのだろうか?
rbenvでtar.gzダウンロードが上手く行かなかった時にcurl -vでエイリアスして調べたかったが後の祭り。
2020-08-12追記
OpenSSL 1.0.1gのインストール手順 - サーバサイドWiki - Confluence
https://confluence.sharuru07.jp/pages/viewpage.action?pageId=360981
--shared
共有オブジェクトファイル(*.so)も作成する
no-shared 共有オブジェクトファイル(*.so)も作成しない
--prefix=/usr/local/ssl インストールするディレクトリ、defaultは「/usr/local/ssl」
--openssldir=/usr/local/ssl CA関連の各種ファイルのインストール先、defaultは「/usr/local/ssl」
no-threads マルチスレッドをサポートしない場合、指定する
threads マルチスレッドをサポートする場合、指定する
no-zlib zlibをサポートしない場合、指定する
zlib zlibを使用する場合、指定する
zlib-dynamic zlibを使用する場合、指定する・こちらは、zlibを動的にロードします
no-asm アセンブルコードを使用しない場合、指定する
386
386系CPUのコードにする、x86 64bitを指定する場合「-m32」を指定する
no-sse2 CPU拡張命令 SSE2をサポートしない場合、指定する
no-<cipher>
指定された暗号(bf, cast, des, dh, dsa, hmac, md2, md5, mdc2, rc2, rc4, rc5, rsa, sha)を削除することが可能です
ただし、make前に、「make depend」を行う必要があります
-Dxxx,
-lxxx,
-Lxxx,
-fxxx,
-mXXX,
-Kxxx
プリプロセッサシンボルを定義する
-DHAVE_CRYPTODEV
enable-tlsext
SSL/TLSの拡張を使用するときに指定、SNI(Server Name Indication)などが使用可能になります
0.9.8f (released 11 Oct 2007) - '--enable-tlsext' オプションを明示的に指定する必要がある
0.9.8j (released 07 Jan 2009) through 1.0.0 (released 29 March 2010) - デフォルトで対応
-fPIC 共有オブジェクトファイル(*.so)も作成する
OpenSSLでプライベート認証局の構築(ルートCA、中間CA) - Qiita
https://qiita.com/bashaway/items/ac5ece9618a613f37ce5
TLS1.3正式対応!OpenSSL 1.1.1 (LTS) インストールメモ | あぱーブログ
https://blog.apar.jp/linux/10588/
cURL - curlでルート証明書の適用がうまくできない。|teratail
https://teratail.com/questions/74022
--cacertと--capathは両方を指定する物ではなく、ルート証明書の保存のされ方によって、どちらか片方を指定する物です。今回は-cacert C:\XXX\YYY.pemとすることで、うまく動くと思います。
--cacertは複数の証明書が記述されている一つの証明書ファイル(PEM形式)を指定する方法です。フルパスまたはカレントディレクトリからの相対パスで指定する必要があります。指定したファイル名の証明書ファイルを探しに行くという事はありません。
--capathは一つの証明書がそれぞれ記述されている複数の証明書ファイル(PEM形式)が置いてあるディレクトリを指定する方法です。ただし、証明書をただ置けば動くというわけではなく、証明書のハッシュに基づいたファイル名にする必要があります(OpenSSLにに含まれるc_rehashユーティリティーで簡単に作成できます)。
TLS/SSLの基礎、OpenSSLとそのインストール、他
https://www.cresc.co.jp/tech/java/Google_Dart2/servers/https_server/https_server.html
これが答え1?
SSL証明書の有効期限や内容を確認する方法一覧 - Qiita
https://qiita.com/bezeklik/items/a8e6296d7e21a7a8a9fe
これが答え2?
openssl コマンドでお手軽にSSL証明書をチェックする - bacchi.me
https://bacchi.me/linux/openssl-tips/
期限切れで、SSL証明書が古いかは以下のコマンド。
$ openssl x509 -noout -dates -in /usr/local/stow/openssl-111g/ssl/cert.pem
notBefore=Sep x 12:00:00 19xx GMT
notAfter=xxx xx 12:00:00 20xx GMT
SSL証明書の内容をopensslで確認する - Qiita
https://qiita.com/masachika/items/e4936feb4087b7ddbe8b
openssl で 証明書の期限を確認する - Qiita
https://qiita.com/ekzemplaro/items/b479b1284e50718bd50b
SSL/TLS 証明書の情報を Ruby で取得する - Qiita
https://qiita.com/QUANON/items/47f862bc3abaf9f302ec
opensslコマンドで証明書情報を確認したい | サポート・お申し込みガイド | GMOグローバルサイン【公式】
https://jp.globalsign.com/support/faq/07.html
以下は全て2020年08月13日(木)20:30追記
●RubyとSSLルート証明書の設定について、その後の調査
(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
これには呆れた。
以上