web-dev-qa-db-ja.com

OpenSSL Verify:「発行者の証明書を取得できません」と「ローカルの発行者の証明書を取得できません」の違い

man pages から:

2 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:発行者証明書を取得できません

検索された証明書の発行者証明書が見つかりませんでした。これは通常、信頼できる証明書のリストが不完全であることを意味します。

20 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY:ローカル発行者証明書を取得できません

発行者証明書が見つかりませんでした:これは、信頼されていない証明書の発行者証明書が見つからない場合に発生します。

私はそれを得たかどうかわかりません。私にとっては、どちらもまったく同じように聞こえます。 「looked up certificate」および「untrusted certificate」とはどういう意味ですか。信頼されていない証明書は、チェーン上の任意の証明書であり、ルート証明書です。ルックアップ証明書は、AuthoritiyInfoAccessのように、外部から取得した証明書である可能性があります。しかし、私はここで本当に確信が持てません。

4
Hansi

どちらのエラーサイドも非常によく似ています。 crypto/x509/x509_vfy.c行432以降でその使用法を確認できます。

if (trust != X509_TRUST_TRUSTED && !bad_chain) {
    if ((chain_ss == NULL) || !ctx->check_issued(ctx, x, chain_ss)) {
        if (ctx->last_untrusted >= num)
            ctx->error = X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY;
        else
            ctx->error = X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT;
        ctx->current_cert = x;
    } else {
        …
    }
    …
 }

したがって、両方のエラーコードの唯一の違いは、信頼できない証明書が見つかったときにctx->last_untrustedが> = numであったかどうかです。

ここで、numは信頼されていない証明書の数を保持し、last_untrustedは最後の信頼されていない証明書のインデックスを保持します。

last_untrusted >= numX509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY)の条件は、トラストストアの証明書への信頼された追跡が見つからなかった場合に満たされますが、X509_V_ERR_UNABLE_TO_GET_ISSUER_CERTは、CAが一致したがチェーンの検証が失敗した場合に発生するようですとにかく、おそらく悪意のあるチェーンが原因である可能性がありますが、おそらく単に中間が欠落していることが原因です。

3
Ángel