システム:Ubuntu 14.04、apt-upgrade
d最新バージョン。 openssl、ca証明書、wgetのインストール
兆候:
wget https://api.xxx.io
次のエラーが発生します。
ERROR: cannot verify api.xxx.io's certificate, issued by '/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2':
Unable to locally verify the issuer's authority.
To connect to api.xxx.io insecurely, use `--no-check-certificate'.
どこでもwget https://google.com
うまくいきます。
openssl s_client -connect api.xxx.io:443
結果は次のとおりです。
CONNECTED(00000003)
depth=3 C = US, O = "The Go Daddy Group, Inc.", OU = Go Daddy Class 2 Certification Authority
verify error:num=19:self signed certificate in certificate chain
verify return:0
godaddyのルート証明書を再インストールしてみました。
- CA cert crtパッケージをダウンロードして
/usr/share/ca-certificates/extra
- 実行
dpkg-reconfigure ca-certificates
し、プロンプトに従ってください。
不運。
また試してみましたが、c_rehash
運がありません。
このサイトはubuntu 16システムで正常に確認されました。私が試すべき他のものはありますか?
編集:実行すると、strace -e open openssl s_client -connect api.xxx.io:443
ca-certificates.crtも開いていないと表示されます。
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libssl.so.1.0.0", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libcrypto.so.1.0.0", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/ssl/openssl.cnf", O_RDONLY) = 3
open("/proc/meminfo", O_RDONLY|O_CLOEXEC) = 3
open("/dev/urandom", O_RDONLY|O_NOCTTY|O_NONBLOCK) = 3
open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = 3
open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = 3
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/etc/host.conf", O_RDONLY|O_CLOEXEC) = 3
open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 3
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3
編集2:CApathをopensslに渡すとうまくいきます。
openssl s_client -connect api.xxx.io:443 -showcerts -CApath /etc/ssl/certs
openssl.cnfを編集して環境変数としてオーバーライドしてみましたが、まだ機能しません。
edit3:2つの異なる証明書を使用する2つの異なるホストの代わりに単一のホストを使用して質問を更新しました。
ベストアンサー1
編集したように、ほとんどの質問はおそらくクロスオーバーラップです。https://superuser.com/questions/903247/ssl-root-ca-certificate-is-not-recognized-although-present-in-the-trust-storeそしてhttps://serverfault.com/questions/607233/how-to-make-openssl-s-client-using-default-c。
Ubuntuソースを確認していませんが、Ubuntu 14.04は公称OpenSSL 1.0.1fを使用しています。アップストリームには、オプションが指定されていない場合にデフォルトのトラストストアを無効にするバグがあり、16.04は1.0を使用しましたs_client
。-CA{path,file}
2gを修正しました。 (明らかに16.10でも同様ですが、LTSではなく、もはやサポートされていません。)
プロフィールは関係ありません。s_client
ENGINE と addedOID には「library-global」以外のプロファイル設定を使用しないでください。どちらもこの問題とは関係ありません。
www.tcell.io
ただし、(wget
リダイレクトされる場所)とapi.tcell.io
(openssl s_client
接続を指示する場所)は異なるシステムであることに注意してください。 www.ssllabs.com/ssltestによると:
api.tcell.io
52.8.231.1 GoDaddy-SecureG2証明書(シリアル番号00c8c641d43c76286c)を必要なチェーン証明書に正しくプロビジョニングします(正確に#2と#3が必要です。#4はルートであり、必須ではありませんが許容可能です)www.tcell.io
13.57.73.170は同じ証明書を提供しますが、チェーン証明書は提供しないことによってRFCに違反します(ダウングレードされているがBに制限されているDH-1024も使用します)。チェーン証明書がないと、wget
証明書を確認できません。インストールされている「バンドル」がトラストストアにチェーン証明書を追加する場合は、wget
OpenSSLを使用してください(web-PKIが機能することを意図した方法ではありません)。はいチェーンを構築して検証できます。