web-dev-qa-db-ja.com

認証局は、CSRで指定された署名アルゴリズム(ハッシュ)に従う必要がありますか?

私は署名アルゴリズムを少し遊んで、現在使用しているCAのうち、どのCAがSHA2証明書を発行しているかを特定しようとしました。

SHA256ハッシュを指定してCSRを生成し(hashパラメーターでgnutls-certtoolを使用し、openssl reqパラメーターで-sha256を使用して)、CSRは署名アルゴリズムとしてsha256WithRSAEncryptionを明確に表示しています。

$ openssl req -noout -text -in test.csr

Certificate Request:
    ...
    Signature Algorithm: sha256WithRSAEncryption
        ...

ただし、CAからの結果の証明書はsha1WithRSAEncryptionでハッシュされます。

$ openssl x509 -noout -text -in test.crt

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: ... (...)
        Signature Algorithm: sha1WithRSAEncryption

もちろん、--hash SHA1sha1WithRSAEncryptionハッシュ)を使用してCSRを生成すると、結果の証明書でsha1WithRSAEncryptionが使用されます(期待どおり)。

CAは、ハッシュはCSRではなく注文の一部として指定する必要があると述べています(サードパーティのサービスを介して注文を送信しているため、これはどのような場合でも実行できません)。

したがって問題。 CAはCSRで指定されたハッシュアルゴリズムに従う必要がありますか?

14
Simone Carletti

CSRの作成時に指定された署名アルゴリズムはリクエスト自体に署名するに使用されるメッセージダイジェストに対応します。証明書に署名するときにCAにそのアルゴリズムを優先するように求めることは意図されていません。

CSRで使用されるMDはyour要求の信頼レベルを確立しますが、署名はそのダイジェストではなく公開鍵に依存するため、証明書で使用されるアルゴリズムを意味するものではありません。

ほとんどのCAは、「弱い」ことが発見されない限り、特定の発行証明書に対して同じアルゴリズムを使用し、リクエストで使用したメッセージダイジェストを無視します。

優れたCAは、MD5で署名されたCSRを拒否し(信頼できないため、念のため)、Microsoft(2014年)以降、2年以上使用する証明書にSHA256を使用するように強制する必要があります。 2017年1月にSHA-1以下で署名された証明書を拒否する予定です。

14
NuTTyX

私の経験から、CAには独自の設定があり、多くの場合、CAはその内容を変更するつもりはありません(または、ソフトウェアに接続されているため、まったく不可能です)。必須の件名フィールド、キーの使用法、拡張キーの使用法などについて話している...

たとえば、サブジェクトにL、ST、Cを含めたいが、CAはオフになり、C = countyでのみ証明書を取得します。または、単純な.csrを送信し、クライアント認証(1.3.6.1.5.5.7.3.2)やサーバー認証(1.3.6.1.5.5.7.3.1)などの特別な拡張キー使用法の証明書を取得します。また、多くの場合、SAN= CNに等しい、無料です。

証明書にsha1またはsha256で署名したい場合は、RA =登録機関に問い合わせてください。 RAは実際の要求をCAに送信し、使用されたハッシュアルゴリズムを含む設定をセットアップできます。

CAは.csrファイルの署名を使用して、秘密鍵の所有者であることを確認します。

1
Tomas