curlやSSLのエラー調査時のリンク集

筆者は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通信の疎通確認に覚えておきたい３つのコマンド - 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

これが答え１？
SSL証明書の有効期限や内容を確認する方法一覧 - Qiita
https://qiita.com/bezeklik/items/a8e6296d7e21a7a8a9fe
これが答え２？
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


重要
2025年04月27日（日）追記
////////////////
[macOS版cURLはcURLと証明書検証の仕様が異なる | さくらのナレッジ](https://knowledge.sakura.ad.jp/38985/)

curlと.pemはAppleがオリジナルを貫くなら、全て日本語で解説してほしい。最悪英語でもいいけど、絶対に正しく動き、正しくないものは動かないようにして欲しいものだ。
////////////////




以下は全て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
これには呆れた。

以上