有効なSSL証明書の検証が「自己署名済み」と報告され、ルートCAがインストールされているにもかかわらず、godaddy CA署名サイトのUbuntu 14.04で失敗します。

有効なSSL証明書の検証が「自己署名済み」と報告され、ルートCAがインストールされているにもかかわらず、godaddy CA署名サイトのUbuntu 14.04で失敗します。

システム:Ubuntu 14.04、apt-upgraded最新バージョン。 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のルート証明書を再インストールしてみました。

  1. CA cert crtパッケージをダウンロードして/usr/share/ca-certificates/extra
  2. 実行dpkg-reconfigure ca-certificatesし、プロンプトに従ってください。

不運。

また試してみましたが、c_rehash運がありません。

このサイトはubuntu 16システムで正常に確認されました。私が試すべき他のものはありますか?

編集:実行すると、strace -e open openssl s_client -connect api.xxx.io:443ca-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_clientENGINE と addedOID には「library-global」以外のプロファイル設定を使用しないでください。どちらもこの問題とは関係ありません。

www.tcell.ioただし、(wgetリダイレクトされる場所)とapi.tcell.ioopenssl s_client接続を指示する場所)は異なるシステムであることに注意してください。 www.ssllabs.com/ssltestによると:

  • api.tcell.io52.8.231.1 GoDaddy-SecureG2証明書(シリアル番号00c8c641d43c76286c)を必要なチェーン証明書に正しくプロビジョニングします(正確に#2と#3が必要です。#4はルートであり、必須ではありませんが許容可能です)

  • www.tcell.io13.57.73.170は同じ証明書を提供しますが、チェーン証明書は提供しないことによってRFCに違反します(ダウングレードされているがBに制限されているDH-1024も使用します)。チェーン証明書がないと、wget証明書を確認できません。インストールされている「バンドル」がトラストストアにチェーン証明書を追加する場合は、wgetOpenSSLを使用してください(web-PKIが機能することを意図した方法ではありません)。はいチェーンを構築して検証できます。

おすすめ記事